我正在为 Java 编写 Eclipse 插件,并且遇到以下问题:
给定一个 IEditorPart,我需要检查它是否是一个 java 编辑器。
我可以这样做(IEditor instanceof JavaEditor),但 JavaEditor 是一个 org.eclipse.jdt.internal.ui.javaeditor.JavaEditor,它属于 JDT 的“内部”类。
有没有更聪明、更安全的方法来做到这一点?我不确定为什么没有非内部接口。
我正在为 Java 编写 Eclipse 插件,并且遇到以下问题:
给定一个 IEditorPart,我需要检查它是否是一个 java 编辑器。
我可以这样做(IEditor instanceof JavaEditor),但 JavaEditor 是一个 org.eclipse.jdt.internal.ui.javaeditor.JavaEditor,它属于 JDT 的“内部”类。
有没有更聪明、更安全的方法来做到这一点?我不确定为什么没有非内部接口。
您应该测试 IEditorPart 的 id:
private boolean isJavaEditor(IWorkbenchPartReference ref) {
if (ref == null) {
return false; }
String JavaDoc id= ref.getId();
return JavaUI.ID_CF_EDITOR.equals(id) || JavaUI.ID_CU_EDITOR.equals(id);
}
仅在 eclipse3.1中需要测试实例。
替代文字 http://blogs.zdnet.com/images/Burnette_DSCN0599.JPG
JavaUI
是 Java 用户界面组件的主要访问点。它允许您以编程方式打开 Java 元素上的编辑器、打开 Java 或 Java 浏览透视图以及打开包和类型提示对话框。
JavaUI
是 Java UI 插件的中央访问点 (id " org.eclipse.jdt.ui
")
您可以看到isJavaEditor()
例如在ASTProvider
.
这里的识别机制确实是简单的String比较。
无论如何,避免与内部类进行强制比较是明智的:它已被列为插件开发中的 10 个常见错误之一;)。
一种策略可能是使用JavaUI.getEditorInputJavaElement(IEditorPart):
// given IEditorPart editor
IJavaElement elt = JavaUI.getEditorInputJavaElement(editor.getEditorInput());
if (elt != null) {
// editor is a Java editor
}
null
如果编辑器输入实际上不是 Java 元素,则该方法返回。