动态MenuContribution - 获取警告

时间:2010-02-17 09:26:54

标签: eclipse plugins warnings

我正在使用动态MenuContribution并收到一条警告,指出我找不到两个引用的标识符“无法找到”。即使贡献有效。这些警告让我感到不安。

我在其中一个插件中定义了CompoundContributionItem实现。基本上它看起来像这样:

public class ViewerHistoryMenuItems extends CompoundContributionItem
    implements IExecutableExtension { 

    private static final String PARAM_TYPE = "type";
    private static final String PARAM_COMMAND = "command";

    // some fields

    public void setInitializationData(final IConfigurationElement config,
            final String propertyName, final Object data) {
        /* set fields */
    }

    protected final IContributionItem[] getContributionItems() {
        /* create Items */ 
    }
}

在其他插件中,我通过声明以下内容来使用此ContributionItem实现:

<menuContribution locationURI="menu:mylocationUri">
    <dynamic id="myId">
        <class class="ViewerHistoryMenuItems">
            <parameter
                     name="type"
                     value="someValue">
            </parameter>
            <parameter
                     name="command"
                     value="someCommandId">
            </parameter>
        </class>
    </dynamic>
    <command
        commandId="someCommandId"
        icon="anIcon.png">
    </command>
</menuContribution>

在查看Problems-View时,我得到两个条目(对于每个使用此贡献的插件):

**Referenced identifier 'type' in attribute 'name' cannot be found**

**Referenced identifier 'command' in attribute 'name' cannot be found**

我在这里缺少什么?任何想法,为什么我得到这个警告?

PS:制作两个字段PARAM_TYPE&amp; PARAM_COMMAND公开

2 个答案:

答案 0 :(得分:2)

我认为这与课堂内部字段的存在无关。

如果您查看类似的错误(因为它包含annotationType而不一样),则更正涉及所述引用标识符的定义

Referenced identifier 'com.atlassian.connector.eclipse.cruicible.ui.comment.annotation' 
in attribute 'annotationType' cannot be found

修正:

+   <extension
+         point="org.eclipse.ui.editors.annotationTypes">
+      <type
+            markerType="com.atlassian.connector.eclipse.crucible.ui.com.atlassian.connector.eclipse.cruicible.ui.comment.marker"
+            name="com.atlassian.connector.eclipse.cruicible.ui.comment.annotation">
+      </type>
+   </extension>
+   <extension
+         id="com.atlassian.connector.eclipse.cruicible.ui.comment.marker"
+         point="org.eclipse.core.resources.markers">
+   </extension>

考虑extension point org.eclipse.ui.menus help page

<!ELEMENT parameter  EMPTY>
<!ATTLIST parameter
  name  IDREF #REQUIRED
  value CDATA #REQUIRED
>
  

可执行扩展名或命令的参数 - 取决于它在扩展名中的显示位置。

     
      
  • name - 名称是要传递给可执行扩展名的参数的名称,或者是命令参数的标识符。
  •   
  • value - 要为此参数传递的值。
  •   

您需要在name属性中引用plugin.xml中其他位置的ID。

答案 1 :(得分:0)

当然,VonC。我们走了:

在动态声明中(见上文),有两个参数引用

<parameter
  name="type"
  value="someValue">
</parameter>
<parameter
  name="command"
  value="someCommandId">
</parameter>

这两个参数旨在传递给命令本身。命令声明在同一 plugin.xml 中,但声明这两个commandParameters。

我所做的是添加这些缺少的commandParameters,解决缺失的引用,警告明确说明了这一点。

<command
  categoryId="aCategory"
               id="someCommandId"
               name="%theName">
  <commandParameter
    id="type"
    name="type"/>
  <commandParameter
    id="command"
    name="command">
  </commandParameter>
</command>

所以,你完全正确地说“纠正涉及所述参考标识符的定义”。问题只是 我必须定义的。 我想,在这种情况下,我并没有考虑最明显的问题。