使用IActionFilters对IAdaptable感到困惑

时间:2010-02-14 11:25:52

标签: eclipse eclipse-rcp rcp

我对IAdaptable和相关类感到困惑。哪个类是适配器,适配器,适应类型?

[背景]

我有一个表/树查看器条目的上下文菜单。根据查看器中相应对象的状态(即表查看器中行的属性值),上下文菜单中的某些操作不得显示。

我可以使用plugin.xml中的配置实现此目的:

<extension
         point="org.eclipse.ui.popupMenus">
      <objectContribution
            adaptable="false"
            id="<some_id>"
            objectClass="<object_class_of_viewer_entry>">
            <visibility>
               <objectState name="buildable" value="true"/>
             </visibility>
         <action
               class="<my_action_class>"

但是,这仅在对象类实现org.eclipse.ui.IActionFilter时才有效。

[问题]

我的对象类无法实现IActionFilter,我不想更改其界面。因此,我需要使用IAdaptable机制解决这个问题。

阅读Eclipse文档让我对术语(适配器,适配器,适应类型)感到困惑,我仍然对如何处理我的问题感到困惑。

对象类(在上面的配置中引用)必须保持不变。

我的方法如下。

<extension
         point="org.eclipse.core.runtime.adapters">
      <factory
            adaptableType="<object_class_of_viewer_entry>"
            class="MyFactory">
         <adapter
               type="org.eclipse.ui.IActionFilter">
         </adapter>
      </factory>
   </extension>

MyFactory是这样的:

public class MyFactory implements IAdapterFactory {
  private static final Class[] types = {
    <object_class_of_viewer_entry>.class,
  };

  @Override
  public Object getAdapter(Object adaptableObject, Class adapterType) {
    return new <class_that_implements_IActionFilter>((<object_class_of_viewer_entry>) adaptableObject);
  }

  @Override
  public Class[] getAdapterList() {
    return types;
  }
}

这有什么不对?我在哪里错过了什么?

1 个答案:

答案 0 :(得分:0)

结果一切,好吧,几乎所有事情都是正确的。我简单地在plugin.xml中混合了object_class_of_viewer_entry的接口和实现。

两篇有帮助的文章:http://www.eclipsezone.com/articles/what-is-iadaptable/http://wiki.eclipse.org/FAQ_How_do_I_use_IAdaptable_and_IAdapterFactory%3F