package jqian.slicer.view.local;
import java.util.*;
import org.eclipse.core.resources.*;
import org.eclipse.jdt.core.*;
import org.eclipse.jface.text.IRegion;
import org.eclipse.jface.text.IDocument;
import org.eclipse.jface.text.Position;
import org.eclipse.jface.text.source.Annotation;
import org.eclipse.jface.text.source.IAnnotationModel;
import org.eclipse.ui.*;
import org.eclipse.ui.texteditor.ITextEditor;
public class AnnotationManager {
public AnnotationManager(ITextEditor editor) {
this._editor = editor;
this._file = ((IFileEditorInput)editor.getEditorInput()).getFile();
}
/** Add annotation by line. */
public void addAnnotationToLine(int line){
IDocument doc = _editor.getDocumentProvider().getDocument(_editor.getEditorInput());
try{
IRegion region = doc.getLineInformation(line - 1);
String text = doc.get(region.getOffset(), region.getLength());
String trimmedString = text.trim();
int index = text.indexOf(trimmedString);
if (!trimmedString.equals("}") && !trimmedString.equals("{")) {
if (region.getLength() > 0) {
Position pos = new Position(region.getOffset()+index,region.getLength()-index);
Annotation annotation = new Annotation(HIGHLIGHT_STR, false,
(new StringBuilder("Line :")).append(line).toString());
IAnnotationModel model = _editor.getDocumentProvider().getAnnotationModel(_editor.getEditorInput());
model.addAnnotation(annotation, pos);
}
}
} catch (Exception e) {
}
}
public void addAnnotationToClasses(){
ICompilationUnit unit = JavaCore.createCompilationUnitFrom(_file);
IAnnotationModel model = _editor.getDocumentProvider().getAnnotationModel(_editor.getEditorInput());
if(unit != null){
try {
IType types[] = unit.getAllTypes();
for (int i = 0; types != null && i < types.length; i++){
ISourceRange crange = types[i].getNameRange();
Position p = new Position(crange.getOffset(),crange.getLength());
Annotation annot = new Annotation(HIGHLIGHT_STR, false, null);
model.addAnnotation(annot, p);
}
}catch(Exception e){
}
}
}
/** Add annotation by program struture. */
public void addAnnotationToMethods() {
ICompilationUnit unit = JavaCore.createCompilationUnitFrom(_file);
IAnnotationModel model = _editor.getDocumentProvider().getAnnotationModel(_editor.getEditorInput());
if (unit != null){
try {
IType types[] = unit.getAllTypes();
for (int i = 0; types != null && i < types.length; i++) {
org.eclipse.jdt.core.IMethod methods[] = types[i].getMethods();
for (int j = 0; j < methods.length; j++) {
org.eclipse.jdt.core.IMethod method = methods[j];
ISourceRange range = method.getNameRange();
Position pos = new Position(range.getOffset(),range.getLength());
Annotation annot = new Annotation(HIGHLIGHT_STR,false, null);
model.addAnnotation(annot, pos);
}
}
} catch(Exception e){}
}
}
public void removeAnnotations() {
if(_editor == null) return;
IAnnotationModel model = _editor.getDocumentProvider().getAnnotationModel(_editor.getEditorInput());
for (Iterator<?> it = model.getAnnotationIterator(); it.hasNext();) {
Annotation annotation = (Annotation)it.next();
if (annotation.getType().equals(HIGHLIGHT_STR)){
model.removeAnnotation(annotation);
}
}
}
ITextEditor _editor;
IFile _file;
private final String HIGHLIGHT_STR = "highlighter.highlightAnnotation";
}