Как расширить исходное меню в Eclipse? (или: Каково его местоположение?)

Я разрабатываю плагин eclipse и пытаюсь расширить исходное меню (mainMenubar/Source - видимое при редактировании в java-редакторе) в Eclipse 3.7.

Документация говорит, что полагаться на org.eclipse.ui.menus- точка расширения, поскольку старые точки расширения устарели. Для меня является полным секретом, где можно получить надежные locationURI, но мне наконец удалось найти какой-то правдоподобный URI с помощью Plugin Spy (следуя совету здесь). Таким образом, следующим должен быть фрагмент расширения для plugin.xml:

<extension
 point="org.eclipse.ui.menus">
 <menuContribution
     locationURI="menu:org.eclipse.jdt.ui.source.menu">
  <command
    commandId="some.command.id"
        label="Some label"
        style="push">
  </command>
 </menuContribution>
</extension>

К сожалению, при запуске плагина для моей разработки IDE не появляется команда, а также нет сообщения об ошибке. Просто ничего не происходит. Когда я устанавливаю locationURI в "menu:help", в меню справки появляется новая команда, поэтому проблема, похоже, действительно в locationURI.

3 ответа

Решение

Я столкнулся с той же проблемой. Я наконец понял, что расширение меню "Источник" с помощью (рекомендуемой) точки расширения org.eclipse.ui.menus это невозможно.

Причина в том, что меню определено в старом стиле actionSet (например, меню "Источник") создается после обработки org.eclipse.ui.menus-расширений. Таким образом, эти расширения могут вносить вклад только в уже существующие меню.

Поэтому придерживаться старого API (как предлагает VonC), вероятно, лучший вариант до jdt Плагин перенесен на новый подход...

Этот поток сообщает о добавлении записи в главное меню "Источник":

<!-- main menu -->
<extension point="org.eclipse.ui.actionSets">
  <actionSet label="Java Coding"
             description="Action set containing coding related Java actions"
             visible="true"
             id="org.eclipse.jdt.ui.CodingActionSet2">
    <menu label="&amp;Source"
          path="edit"
          id="org.eclipse.jdt.ui.source.menu">
    </menu>
    <action class="org.gsoc.eclipse.tostringgenerator.actions.GenerateToStringActionDelegate "
            id="org.gsoc.eclipse.tostringgenerator.action"
            label="Generate to&amp;String()..."
            menubarPath="org.eclipse.jdt.ui.source.menu/generateGroup">
    </action>
  </actionSet>
</extension>

Вы можете использовать popup: пространство вместо menu: пространство. Вот рабочий пример:

    <extension point="org.eclipse.ui.commands">
    <command defaultHandler="com.igenox.plugin.dpbuilder.rcp.handler.CreateBuilderHandler"
        id="com.igenox.plugin.DPBuilder.CreateBuilderPattern" name="CreateBuilderPattern">
    </command>
</extension>
<extension point="org.eclipse.ui.menus">
    <menuContribution
        locationURI="popup:org.eclipse.jdt.ui.source.menu?after=DPSeparator">
        <command commandId="com.igenox.plugin.DPBuilder.CreateBuilderPattern"
            id="createBuilder" label="Create Builder Pattern">
        </command>
    </menuContribution>
    <menuContribution
        locationURI="popup:org.eclipse.jdt.ui.source.menu?after=additions">
        <separator name="DPSeparator" visible="true">
        </separator>
    </menuContribution>
</extension>
Другие вопросы по тегам