Eclipse强制处理程序使用activeWhen重新评估

时间:2012-11-07 21:47:02

标签: eclipse eclipse-plugin

我已经看过这个问题Eclipse force handlers to to re-evaluate以及Paul Webster提供的答案。为什么这不能使用处理程序中的 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");

更新: 我做了一些调查,我看到4.2.1与3.8.1相比有所回归。即使我切换到使用 enabledWhen 并使用requestEvaluation调用,我仍然可以在快速访问中看到该命令。我通过快速访问使用命令,然后立即再次使用快速访问,我看到命令仍在那里,如果我点击它就会得到一个NotEnabledException。这适用于3.8.1。

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

0 个答案:

没有答案