org.eclipse.ui.menus 的名称过滤器 - 也适用于编辑器视图

Name filter for org.eclipse.ui.menus - also for editor view

我有一个由此扩展点定义的菜单:org.eclipse.ui.menus。 它的位置 URI 是popup:org.eclipse.ui.popup.any,这意味着它也会从不同的资源管理器视图和编辑器视图中显示(右键单击代码的某处)。

我希望此菜单仅针对某些扩展程序显示。我使用了来自 here 的 greg 的回答,它非常适合浏览器视图。 如何为编辑器视图执行相同的过滤器 also

我想改变它的方式,如果有人从编辑器视图(和资源管理器视图)右键单击文件,只有当它是“*.myextension”文件时才会显示。

谢谢。

尝试合并过滤器 - 按照 greg 的回答,这是我的代码,但没有按预期工作。

        <visibleWhen
              checkEnabled="false">
            <iterate
                 ifEmpty="false"
                 operator="or">
                <or>
                <test
                    property="org.eclipse.core.resources.name"
                    value="*.myextension">
                </test>
                </or>
                <or>
                  <with variable="activeEditorInput">
                     <adapt type="org.eclipse.core.resources.IResource">
                        <test
                            property="org.eclipse.core.resources.name"
                            value="*.myextension">
                        </test>
                     </adapt>
                  </with>   
               </or>                
            </iterate>
        </visibleWhen>

对于编辑器,您可以使用以下内容测试 'active editor input':

<visibleWhen
  checkEnabled="false">
  <with variable="activeEditorInput">
     <adapt type="org.eclipse.core.resources.IResource">
        <test
            property="org.eclipse.core.resources.name"
            value="*.myextension">
        </test>
     </adapt>
  </with>
</visibleWhen>

这是获取活动编辑器的输入,获取正在编辑的 IResource 并对其进行测试。

合并可能会得到:

<visibleWhen
   checkEnabled="false">
   <or>
     <with variable="activeEditorInput">
       <adapt type="org.eclipse.core.resources.IResource">
          <test
              property="org.eclipse.core.resources.name"
              value="*.myextension">
          </test>
       </adapt>
     </with>
     <iterate
           ifEmpty="false"
           operator="or">
        <test
            property="org.eclipse.core.resources.name"
            value="*.myextension">
        </test>
     </iterate>
   </or>
 </visibleWhen>