1

我已经查看了这个问题Eclipse force handlers to re-evaluate和 Paul Webster 提供的答案。为什么在处理程序中使用activeWhen元素不起作用?仅当我将以下 plugin.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");

更新:我做了更多调查,发现 4.2.1 与 3.8.1 相比出现了回归。即使我切换到使用enabledWhen并使用对 requestEvaluation 的调用,我仍然会在快速访问中看到该命令。我通过快速访问使用命令,然后立即再次使用快速访问,我看到命令仍然存在,如果单击它会得到 NotEnabledException。这适用于 3.8.1。

此特定命令不会打开对话框,但我添加了一个确认对话框,现在我的命令已从快速访问中删除!这甚至没有使用IValuationService.requestEvaluation。焦点的变化是否使处理程序得到重新评估?

4

0 回答 0