Как программно изменить выбор в проводнике пакетов
В настоящее время я разрабатываю плагин для 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;
}