You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Eclipse插件弹窗菜单仅显示于选中Java文件(CompilationUnit)的问题

解决Eclipse插件右键菜单仅显示在Java文件(而非类元素)上的问题

我懂你的需求:你希望右键菜单只在选中.java文件本身时才弹出,而不是展开文件选中内部的类(IType)时也显示。目前的配置因为适配了IResource,导致IType也能通过扩展名检查,所以菜单会意外出现。

问题根源

你的现有配置里用了<adapt type="org.eclipse.core.resources.IResource">,而IType元素可以被适配为它所属的Java文件的IResource对象,因此扩展名测试org.eclipse.core.resources.extension会通过,导致菜单在选中类时也显示。

解决方案

我们需要直接限制选中的元素是IFile实例(也就是文件本身),而不是通过适配得到的IResource。修改后的配置如下:

<menuContribution allPopups="true" locationURI="popup:org.eclipse.ui.navigator.ProjectExplorer#PopupMenu?after=additions">
  <menu id="org.plugin.generate_test.handlers.menus.popupTestMenu2" label="Generate" mnemonic="P2">
    <command commandId="org.plugin.generate_test.handlers.commands.generateCommand" 
             id="org.plugin.generate_test.handlers.menus.generateCommand" 
             mnemonic="PC2" style="push">
      <visibleWhen checkEnabled="false">
        <with variable="activeMenuSelection">
          <iterate ifEmpty="false">
            <!-- 确保选中的是文件实例,而非类元素 -->
            <instanceof type="org.eclipse.core.resources.IFile"/>
            <!-- 验证是.java文件 -->
            <test property="org.eclipse.core.resources.extension" value="java"/>
          </iterate>
        </with>
      </visibleWhen>
    </command>
  </menu>
</menuContribution>

关键修改说明

  • <instanceof type="org.eclipse.core.resources.IFile"/>:这个条件会直接检查选中的元素是否是IFile的实例。当你展开Java文件选中内部的类时,选中的是IType对象,它不属于IFile类型,因此这个条件不满足,菜单就不会显示。
  • 保留的<test property="org.eclipse.core.resources.extension" value="java"/>:确保只有扩展名是java的文件才会触发菜单。

这样修改后,右键菜单就只会在你直接选中.java文件时才会出现,完全符合你的需求啦!

内容的提问来源于stack exchange,提问作者squlerr

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 06:26:24