1

Eclipse 插件开发新手。我们正在开发一个自定义插件,它在 MyEclipse 10 上包含一个构建器,我相信它是 Eclipse Indigo。

无论如何,我使用了 Builder 向导生成的示例代码,对其进行了修改,并使其正常工作。现在我试图让“切换自然”动作更像是“添加自然”或“删除自然”,这取决于自然是否存在。

我在 plugin.xml 中有以下内容(我更改了一些名称以保护无辜者):

<extension
       point="org.eclipse.ui.popupMenus">
    <objectContribution
          adaptable="true"
          id="Sample_Eclipse_Plugin.contribution1"
          nameFilter="*"
          objectClass="org.eclipse.core.resources.IProject">

          <menu
                label="Sample"
                id="mainSampleMenu"
                menubarPath="additions">
             <separator
                   name="group1">
             </separator>
          </menu>
          <action
                class="com.sample.eclipse.builder.AddSampleNatureAction"
                enablesFor="+"
                id="Sample_Eclipse_Plugin.addNatureAction"
                label="Add Sample Project Nature"
                menubarPath="mainSampleMenu/group1">
             <enabledWhen>
                <with variable="selection">
                   <iterate ifEmpty="false" operator="or">
                         <with variable="projectNature">
                            <not>
                               <equals value="Sample_Eclipse_Plugin.sampleNature"/>
                            </not>
                         </with>
                   </iterate>
                </with>
             </enabledWhen>
          </action>
          <action
                class="com.sample.eclipse.builder.RemoveSampleNatureAction"
                enablesFor="+"
                id="Sample_Eclipse_Plugin.removeNatureAction"
                label="Remove Sample Project Nature"
                menubarPath="mainSampleMenu/group1">
             <enabledWhen>
                <with variable="selection">
                   <iterate ifEmpty="false" operator="or">
                         <with variable="projectNature">
                            <equals value="Sample_Eclipse_Plugin.sampleNature"/>
                         </with>
                   </iterate>
                </with>
             </enabledWhen>
          </action>
    </objectContribution>
 </extension>

弹出菜单显示完美,但我仍然得到添加和删除选项。所有这些都是基于 Eclipse 生成的示例代码,我将通过 Google 搜索在网上找到的东西拼凑起来。由于缺乏知识,我确信我在做一些非常愚蠢的事情,但任何指导都将受到高度赞赏。

4

1 回答 1

2

添加示例项目性质

<enabledWhen>
   <with variable="selection">
      <iterate ifEmpty="true" operator="and">
         <adapt type="org.eclipse.core.resources.IResource">
            <not>
               <test
                     property="org.eclipse.core.resources.projectNature"
                     value="Sample_Eclipse_Plugin.sampleNature" />
            </not>
         </adapt>
      </iterate>
   </with>
</enableWhen>

它测试所有 ( operator="and") 性质不是 sampleNature。如果选择的项目没有性质,可以ifEmpty="true"添加( )sampleNature。

删除示例项目性质

<enabledWhen>
   <with variable="selection">
      <iterate ifEmpty="false" operator="or">
         <adapt type="org.eclipse.core.resources.IResource">
            <test
                  property="org.eclipse.core.resources.projectNature"
                  value="Sample_Eclipse_Plugin.sampleNature" />
         </adapt>
      </iterate>
   </with>
</enableWhen>

它测试 ( operator="or") 个性质之一是 sampleNature。如果所选项目没有性质,则无法(ifEmpty="false")删除 sampleNature。

我在 Eclipse 4.3.1 (Kepler) 中测试了类似的代码。

于 2013-11-08T12:01:27.527 回答