Eclipse RCP:以编程方式设置活动部分或选择非活动部分

Eclipse RCP: Set active part programmatically or get selection of inactive part

在我的 Eclipse 插件中我有这个工作流程:

  1. 在 Package Explorer 中获取当前选择的项目
  2. 做点什么
  3. 获取Package Explorer中当前选中的项目(同1)
  4. 做点不一样的事

1(和3)是这样实现的:

ISelectionService selectionService = PlatformUI.getWorkbench()
    .getActiveWorkbenchWindow().getSelectionService();
ISelection selection = selectionService.getSelection();
[...]

现在,问题是在 1 之前,选择了 Package Explorer,因为这是触发工作流的唯一方式。但是第 2 步更改了活动部分,因为它刷新了一个 TreeView,使其成为活动部分。当我现在尝试 运行 3(与 1 的方法相同)时,我遇到了一个问题:Package Explorer 不再是 selectionServiceactivePart,因此 selection 一片空白。

我的问题是:有没有什么方法可以为不是活动视图的特定视图获取 ISelectionService?如果没有,有没有办法在执行步骤 3 之前以编程方式设置活动部分?

顺便说一句,这是一个 Eclipse 3.x 插件。

如果您找到包资源管理器的 IViewPart,您可以直接使用以下方法访问它的 ISelectionProvider

IViewPart part = .. find package explorer view part

IViewSite viewSite = part.getViewSite();

ISelectionProvider provider = viewSite.getSelectionProvider();

ISelection selection = provider.getSelection();