如何在 Eclipse 中扩展源菜单? (或:它的 locationURI 是啥?)

Posted

技术标签:

【中文标题】如何在 Eclipse 中扩展源菜单? (或:它的 locationURI 是啥?)【英文标题】:How to extend the source menu in Eclipse? (or: What is its locationURI?)如何在 Eclipse 中扩展源菜单? (或:它的 locationURI 是什么?) 【发布时间】:2011-10-30 02:44:06 【问题描述】:

我正在开发一个 Eclipse 插件并尝试在 Eclipse 3.7 中扩展源菜单(mainMenubar/Source - 在 java-editor 中编辑时可见)。

documentation 表示依赖 org.eclipse.ui.menus-extension 点,因为旧的扩展点已被弃用。对我来说,在哪里获得可靠的 locationURI 是一个完全的秘密,但我终于设法通过 Plugin Spy 找到了一些似是而非的 URI(遵循here 的建议)。 所以下面的应该是plugin.xml的扩展sn-p:

<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。

【问题讨论】:

我相信 JDT 将Source 菜单项添加到其org.eclipse.jdt.ui.CodingActionSet 操作集,当您处于Java 透视图时,它可能已启用。你有自己的看法吗? 【参考方案1】:

我遇到了同样的问题。我终于发现使用(推荐的)扩展点 org.eclipse.ui.menus 扩展源菜单是不可能的。

原因是在处理org.eclipse.ui.menus-extensions 之后创建了一个以旧样式actionSet(如源菜单)定义的菜单。事实上,这些扩展只能对现有菜单做出贡献。

因此,在 jdt 插件迁移到新方法之前,坚持使用旧 API(如 VonC 所建议)可能是最佳选择...

【讨论】:

【参考方案2】:

This thread reports 在主源菜单中添加了一个条目:

<!-- 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>

【讨论】:

【参考方案3】:

您可以使用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>

【讨论】:

以上是关于如何在 Eclipse 中扩展源菜单? (或:它的 locationURI 是啥?)的主要内容,如果未能解决你的问题,请参考以下文章

如何在Eclipse插件开发中禁用/启用视图工具栏菜单/操作

在IOS8中使用共享扩展时如何获取源应用程序的bundleId

关于eclipse中如何设置字体大小

Eclipse 插件开发,怎么调用popupMenus扩展点的右键菜单

eclipse 如何手动build

如何禁用助记符?