Как я могу добавить маркеры в ResourceChangeListener (плагин eclipse)? - PullRequest
0 голосов
/ 20 февраля 2019

Мне нужно выделить текст, используя маркер и аннотацию.Я могу выделить текст после активации файла (IPartListener2), но мне нужно выделить этот текст после того, как пользователь сохранит файл (IResourceChangeListener).

Я использую следующий код для добавления маркеров,

    private void updateMarkers2(IResource resource) throws PartInitException {
    IEditorPart editorPart = PlatformUI.getWorkbench()
            .getActiveWorkbenchWindow().getActivePage()
            .getActiveEditor();
    if (editorPart != null) {
        FileEditorInput input = (FileEditorInput) editorPart
                .getEditorInput();
        IFile file = input.getFile();
        IEditorDescriptor desc = PlatformUI.getWorkbench().getEditorRegistry().getDefaultEditor(file.getName());
        FileEditorInput fileEditorInput = new FileEditorInput(file);
        ITextEditor editor = (ITextEditor)PlatformUI.getWorkbench()
                .getActiveWorkbenchWindow().getActivePage().openEditor(fileEditorInput, desc.getId());
        IDocumentProvider dp = editor.getDocumentProvider();
        IDocument doc = dp.getDocument(fileEditorInput);

        IMarker marker = null;
        try {
            resource.deleteMarkers("org.eclipse.marker.value.id", true, 1);

            final IRegion region = doc.getLineInformation(77);
            marker = resource.createMarker("org.eclipse.marker.value.id");
            //marker.setAttribute(IMarker.LINE_NUMBER, 77);
            marker.setAttribute(IMarker.CHAR_START, region.getOffset());
            marker.setAttribute(IMarker.CHAR_END, region.getOffset() + region.getLength());
        } catch (CoreException | BadLocationException e) {
            e.printStackTrace();
        }
    }
}

Но я получаю следующее исключение:

org.eclipse.core.internal.resources.ResourceException: дерево ресурсов заблокировано для изменений.в org.eclipse.core.internal.resources.WorkManager.checkIn (WorkManager.java:119) в org.eclipse.core.internal.resources.Workspace.prepareOperation (Workspace.java:2188) в org.eclipse.core.internal.resources.Resource.deleteMarkers (Resource.java:821)

Спасибо заранее.

1 Ответ

0 голосов
/ 20 февраля 2019

Вы не можете добавлять маркеры или вносить какие-либо другие изменения в ресурсы в фактическом IResourceChangeListener, поскольку рабочая область заблокирована и изменения недопустимы.

Создайте список маркеров, которые вы хотите установитьслушатель, а затем отправить WorkspaceJob, чтобы внести изменения.Это должно работать после снятия блокировки.

...