1

私は、Eclipseがハンドラーに再評価を強制するこの質問と、PaulWebsterが提供した回答を見てきました。ハンドラーのactiveWhen要素を使用してこれが機能しないのはなぜですか?次のplug-in.xmlをenabledWhen要素を使用するように変更した場合にのみ機能します。コマンドが実行されると、特定のコマンドは有効になりません。

<handler
    commandId="org.eclipse.jpt.jpa.ui.xmlFileUpgradeToLatestVersion"
    class="org.eclipse.jpt.jpa.ui.internal.commands.UpgradeXmlFileVersionHandler">
        <activeWhen>
            <iterate ifEmpty="false">
                <or>
                    <adapt type="org.eclipse.jpt.jpa.core.context.XmlFile">
                        <test property="org.eclipse.jpt.jpa.core.isNotLatestSupportedVersion"/>
                    </adapt>
                    <adapt type="org.eclipse.jpt.common.core.resource.xml.JptXmlResource">
                       <test property="org.eclipse.jpt.jpa.core.isNotLatestSupportedVersion"/>
                    </adapt>
                </or>
            </iterate>
        </activeWhen>
</handler>

ハンドラーの実行の最後に、次のように呼び出します。

IEvaluationService service = (IEvaluationService) activeWorkbenchWindow.getService(IEvaluationService.class);
service.requestEvaluation("org.eclipse.jpt.jpa.core.isNotLatestSupportedVersion");

更新:さらに調査を行ったところ、3.8.1と比較して4.2.1でリグレッションが発生しました。enabledWhenを使用するように切り替えてrequestEvaluationの呼び出しを使用しても、クイックアクセスにコマンドが表示されます。クイックアクセスを介してコマンドを使用し、すぐにもう一度クイックアクセスを使用すると、コマンドがまだそこにあり、クリックするとNotEnabledExceptionが発生します。これは3.8.1で正常に機能します。

この特定のコマンドはダイアログを開きませんが、確認ダイアログを追加しました。これで、コマンドがクイックアクセスから削除されました。そして、これはIValuationService.requestEvaluationを使用することさえありません。フォーカスの変更により、ハンドラーが再評価されますか?

4

0 に答える 0