0

我正在构建一个 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用 tags替换 tag withiterateadapt没有好的结果。

我该怎么做?

4

1 回答 1

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

然后,而不是使用instanceofset (eg) to "isA_and_hasC"。testproperty

在此处查看有关属性测试仪的更多信息。

于 2013-03-26T16:15:07.353 回答