Eclipse PDE ::在过滤表达式

时间:2017-03-08 09:09:06

标签: xml eclipse-plugin

在插件plugin.xml的{​​{1}}中,我找到了以下org.eclipse.ui.navigator.resources元素定义:

commonFilter

<commonFilter id="org.eclipse.ui.navigator.resources.filters.startsWithDot" name="%filters.startsWithDot.name" description="%filters.startsWithDot.description" activeByDefault="true" > <filterExpression> <and> <adapt type="org.eclipse.core.resources.IResource"> <test property="org.eclipse.core.resources.name" value=".*"/> </adapt> </and> </filterExpression> </commonFilter> 的用法让我很烦恼:

  1. 元素adapt如何在其(仅)子元素上用作一元运算符?根据我的理解,AND运算符需要两个操作数。
  2. 受到以下answer的启发,我调查了and的Javadoc,得出的结论是IAdapterManager的用法转换为

    adapt

    Eclipse源代码中Platform.getAdapterManager().registerAdapters(pr, IResource.class); 是适配器工厂的实例。这是对的吗?

  3. 技术上pr是什么?只是一个XML元素? (我问,因为我怀疑这里有更多的Eclipse PDE术语。)

1 个答案:

答案 0 :(得分:1)

<and>可以包含任意数量的子元素。结果是所有孩子的结果'和'。所以一个元素没问题,但它并没有真正做任何事情。

<adapt>只是一个普通的XML元素,不会被特别处理。它在这里使用是因为大多数UI对象实际上不是文件或文件夹。 <adapt>使用适配器接口“适应”指定的“类型”(如果可能)。然后,“适应”的子元素被赋予适应类型。 'adapt'返回的值是其子节点的'和'。

因此,在这种情况下,<test>元素被赋予要测试的IResource对象而不是原始UI对象。

<adapt>将使用getAdapter返回的IAdapterManager的{​​{1}}方法进行调整。它还可以检查当前类是否实现Platform.getAdapterManager()

IAdaptable由想要提供适配器的类来使用,以便在调用IAdapterManager.registerAdapters时注册适配器管理器可以查询的IAdapterFactory