私は、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を使用することさえありません。フォーカスの変更により、ハンドラーが再評価されますか?