Java 如何在eclipse编辑器中正确获取当前打开的类?

Java 如何在eclipse编辑器中正确获取当前打开的类?,java,eclipse,eclipse-plugin,Java,Eclipse,Eclipse Plugin,我有以下代码,实际上运行良好: IJavaElement je = null; IWorkbenchPart part = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().getActivePart(); if (part instanceof ContentOutline) part = PlatformUI.getWorkbench().getActiveWorkbenchWindow().ge

我有以下代码,实际上运行良好:

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;
    }
但我得到一个警告:

不鼓励访问:由于对所需库C:\eclipse\plugins\org.eclipse.jdt.ui_3.9.1.v20130820-1427.jar的限制,无法访问IViewPartInputProvider类型

由于访问内部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配置,那么这段代码可能会导致运行时错误。有任何改进建议吗?

getActivePart()
getActiveEditor()
可能会返回null,
getActiveWorkbenchWindow()
getActivePage()
(但这些可能性较小)

您必须测试
part
以查看它是否是
IEditorPart
getActivePart()
返回的
IWorkbenchPart
可能是
IViewPart


JavaUI.getEditorInputJavaElement()
仅当其中一个Java编辑器是活动编辑器时才起作用。对于可能处于活动状态的许多其他类型的编辑器,它将返回null。

感谢您的回答,我将在下周修复我的代码。顺便问一下:你能给我推荐一本关于这个主题的书或其他资料吗?对不起,我做Eclipse开发已经很长时间了,从我看3.x开发的书到现在已经很久了。