Плагин Eclipse: Property Tester (чтобы сделать команду условно видимой) работает не так, как ожидается - PullRequest
1 голос
/ 07 мая 2019

Я занимаюсь разработкой Eclipse RCP. Я определил команду пункта всплывающего меню. Чтобы контролировать видимость команды, я установил условие теста с помощью тестера свойств. Это свойство тестера делает команду невидимой, кроме первого времени открытия меню. Означает, что если я впервые открываю всплывающее меню, эта конкретная команда отображается независимо от тестера свойств. Когда я открываю это меню во второй раз, оно определяет видимость на основе тестера свойств. Может ли кто-нибудь объяснить мне, почему это происходит?

Ниже приведен полный код, который я пробую.

Команда

<extension point="org.eclipse.ui.commands">
    <command 
      id="com.eclipse-tips.commandState.alignCommand" 
      name="Align Command"> 
      <state id="org.eclipse.ui.commands.toggleState">
      <class class="org.eclipse.ui.handlers.RegistryToggleState">
      <parameter 
            name="default" 
            value="false"> 
      </parameter> 
      <parameter 
            name="persisted" 
            value="false"> 
      </parameter>
      </class>
      </state>
    </command>
    </extension>

Обработчик

      <extension point="org.eclipse.ui.handlers">
         <handler
            class="com.gnr.handlers.AlignCommand"
            commandId="com.eclipse-tips.commandState.alignCommand">
       </handler>
       </extension>

Вклад меню

    <extension point="org.eclipse.ui.menus">
      <menuContribution locationURI="popup:org.eclipse.ui.popup.any?after=additions">
        <command
        commandId="com.eclipse-tips.commandState.alignCommand"
        label="Align Command"
        style="toggle">
        <visibleWhen
              checkEnabled="true">
           <with
                 variable="selection">
              <iterate>
                 <adapt
                       type="org.eclipse.core.resources.IFile">
                    <test
                          property="com.gnr.testgen.checkInputFile_Align"
                          value="true">
                    </test>
                 </adapt>
              </iterate>
           </with>
        </visibleWhen>
        </command>
        </menuContribution>
      </extension>

Свойство Tester

      <extension point="org.eclipse.core.expressions.propertyTesters">
        <propertyTester
            class="com.gnr.testgen.UserPropertyTester_Align"
            id="com.gnr.testgen.user.propertyTester_Align"
            namespace="com.gnr.testgen"
            properties="checkInputFile_Align"
            type="org.eclipse.core.resources.IFile">
       </propertyTester>
      </extension>

Ниже приведен код обработчика





    public class AlignCommand extends AbstractHandler {


        @Override
        public Object execute(ExecutionEvent event) throws ExecutionException {
            Command command = event.getCommand();

            State state = command.getState(RegistryToggleState.STATE_ID);

            boolean oldValue = ((Boolean) state.getValue()).booleanValue();
            state.setValue(new Boolean(!oldValue));

            return null;
        }   

    }

Наконец PropertyTester

    public class UserPropertyTester_Align extends PropertyTester {

        public UserPropertyTester_Align() { }

        @Override
        public boolean test(Object receiver, String property, Object[] args, 
        Object expectedValue) {

            return false;
        }

    }

Здесь, как вы видите, тестер свойств возвращает значение false. Это означает, что команда не должна быть видимой, но это не происходит. Первый раз, когда я открываю всплывающее меню, команда видна, а второй раз, когда я открываю всплывающее меню, команда не видна.

...