Как программно изменить выбор в проводнике пакетов

В настоящее время я разрабатываю плагин для eclipse, который анализирует зависимости и ссылки между проектами в рабочей области Eclipse и отображает их в своем собственном представлении в виде UML-диаграммы.

Чтобы повысить полезность моего плагина, я хочу добавить интерактивность к диаграмме, позволяя пользователям открывать проект в проводнике пакетов и, если применимо, открывать его в редакторе, нажимая на отображаемый график.

Однако моя проблема заключается в том, что, хотя я знаю, как получить данный выбор из проводника пакетов, я не смог найти способ изменить выбор или просто открыть проект в проводнике пакетов программным способом.

У кого-нибудь есть решение этой проблемы?

2 ответа

Решение

Я нашел решение. Eclipse предлагает прямой доступ к проводнику пакетов в org.eclipse.jdt.internal.ui.packageview.PackageExplorerPart, но это не рекомендуется.

import org.eclipse.jdt.internal.ui.packageview.PackageExplorerPart;

...

PackageExplorerPart part= PackageExplorerPart.getFromActivePerspective();
IResource resource =  /*any IResource to be selected in the explorer*/;

part.selectAndReveal(resource);

Это выделит любой источник resource и расширять дерево по мере необходимости.

Этот ответ расширяет то, что говорится в принятом ответе, но продвигает его дальше для людей, которые возражают против предупреждения "Неудовлетворительный доступ" об использовании PackageExplorerPart, Точное предупреждение (больше для облегчения поиска в Google), которое вы видите,

Неудовлетворительный доступ: тип PackageExplorerPart недоступен из-за ограничения на требуемую библиотеку /eclipse_install_path/eclipse/plugins/org.eclipse.jdt.ui_3.9.1.v20130820-1427.jar

Пример кода:

final IWorkbenchPart activePart = getActivePart();
if (activePart != null && activePart instanceof IPackagesViewPart) {
    ((IPackagesViewPart) activePart).selectAndReveal(newElement);
}

Вспомогательный код:

private IWorkbenchPart getActivePart() {
    final IWorkbench workbench = PlatformUI.getWorkbench();
    final IWorkbenchWindow activeWindow = workbench.getActiveWorkbenchWindow();
    if (activeWindow != null) {
        final IWorkbenchPage activePage = activeWindow.getActivePage();
        if (activePage != null) {
            return activePage.getActivePart();
        }
    }
    return null;
}
Другие вопросы по тегам