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

时间:2015-01-22 09:57:37

标签: eclipse eclipse-plugin eclipse-jdt

我正在尝试打开一个标记,同时在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);

1 个答案:

答案 0 :(得分:1)

要使其正常工作,IMarker.getResource()方法必须返回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方法)。