У меня есть следующий код, который действительно работает хорошо:
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());
Поскольку я пропустил некоторые проверки, я опасаюсь, что этот код может вызвать ошибки во время выполнения, если кто-то, использующий мой плагин, имеет другую конфигурацию затмения. Любое предложение по улучшению?
getActivePart()
и getActiveEditor()
могут возвращать значение null, поэтому могут getActiveWorkbenchWindow()
и getActivePage()
(но они менее вероятны).
Вы должны проверить part
чтобы увидеть, является ли это IEditorPart
, IWorkbenchPart
возвращенный getActivePart()
может быть IViewPart
.
JavaUI.getEditorInputJavaElement()
будет работать, только если один из редакторов Java является активным редактором. Для многих других типов редакторов, которые могут быть активны, он возвращает null.