2010-02-14 66 views
0

我對IAdaptable和相關類感到困惑。哪個類是適配器,適配器,適配類型?對IAdaptable與IActionFilters的困惑

[語境]

我有一個表/樹查看的條目的上下文菜單。取決於查看器中各個對象的狀態(即,表查看器中的行的屬性值),上下文菜單中的某些動作不可見。

我可以在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; 
    } 
} 

有什麼不好呢?我在哪裏錯過了什麼?

回答