Как удалить IMarkers после закрытия редактора (или почему не работает свойство IMarker.TRANSIENT)? - PullRequest
2 голосов
/ 30 апреля 2019

Я пишу собственный редактор в Eclipse и просто интегрировал пользовательское распознавание ошибок. Теперь я столкнулся со странной проблемой: я могу добавить маркеры в мой редактор, которые отображаются нормально, я также могу удалить их во время работы редактора.

Что не работает: Когда я закрываю свой редактор, я хочу, чтобы маркеры исчезли / были удалены.

То, что я сейчас делаю, это

  • создание маркеров с переходным свойством, установленным следующим образом: marker.setAttribute(IMarker.TRANSIENT, true); Это, похоже, ничего не меняет.

  • пытается удалить все аннотации через средства просмотра исходного кода модель-аннотации . Это не работает, потому что, когда я пытаюсь подключиться к своему методу dispose() редактора или добавить DisposeListener к моему textwidget * источника просмотра , просмотрщик источника уже был удален и getSourceViewer().getAnnotationModel(); возвращает null.

Мой deleteMarkers метод:

private void deleteMarkers() {
        IAnnotationModel anmod = getSourceViewer().getAnnotationModel();
        Iterator<Annotation> it = anmod.getAnnotationIterator();

        while (it.hasNext()) {
            SimpleMarkerAnnotation a = (SimpleMarkerAnnotation) it.next();
            anmod.removeAnnotation(a);

            try {
                a.getMarker().delete();
            } catch (CoreException e) {
                e.printStackTrace();
            }

        }
    }

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

1 Ответ

2 голосов
/ 07 мая 2019

Присоединитесь к событию закрытия вашего редактора, получите ссылку на IResource для редактора (я полагаю, вы можете получить это на IEditorInput) и вызовите IResource # deleteMarkers () на соответствующем ресурсе, который будет удалять их при закрытии редактора.По замыслу eclipse не удаляет маркеры, когда редакторы закрыты.

Вот некоторые ссылки: http://help.eclipse.org/kepler/topic/org.eclipse.platform.doc.isv/reference/api/org/eclipse/core/resources/IResource.html#deleteMarkers(java.lang.String, boolean, int)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...