Eclipse plugin 如何将工作集添加到eclipse公共导航器?

Eclipse plugin 如何将工作集添加到eclipse公共导航器?,eclipse-plugin,Eclipse Plugin,我希望为使用公共导航器框架的Eclipse插件添加对工作集的支持 在EclipseBugzilla中提到这是受支持的 公共导航器的在线手册中没有一本解释如何操作 我不知道从哪里开始,因为它没有扩展点,而且工作集实现类都是“内部”的。我有一个非常基本的navigator设置,显示默认的项目资源和一些额外的IFileSystem实现ITreeContentProvider的东西。您可以使用以下方法获取工作集管理器: IWorkingSetManager manager = PlatformUI.

我希望为使用公共导航器框架的Eclipse插件添加对工作集的支持

  • 在EclipseBugzilla中提到这是受支持的
  • 公共导航器的在线手册中没有一本解释如何操作

我不知道从哪里开始,因为它没有扩展点,而且工作集实现类都是“内部”的。我有一个非常基本的navigator设置,显示默认的项目资源和一些额外的
IFileSystem
实现
ITreeContentProvider
的东西。您可以使用以下方法获取工作集管理器:

IWorkingSetManager manager = PlatformUI.getWorkbench().getWorkingSetManager();
从中可以得到可见的工作集,包括:

IWorkingSet [] workingSets = manager.getWorkingSets();
可以通过以下方式访问工作集的成员:

IAdaptable [] elements = workingSet.getElements();

因此,您可以使用“工作集”列表作为树查看器的输入,并调整树内容提供程序以处理此问题。

在retrospect中,以下是更好的解决方案。我们不需要实现
ITreeContentProvider
并自己遍历工作集,而是可以为相同的内容重用现有的标准提供程序,这可能会更好

您可以这样使用它们:

 <extension
     point="org.eclipse.ui.navigator.viewer">
   <viewerContentBinding 
        viewerId="rascal.navigator">
      <includes>
         <contentExtension pattern="org.eclipse.ui.navigator.resourceContent" />                      
         <contentExtension pattern="org.eclipse.ui.navigator.resources.filters.*"/>
         <contentExtension pattern="org.eclipse.ui.navigator.resources.linkHelper"/>
         <contentExtension pattern="org.eclipse.ui.navigator.resources.workingSets"/>
      </includes>
   </viewerContentBinding>

在NavigatorContentProvider类中,我们实现了
getElements
getChildren
,但只针对我们自己的附加内容

您希望如何处理工作集?我希望它们具有与java navigator相同的效果,在我的navigator视图中按工作集对项目进行分组。我还没有尝试过它,但这看起来是一个清晰而简单的解决方案。谢谢好的,很有魅力。查看我的代码(请不要因为代码中的所有实例而责怪我)。
 <extension
         point="org.eclipse.ui.navigator.navigatorContent">
      <navigatorContent
            activeByDefault="true"
            contentProvider="org.rascalmpl.eclipse.navigator.NavigatorContentProvider"
            id="org.rascalmpl.navigator.searchPathContent"
            labelProvider="org.rascalmpl.eclipse.navigator.NavigatorContentLabelProvider"
            name="Rascal search path"
            priority="normal">
         <triggerPoints>
          <or>
                 <instanceof value="org.eclipse.core.resources.IResource"/>
          </or>
         </triggerPoints>
         <possibleChildren>
            <or>
               <instanceof value="java.lang.Object"/> 
            </or>
         </possibleChildren>
         <actionProvider
               class="org.rascalmpl.eclipse.navigator.NavigatorActionProvider"
               id="org.rascalmpl.navigator.actions">
         </actionProvider>
         <commonSorter
               class="org.rascalmpl.eclipse.navigator.Sorter">
         </commonSorter>

      </navigatorContent>
      <commonWizard
            type="new"
            wizardId="rascal_eclipse.wizards.NewRascalFile">
         <enablement></enablement>
      </commonWizard>
      <commonWizard
            type="new"
            wizardId="rascal_eclipse.projectwizard">
         <enablement></enablement>
      </commonWizard>
   </extension>