我正在使用动态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
公开
答案 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>
所以,你完全正确地说“纠正涉及所述参考标识符的定义”。问题只是 和我必须定义的。 我想,在这种情况下,我并没有考虑最明显的问题。