Eclipse plugin PropertyTester的触发器评估

Eclipse plugin PropertyTester的触发器评估,eclipse-plugin,e4,Eclipse Plugin,E4,必须升级到E4,现在很多东西都不能用了。其中之一是IEvaluationService,如果这样使用: -但是这个用户正在E4中搜索等价物,而我需要一个在E3中工作的 有趣的是,如果我替换。该用户使用了Eclipse4.2—我用4.5、4.6和4.7测试了这个问题。我将分享我的解决方法,它不好,在所有情况下都不起作用。只有在我的用例中,我有一个IWorkbenchPart和一个iSelectProvider。。。但也许它会帮助下一个人: IWorkbenchPart activePart =

必须升级到E4,现在很多东西都不能用了。其中之一是
IEvaluationService
,如果这样使用:


-但是这个用户正在E4中搜索等价物,而我需要一个在E3中工作的


有趣的是,如果我替换
。该用户使用了Eclipse4.2—我用4.5、4.6和4.7测试了这个问题。

我将分享我的解决方法,它不好,在所有情况下都不起作用。只有在我的用例中,我有一个
IWorkbenchPart
和一个
iSelectProvider
。。。但也许它会帮助下一个人:

IWorkbenchPart activePart = // get active view or editor
ISelectionProvider selectionProvider = activePart.getSite().getSelectionProvider();
ISelection selection = selectionProvider.getSelection();
selectionProvider.setSelection(new StructuredSelection());
selectionProvider.setSelection(selection);
此代码只是重置选择,这通常会触发
PropertyTester
。我认为如果不选择任何内容,它将不起作用。

eventBroker.post(UIEvents.REQUEST\u ENABLEMENT\u UPDATE\u主题,UIEvents.ALL\u ELEMENT\u ID);

另请参见和

EvaluationService在E3兼容层中与API兼容。但是E4中的实现完全不同,导致
requestEvaluation
的行为根本不同

我能找到的解决这个问题的最佳方法是手动停用和激活当前活动部件的所有上下文。这会导致内部重新评估,并在需要时重新呈现各个部分的所有UI元素

有人可能会说,这比像EvaluationService应该做的那样请求对非常特定的属性进行评估效率要低。但由于评估仅限于活动部件,因此不应产生太多开销。它在全局范围内工作,因为不再需要特定的属性字符串

这篇文章还没有涵盖的唯一用例可能是RCP应用程序的主工具栏

/**
*触发对活动部件的所有UI元素(按钮等)的评估。
*还导致隐式测试所有打开部件的所有属性测试程序。
*中断的
ieevaluationservice.requestEvaluation的解决方法
。 */ 公共静态无效触发器元素评估(){ 试一试{ 最终EPartService partService=PlatformUI.getWorkbench().getService(EPartService.class); final MPart activePart=partService.getActivePart(); /*切换活动部件的上下文以触发对其UI元素的重新评估*/ if(activePart!=null){ activePart.getContext().deactivate(); activePart.getContext().activateBranch(); } }捕获(非法状态){ /*忽略“应用程序没有活动窗口”异常以允许程序继续*/ } }
这只适用于标记
,而不适用于
。但是
ieevaluationservice
也适用于