如何仅在所选元素具有特定属性时启用命令?

时间:2013-03-26 15:25:07

标签: eclipse eclipse-plugin

我正在构建一个eclipse插件,我有一个树形表示,我在其中显示了A类元素的结构(见下文)。

Class A{
  List<B> children;
}

Abstract Class B{
  ...
}

Class C extend B{
  ...
}

Class D extend B{
  ...
}

我有一个命令只有当三个中的选定元素是A的实例时才能启动。 这是我正在使用的表达方式。

<extension point="org.eclipse.core.expressions.definitions">
  <definition id="SelectionOfA">
    <with variable="selection">
      <and>
        <count value="1"></count>
        <iterate ifEmpty="false" operator="or">
          <instanceof value="A"></instanceof>
        </iterate>
      </and>
    </with>
  </definition>
</extension>

现在我想改善这个条件。我想仅在选择A的实例并且列表子包含至少一个C的实例的元素时才启用该命令。 我尝试保留这个表达式并定义一个新表达式。然后,只有当两个表达式都为真时,我才会启用该命令。我从上面报告的表达式开始,我尝试将标记instanceof替换为标记withiterateadapt而没有取得好成绩。

我该怎么做?

1 个答案:

答案 0 :(得分:3)

我会实现一个属性测试器来检查是否满足条件。

这样的事情应该做的工作:

public class YourConditionTester extends PropertyTester {
  public boolean test(final Object receiver, final String property, final Object[] args, final Object expectedValue) {
    if (property.equals("isA_and_hasC")) {
      return (true if your condition is met, otherwise false)
    }
    return false;
  }
}

然后,代替instanceof使用test property设置(例如)到“isA_and_hasC”。

查看here以获取有关属性测试人员的更多信息。