2014-03-28 47 views
1

我有下面的代码,这实际上效果很好:如何在eclipse编辑器中正确打开当前打开的类?

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()); 

因为我省略了一些检查,我很担心,此代码会导致运行时错误如果有人使用我的插件有不同的日食配置。任何改进建议?

回答

1

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

您必须测试part,看它是否是一个IEditorPart,通过getActivePart()返回可能是一个IViewPartIWorkbenchPart

JavaUI.getEditorInputJavaElement()只有在其中一个Java编辑器是活动编辑器时才能工作。对于可能处于活动状态的许多其他类型的编辑器,它将返回空值。

+0

感谢您的回答,下周我会修复我的代码。 顺便说一句:你能推荐我一本书或这个话题的另一个来源? –

+0

对不起,我一直在做Eclipse开发,只要看了3.x开发的书籍就已经很久了。 –

相关问题