Редактор Eclipse: AnnotationModel не обновляется?
Я работаю над собственным редактором в Eclipse. Мой редактор расширяется org.eclipse.ui.editors.text.TextEditor
и я написал свой собственный IDocumentProvider
,
Это необходимо для этого, потому что между входным файлом и IDocument
s есть соотношение 1:n (для каждого входного файла из него получается более одного документа). (Я использую кастом OutlinePage
переключаться между документами)
Моя проблема заключается в следующем:
Когда я открываю редактор, все работает нормально, но когда я пытаюсь добавить аннотацию (например, закладку), она остается, когда я перехожу на другой документ. Это странно, потому что я устанавливаю новую AnnotationModel каждый раз при смене, и когда я проверяю модель после смены документов, это не то же самое.
Но почему-то маленький визуальный маркер слева не исчезает и остается там при сохранении, смене документов или звонке getSourceViewer().getTextWidget().redraw();
,
Маркер
Это мой код:
Редактор:
public class MyEditor extends TextEditor implements DocumentChangeListener {
public MyEditor() {
super();
documentProvider = new DocumentProvider(this);
setDocumentProvider(documentProvider);
}
@Override
public void doDocumentChange() {
getSourceViewer().setDocument(documentProvider.getDocument(getEditorInput()),
documentProvider.getAnnotationModel(getEditorInput()));
getSourceViewer().getTextWidget().redraw();
}
...
}
DocumentProvider:
public class DocumentProvider implements IDocumentProvider, IDocumentProviderExtension, IDocumentProviderExtension2,
IDocumentProviderExtension3, IDocumentProviderExtension4, IDocumentProviderExtension5 {
private EditorPart ed;
private FileEditorInput input;
private MyData data;
private FastPartitioner partitioner;
private HashMap<Statement, IDocument> docs;
private HashMap<Statement, IAnnotationModel> anMods;
private IProgressMonitor progressMonitor;
public DocumentProvider(EditorPart editor) {
this.ed = editor;
docs = new HashMap<>();
anMods = new HashMap<>();
}
@Override
public void connect(Object element) throws CoreException {
element = (FileEditorInput) element;
data = MyData.getInstance();
File file = ((FileEditorInput) element).getPath().toFile();
data.readFile(file, true);
for (DataPoint dp : data.getDataPoints()) {
docs.put(dp, new Document(dp.getSomeText()));
anMods.put(dp, new ResourceMarkerAnnotationModel(((FileEditorInput) element).getFile()));
}
}
@Override
public IAnnotationModel getAnnotationModel(Object element) {
return anMods.get(data.getCurrentAnalysis1Statement());
}
@Override
public IDocument getDocument(Object element) {
IDocument doc = docs.get(data.getFirstDataPoint());
IAnnotationModel amodl = anMods.get(data.getFirstDataPoint());
amodl.connect(doc);
String[] TYPES = { IDocument.DEFAULT_CONTENT_TYPE };
partitioner = new FastPartitioner(new RuleBasedPartitionScanner(), TYPES);
partitioner.connect(doc);
doc.setDocumentPartitioner(partitioner);
return doc;
}
}
Любая помощь приветствуется!