динамическое MenuContribution - получить предупреждение - PullRequest
1 голос
/ 17 февраля 2010

Я использую динамический 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>

При просмотре вида проблем я получаю две записитам (для каждого плагина, который использует этот вклад):

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

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

Что мне здесь не хватает?Любые идеи, почему я получаю это предупреждение?

PS: Это не помогает, сделать два поля PARAM_TYPE & PARAM_COMMAND общедоступными

Ответы [ 2 ]

2 голосов
/ 17 февраля 2010

Не думаю, что это связано с наличием внутренних полей в классе.

Если вы посмотрите на похожую ошибку (не такую, поскольку она включает 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>

С учетом точки расширения org.eclipse.ui.menus Страница справки :

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

Параметр для исполняемого расширения или команды - в зависимости от того, где он находится в расширении.

  • name - Имя - это либо имя параметра, передаваемого в исполняемое расширение, либо идентификатор параметра для команды.
  • значение - значение, передаваемое для этого параметра.

Вам нужно указать в атрибуте имени идентификатор, присутствующий где-то еще в вашем plugin.xml.

0 голосов
/ 18 февраля 2010

Конечно, 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>

Итак, вы были абсолютно правы, сказав " theисправление включало определение указанного ссылочного идентификатора".Просто вопрос был где и что я должен был определить.Я думаю, я не думал о самом очевидном в этом случае.

...