2010-02-17 123 views
1

我正在使用动态MenuContribution,并得到警告说我的两个引用标识符“无法找到”。即使贡献有效。这些警告让我烦恼。动态MenuContribution - 获取警告

我在我的一个插件中定义了一个​​实现。基本上,它看起来是这样的:

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> 

当寻找我得到两个条目有(每个插件in,which use this contribution):

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

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

我在这里错过了什么?任何想法,为什么我得到这个警告?

PS:这没有帮助,使这两个领域PARAM_TYPE & PARAM_COMMAND公众

回答

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 
> 

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

  • 名称 - 名称是任一参数的名称来传递到可执行扩展名,或该命令的参数的标识符。
  • value - 此参数传递的值。

您需要在名称引用属性,在plugin.xml目前其他地方的ID。

+0

它说“名称是参数的名称......”所以我想我使用了它,并且调用了一个参数“type”和另一个“command”。但我想,我必须更多地考虑你的深刻答案,VonC。 – pimpf0r 2010-02-17 12:17:52

+0

@ pimpf0r:就是这样:我不确定“参数的名称”可以引用任何* internal *字段类。在声明模式下,比如'plugin.xml',我希望参数在所述'plugin.xml'的其他地方定义好。 – VonC 2010-02-17 12:50:53

+0

好吧,我想我找到了“别处”。在这种情况下的其他地方意味着:定义/声明参考命令的位置。我在我的动态声明中提到同一个plugin.xml中的一个命令。但是添加的参数没有在那里声明。 感谢您的帮助,VonC。 * high5 * – pimpf0r 2010-02-17 13:41:46

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> 

所以,你是绝对正确的说“修正涉及的定义所述参考标识符”。问题只是其中什么我不得不定义。 我想,在这种情况下,我并没有考虑最明显的问题。