在插件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>
的用法让我很烦恼:
adapt
如何在其(仅)子元素上用作一元运算符?根据我的理解,AND运算符需要两个操作数。受到以下answer的启发,我调查了and
的Javadoc,得出的结论是IAdapterManager
的用法转换为
adapt
Eclipse源代码中Platform.getAdapterManager().registerAdapters(pr, IResource.class);
是适配器工厂的实例。这是对的吗?
技术上pr
是什么?只是一个XML元素? (我问,因为我怀疑这里有更多的Eclipse PDE术语。)
答案 0 :(得分:1)
<and>
可以包含任意数量的子元素。结果是所有孩子的结果'和'。所以一个元素没问题,但它并没有真正做任何事情。
<adapt>
只是一个普通的XML元素,不会被特别处理。它在这里使用是因为大多数UI对象实际上不是文件或文件夹。 <adapt>
使用适配器接口“适应”指定的“类型”(如果可能)。然后,“适应”的子元素被赋予适应类型。 'adapt'返回的值是其子节点的'和'。
因此,在这种情况下,<test>
元素被赋予要测试的IResource
对象而不是原始UI对象。
<adapt>
将使用getAdapter
返回的IAdapterManager
的{{1}}方法进行调整。它还可以检查当前类是否实现Platform.getAdapterManager()
。
IAdaptable
由想要提供适配器的类来使用,以便在调用IAdapterManager.registerAdapters
时注册适配器管理器可以查询的IAdapterFactory
。