我有以下代码,实际上效果很好:
IJavaElement je = null;
IWorkbenchPart part = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().getActivePart();
if (part instanceof ContentOutline)
part = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().getActiveEditor();
if (part instanceof IViewPartInputProvider)
{
Object elem = ((IViewPartInputProvider)part).getViewPartInput();
if (elem instanceof IJavaElement)
je = (IJavaElement)elem;
}
但我收到警告:
Discouraged access: The type IViewPartInputProvider is not accessible due to restriction on required library C:\eclipse\plugins\org.eclipse.jdt.ui_3.9.1.v20130820-1427.jar
由于访问内部API,似乎这是一种肮脏的方式。有更好的方法吗?
更新
我发现此代码也可以正常工作,但不会产生任何警告:
IJavaElement je = null;
IWorkbenchPart part = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().getActivePart();
if (part instanceof ContentOutline)
part = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().getActiveEditor();
je = JavaUI.getEditorInputJavaElement(((IEditorPart)part).getEditorInput());
由于我省略了一些检查,我担心如果使用我的插件的人有不同的eclipse配置,这段代码可能会导致运行时错误。有任何改进建议吗?
答案 0 :(得分:1)
getActivePart()
和getActiveEditor()
可能会返回null,因此可能getActiveWorkbenchWindow()
和getActivePage()
(但这些可能性较小)。
您必须测试part
以查看它是否为IEditorPart
,IWorkbenchPart
返回的getActivePart()
可能是IViewPart
。
JavaUI.getEditorInputJavaElement()
仅在其中一个Java编辑器是活动编辑器时才有效。对于可能处于活动状态的许多其他类型的编辑器,它将返回null。