如何在程序中编程更改包资源管理器中的选择

5
我正在开发一款Eclipse插件,用于分析Eclipse Workspace内项目之间的依赖关系和引用,并以类似UML图的视图显示它们。
为了增加插件的实用性,我希望通过允许用户在显示的图形上点击来打开包资源管理器中的项目(如果适用,则在编辑器中打开)来为图表添加交互功能。
然而,我的问题是,虽然我知道如何从包资源管理器中获取给定的选择,但我还没有找到一种改变选择或仅通过编程方式打开包资源管理器中的项目的方法。
有人有解决这个问题的方法吗?

2
如果目标是打开一个针对项目进行聚焦的编辑器,为什么还要涉及到包资源管理器呢?它甚至可能并没有打开。 - nitind
我需要处理多种类型的数据,其中并不是所有的都可以在编辑器中打开。在这些情况下,我希望能够在包资源管理器中简单地将其突出显示,或者如果它是一个项目,则在那里打开它。 - Dragondraikk
2个回答

3
这个答案扩展了被接受的答案所述,但对于那些关注"不建议访问"警告使用PackageExplorerPart的人来说更进一步。 您看到的确切警告(更易于通过Google搜索)是:

不建议访问:由于所需库/ eclipse_install_path/eclipse/plugins/org.eclipse.jdt.ui_3.9.1.v20130820-1427.jar受到限制,因此无法访问类型PackageExplorerPart

代码示例:
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;
}

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

这将突出显示任何资源并根据需要展开树形结构。


你还应该实现IShowInTargetList。http://help.eclipse.org/juno/topic/org.eclipse.platform.doc.isv/reference/api/org/eclipse/ui/part/IShowInTargetList.html - nitind
@nitind 我真的不明白那会有什么必要或优势。你能详细说明一下吗? - Dragondraikk
1
它允许您的部件提供一个零件ID列表,以在导航->显示菜单中显示。 - nitind

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接