Как правильно открыть текущий открытый класс в редакторе Eclipse?

1

У меня есть следующий код, который действительно работает хорошо:

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-plugin

1 ответ

1
Лучший ответ

getActivePart() и getActiveEditor() могут возвращать значение null, поэтому могут getActiveWorkbenchWindow() и getActivePage() (но они менее вероятны).

Вы должны проверить part чтобы увидеть, является ли это IEditorPart, IWorkbenchPart возвращенный getActivePart() может быть IViewPart.

JavaUI.getEditorInputJavaElement() будет работать, только если один из редакторов Java является активным редактором. Для многих других типов редакторов, которые могут быть активны, он возвращает null.

  • 0
    Спасибо за ответ, я исправлю свой код на следующей неделе. Кстати: не могли бы вы порекомендовать мне книгу или другой источник на эту тему?
  • 0
    Извините, но я занимаюсь разработкой Eclipse так давно, что я смотрел книги по разработке 3.x.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню