Eclipse RCP PropertyTester永远不会通过菜单visibleWhen调用

时间:2014-01-23 14:20:10

标签: eclipse eclipse-plugin eclipse-rcp

我想为自定义导航器视图弹出菜单实现自定义属性测试程序。不幸的是它实际上从未被调用。以下是plugin.xml部分和类。

定义的属性测试器:

<extension
     point="org.eclipse.core.expressions.propertyTesters">
  <propertyTester
        class="com.mytest.MyPropertyTester"
        id="com.mytest.myPropertyTester"
        namespace="com.mytest.myPropertyTester"
        properties="testProperty"
        type="com.mytest.MyPropertyTester">
  </propertyTester>

定义部分:

<extension
     point="org.eclipse.core.expressions.definitions">
  <definition
        id="org.eclipse.example.testExtension">
     <adapt
           type="org.eclipse.core.resources.IResource">
        <test
              property="com.mytest.myPropertyTester.testProperty">
        </test>
     </adapt>
  </definition>

可见部分:

<command
           commandId="com.mytest.testcommand"
           label="Test Command"
           style="push">
         <visibleWhen
              checkEnabled="false">
           <with
                 variable="activeMenuSelection">
              <iterate
                    ifEmpty="false"
                    operator="or">
                 <or>
                    <reference
                          definitionId="org.eclipse.example.testExtension">
                    </reference>
                 </or>
              </iterate>
           </with>
        </visibleWhen>
     </command>

相应的课程:

package com.mytest;

import org.eclipse.core.expressions.PropertyTester;

public class MyPropertyTester extends PropertyTester {

public MyPropertyTester() {
    System.out.println("PROPERTY TESTER CONSTRUCTOR");
}

@Override
public boolean test(Object receiver, String property, Object[] args,
        Object expectedValue) {
    System.out.println("PROPERTY TESTER CALLED");
    return true;
}

}

没有&#34;测试&#34;在org.eclipse.core.expressions.definitions中使用的部分一切正常。

似乎甚至没有调用MyPropertyTester类的构造函数。我还没有找到任何关于此的实例。

任何帮助都将不胜感激。

2 个答案:

答案 0 :(得分:5)

我认为这是您type定义中的type="com.mytest.MyPropertyTester"值(propertyTester)。

在测试测试人员之前,要测试的对象必须是类型的实例(或适应)(帮助对此非常模糊!)。

使用匹配大多数对象的type="org.eclipse.core.runtime.IAdaptable"type="org.eclipse.core.resources.IResource"匹配资源。

答案 1 :(得分:4)

我知道这个问题已经回答了,但是由于不同的原因我遇到了同样的问题;所以我想我会把它放在这里。

在我的情况下,org.eclipse.core.expressions插件在评估<test>表达式时未激活,因此它只是跳过评估。

所以我必须使用forcePluginActivation=true强制插件激活,例如:

<test 
      property="org.eclipse.wst.xml.core.isSelectedElementARunnableSeleniumTestSuite"
      value="true" 
      forcePluginActivation="true">
</test>

引用documentation

  
      
  • forcePluginActivation - 指示插件是否为标志   如有必要,应加载属性测试人员。如   这样,这个标志应该明智地使用,以避免   不必要的插件激活。大多数客户应该避免设置   这个标志为真。只有评估上下文才会尊重此标志   用于评估此表达式允许插件激活。除此以外   该标志被忽略,没有插件加载。
  •   
相关问题