visibleWhen for command to appear in context menu

eclipse, eclipse-plugin, java

Solution

I was able to get it done with a `with` variable that I came across. Using the same code example above:

- Add an `<or>` block within the `<iterate>` block

- Place the existing `<adapt>` block in the new `<or>` block

- Add a new `with` variable called `activeEditorInput`

Here is the new code example.

<iterate ifEmpty="false" operator="or">
  <or>
    <adapt type="org.eclipse.core.resources.IResource">
      <or>
        ...test extensions
      </or>
    </adapt>
    <with variable="activeEditorInput">
      <adapt type="org.eclipse.core.resources.IResource">
        <or>
          ...test extensions
        </or>
      </adapt>
    </with>
  </or>
</iterate>

Problem

I am trying configure visibility of a command within the context menu using 'visibleWhen' expression within a menuContribution. What I am trying to do is make the command visible in the context menu only if you: - Right-click certain file types(resources) in the resource view (or package view) - Right-click the appropriate editor that has the file type open. It can detect that my editor is open or that the editor has a certain resource open. I've accomplished the first using 'visibleWhen'>'selection(with)'>'iterate'>'org.eclipse.core.resources.IResource(adapt)' then checking the file extension for the resource. The code is listed below. However, I'm not sure how to get the same command to only appear when you right-click the correct editor that has a file open with the correct extensions - ext1, ext2. Checking if my editor is active resolves the second issue but doesn't seem to help since if I click on files that are not my type, it will still show the command in the context menu. Any recommendations? The "Eclipse Plug-ins (3rd Edition)" shows some example for editor context menu but it uses actions and I want to stick with commands. Thanks!! ``` <menuContribution allPopups="false" locationURI="popup:org.eclipse.ui.popup.any?before=additions"> <separator name="com.test.ide.separator1" visible="true"> </separator> <menu icon="icons/sample.gif" label="Test Menu"> <command commandId="com.test.commands.testCommand1" icon="icons/sample.gif" label="testCommand1" style="push" tooltip="This is a test command"> <visibleWhen checkEnabled="false"> <with variable="selection"> <iterate ifEmpty="false" operator="or"> <adapt type="org.eclipse.core.resources.IResource"> <or> <test property="org.eclipse.core.resources.extension" value="ext1"> </test> <test property="org.eclipse.core.resources.extension" value="ext2"> </test> </or> </adapt> </iterate> </with> </visibleWhen> </command> </menu> </menuContribution> ```

Original source