以编程方式在编辑器中打开 Marker 时出现问题

Issue while opening Marker in an editor programatically

我正在尝试打开一个标记,同时在 eclipse 插件中双击 TableViewer 中的条目。我能够从标记中获取关联的资源,但是在执行 openEditor 方法时没有任何反应。

代码如下:

  viewer.addDoubleClickListener(new IDoubleClickListener() {
      public void doubleClick(DoubleClickEvent event) {
            IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
            try {
                IStructuredSelection sel = (IStructuredSelection) event.getSelection();
                ReviewIssue reviewIssue = (ReviewIssue) sel.getFirstElement();
                if(reviewIssue != null){
                    MessageDialog.openError(window.getShell(), "Insta Review", reviewIssue.getMarker().getResource());
                    try {
                        IDE.openEditor(window.getActivePage(), reviewIssue.getMarker(), true);
                    } catch (PartInitException e) {
                        MessageDialog.openError(window.getShell(), "Insta Review", e.getMessage());
                    }
                } 
            } catch (Exception e) {
                MessageDialog.openError(window.getShell(), "Insta Review", e.getMessage());
            }
        }
  });

如果这里遗漏了什么,请告诉我。提前致谢。
也忽略消息对话框,因为我计划稍后实现日志记录功能。


更新:

即使我在 IFile 上创建了标记,我也得到了相同的行为。我终于能够使用 IFile 而不是标记打开编辑器。

IFile iFile = markerProject.getFile(path);
//IMarker marker = iFile.createMarker("id.myMarker");
.....
IDE.openEditor(window.getActivePage(), reviewIssue.getiFile(), true);
//IDE.openEditor(window.getActivePage(), reviewIssue.getMarker()), true);

要实现此功能,IMarker.getResource() 方法必须 return 和 IFileIDE.openEditor中的代码是:

// get the marker resource file
if (!(marker.getResource() instanceof IFile)) {
    IDEWorkbenchPlugin
                .log("Open editor on marker failed; marker resource not an IFile"); //$NON-NLS-1$
    return null;
}

因此请查看工作区 .metadata 目录中的 .log 文件,看看您是否收到该日志消息。

通常您会使用 IFile.createMarker 方法为文件创建标记(createMarker 实际上是 IResource 方法)。