0

あるコマンドのアクティブ状態と他のコマンドのトグル状態の依存関係を追加しようとしていますが、機能しません。テスター クラスが呼び出されることはありません。ここで何が間違っていますか?

<extension
   point="org.eclipse.ui.handlers">
     <handler
        class="my.url.CaseSensitiveHandler"
        commandId="my.url.CaseSensitive">
        <enabledWhen>
          <with variable="activeWorkbenchWindow">
          <instanceof value="org.eclipse.ui.services.IServiceLocator"/>
          <test args="my.url.ResultsRegex"
            forcePluginActivation="true"
            property="org.eclipse.core.commands.toggle"
            value="false"/>
          </with>
        </enabledWhen>
     </handler>

テスター定義:

   <propertyTester
        class="my.url.CommandPropertyTester"
        id="my.url.commandPropertyTester"
        namespace="my.url"
        properties="toggle"
        type="org.eclipse.ui.services.IServiceLocator">
  </propertyTester>

私はテスタークラスを持っています:

public class CommandPropertyTester extends PropertyTester {

@Override
public boolean test(Object receiver, String property, Object[] args, Object expectedValue) {
    if (receiver instanceof IServiceLocator && args.length == 1 && args[0] instanceof String) {
        final IServiceLocator locator = (IServiceLocator) receiver;
        if (TOGGLE_PROPERTY_NAME.equals(property)) {
            final String commandId = args[0].toString();
            final ICommandService commandService = (ICommandService)locator.getService(ICommandService.class);
            final Command command = commandService.getCommand(commandId);
            final State state = command.getState(RegistryToggleState.STATE_ID);
            if (state != null) {
              return state.getValue().equals(expectedValue);
            }
        }
    }
    return false;
}

そして、私は次のように定義されたコマンドハンドラーをテストしました:

public Object execute(ExecutionEvent event) throws ExecutionException {
    Command command = event.getCommand();
    //boolean oldValue =
    HandlerUtil.toggleCommandState(command);

    final IWorkbenchWindow ww = HandlerUtil.getActiveWorkbenchWindowChecked(event);
    final IEvaluationService service = (IEvaluationService) ww.getService(IEvaluationService.class);
    if (service != null)
      service.requestEvaluation("org.eclipse.ui.commands.toggleState");

    return null;
}
4

1 に答える 1

0

テスター定義でネームスペースのタイプが間違っていました。

于 2013-01-25T14:30:09.753 に答える