以编程方式在编辑器中打开 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 和 IFile
。 IDE.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
方法)。
我正在尝试打开一个标记,同时在 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 和 IFile
。 IDE.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
方法)。