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

bre*_*ine 5 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>
Run Code Online (Sandbox Code Playgroud)

定义部分:

<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>
Run Code Online (Sandbox Code Playgroud)

可见部分:

<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>
Run Code Online (Sandbox Code Playgroud)

和相应的课程:

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;
}

}
Run Code Online (Sandbox Code Playgroud)

如果没有org.eclipse.core.expressions.definitions部分中使用的"test",一切正常.

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

任何帮助,将不胜感激.

mys*_*cks 6

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

就我而言,在评估表达式org.eclipse.core.expressions时未激活该插件<test>,因此只是跳过了评估。

因此,我不得不使用强制插件激活forcePluginActivation=true,例如:

<test 
      property="org.eclipse.wst.xml.core.isSelectedElementARunnableSeleniumTestSuite"
      value="true" 
      forcePluginActivation="true">
</test>
Run Code Online (Sandbox Code Playgroud)

引用文档

  • forcePluginActivation-一个标志,指示是否应在必要时加载有助于属性测试器的插件。因此,应谨慎使用此标志,以避免不必要的插件激活。大多数客户端应避免将此标志设置为true。仅当用于评估此表达式的评估上下文允许插件激活时,才使用此标志。否则,该标志将被忽略,并且不会发生插件加载。


gre*_*449 5

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

在调用测试程序之前,要测试的对象必须是类型的实例(或适应)(帮助对此非常模糊!).

使用type="org.eclipse.core.runtime.IAdaptable"它将匹配大多数对象或type="org.eclipse.core.resources.IResource"仅匹配资源.