Manipuladores de força do Eclipse usando activeWhen para reavaliar
Eu olhei para esta questãoManipuladores de força Eclipse para reavaliar e a resposta que Paul Webster forneceu. Por que isso não funciona usando oativoQuando elemento no manipulador? Só funcionará se eu alterar o plug-in.xml a seguir para usar oenabledWhen elemento. Meu comando específico não deve mais ser ativado depois que o comando for executado.
<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>
No final da minha execução do manipulador eu chamo:
IEvaluationService service = (IEvaluationService) activeWorkbenchWindow.getService(IEvaluationService.class);
service.requestEvaluation("org.eclipse.jpt.jpa.core.isNotLatestSupportedVersion");
Atualizar: Eu fiz mais algumas investigações e vejo uma regressão em 4.2.1 em comparação com 3.8.1. Mesmo quando eu mudo para usarenabledWhen e usar a chamada para requestEvaluation, ainda estou vendo o comando no acesso rápido. Eu uso o comando via acesso rápido, em seguida, imediatamente uso o acesso rápido novamente e vejo o comando ainda lá e recebo um NotEnabledException se eu clicar nele. Isso funciona bem com o 3.8.1.
Este comando em particular não abre um diálogo, mas eu adicionei um diálogo de confirmação e agora meu comando é removido do acesso rápido! E isso sem usar o IValuationService.requestEvaluation. A mudança de foco faz com que o manipulador seja reavaliado?