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

标签 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: The resource tree is locked for modifications. at org.eclipse.core.internal.resources.WorkManager.checkIn(WorkManager.java:119) at org.eclipse.core.internal.resources.Workspace.prepareOperation(Workspace.java:2188) at org.eclipse.core.internal.resources.Resource.deleteMarkers(Resource.java:821)

最佳答案

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

构建要在监听器中设置的标记列表,然后提交 WorkspaceJob 进行更改。这应该在锁释放后运行。

关于java - 如何在 ResourceChangeListener(eclipse 插件)中添加标记?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54785210/

相关文章:

java - 使用java执行Powershell脚本

java - android 项目内存不足

java - 将云作为独立项目使用的最佳方式是什么?

java - Eclipse 插件 : Custom icon for a Marker

linux - REDHAT:无法打开 Eclipse

java - Android - 无法访问子域下的 API

java - spring-mvc 应用程序的模板和布局

java -//格式化java源码注释--------------------------------

java - 导出Eclipse插件

java - MyEclipse中如何跳转到指定断点?