为现有Android项目添加自定义性质

时间:2014-01-14 13:06:19

标签: eclipse eclipse-plugin eclipse-rcp

最终,我想将自己的自定义自然添加到(特别是)Android项目中。为此,我想添加到android项目的配置菜单:添加Shush Nature和Remove Shush Nature。但是,我似乎无法对Android或Java项目执行此操作。

我认为android项目(根据他们的.project)具有性质:com.android.ide.eclipse.adt.AndroidNature

因此我创建了两个定义:

<extension
    point="org.eclipse.core.expressions.definitions">
<definition
    id="test.androidProjectNature">
    <with variable="selection">
        <iterate operator="or" ifEmpty="false">
           <test
                 property="org.eclipse.core.resources.projectNature"
                 value="com.android.ide.eclipse.adt.AndroidNature">
           </test>
        </iterate>
    </with>
</definition>
<definition
    id="test.shushProject">
    <with variable="selection">
        <iterate operator="or" ifEmpty="false">
           <test
                 property="org.eclipse.core.resources.projectNature"
                 value="mobi.shush.plugin.nature">
           </test>
        </iterate>
    </with>
</definition>

据推测,定义test.androidProjectNature将测试项目是否为Android项目,test.shushProject将测试项目是否具有我的自定义性质。

我的问题是我无法做出以下命令:

<extension
     point="org.eclipse.ui.menus">
  <menuContribution
        locationURI="popup:org.eclipse.ui.projectConfigure?after=additions">
     <command
           commandId="Shush-Plugin.addRemoveShushNature"
           label="Disable Shush Nature"
           style="push">
        <visibleWhen>
            <reference 
                definitionId="test.shushProject">
            </reference>
        </visibleWhen>  
     </command>
     <command
           commandId="Shush-Plugin.addRemoveShushNature"
           label="Enable Shush Nature"
           style="push">
        <visibleWhen>
            <reference 
                definitionId="test.androidProjectNature">
            </reference>
        </visibleWhen>  
     </command>
  </menuContribution>

启用Shush Nature会出现在使用 New&gt;创建的项目上项目(不是java项目)。在我看来,这个问题与android没有直接关系,因为即使我在org.eclipse.jdt.core.javanature添加一个检查,这也不会出现在java项目中。另一方面,构建器和自然的默认扩展示例似乎将两个菜单添加到由 New&gt;创建的项目中(再次)。项目

1 个答案:

答案 0 :(得分:0)

好吧,这似乎是一个演员问题左右。

整个想法是使用<adapt>来检查IProject实例。

<extension
    point="org.eclipse.core.expressions.definitions">
<definition
    id="test.androidProjectNature">
    <with variable="selection">
        <iterate operator="or" ifEmpty="false">
          <adapt type="org.eclipse.core.resources.IProject">
               <test
                     property="org.eclipse.core.resources.projectNature"
                     value="com.android.ide.eclipse.adt.AndroidNature">
               </test>
          </adapt>
        </iterate>
    </with>
</definition>
<definition
    id="test.shushProject">
    <with variable="selection">
        <iterate operator="or" ifEmpty="false">
          <adapt type="org.eclipse.core.resources.IProject">
               <test
                     property="org.eclipse.core.resources.projectNature"
                     value="com.shush.plugin.nature">
               </test>
          </adapt>
        </iterate>
    </with>
</definition>