如何在ResourceChangeListener(eclipse插件)中添加标记?

时间:2019-02-20 11:26:09

标签: java eclipse-plugin

我需要使用标记和注释突出显示文本。 在激活文件(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 :(得分:1)

由于工作空间已锁定且不允许更改,因此您无法在实际的IResourceChangeListener中添加标记或对资源进行任何其他更改。

建立要在侦听器中设置的标记的列表,然后提交WorkspaceJob进行更改。该操作应在锁定释放后运行。