Редактор Eclipse: AnnotationModel не обновляется?

Я работаю над собственным редактором в Eclipse. Мой редактор расширяется org.eclipse.ui.editors.text.TextEditor и я написал свой собственный IDocumentProvider,

Это необходимо для этого, потому что между входным файлом и IDocuments есть соотношение 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;
    }
}

Любая помощь приветствуется!

0 ответов

Другие вопросы по тегам