插件擴展與擴展點

原文鏈接:
http://www.jetbrains.org/intellij/sdk/docs/basics/plugin_structure/plugin_extensions_and_extension_points.html

IntelliJ平臺 提供了擴展擴展點的概念,允許插件與其他插件或IDE相互配合。

擴展點

如果你想允許其它擴展擴展你的插件的功能,你必須在插件中聲明一個或一系列的擴展點。每個擴展點都要定義一個允許訪問的類或接口。

擴展

如果你想要你的插件擴展其它插件或IntelliJ平臺 的功能,你必須聲明一個或一系列的擴展

如何聲明擴展或擴展點

您可以分別在插件配置文件plugin.xml中的<extensions><extensionPoints>部分聲明擴展和擴展點。

聲明擴展點

<extensionPoints>部分, 插入一個子元素<extensionPoint>,分別在namebeanClassinterface屬性定義擴展點名稱和允許擴展插件功能的bean類名或接口名。

要闡明此過程,請查看以下plugin.xml文件的示例代碼片段:

<extensionPoints>
  <extensionPoint name="MyExtensionPoint1" beanClass="MyPlugin.MyBeanClass1">
  <extensionPoint name="MyExtensionPoint2" interface="MyPlugin.MyInterface">
</extensionPoints>
  • interface屬性設置一個要擴展此擴展點的插件必須要實現的接口;
  • beanClass屬性設置一個使用@Attribute注解一個或多個屬性的bean類。

要擴展此擴展點的插件會從plugin.xml文件中讀取這些屬性。

要闡明此過程,查看以下使用以上plugin.xml文件的示例 MyBeanClass1 bean類:

public class MyBeanClass1 extends AbstractExtensionPointBean {
  @Attribute("key")
  public String key;

  @Attribute("implementationClass")
  public String implementationClass;

  public String getKey() {
    return key;
  }

  public String getClass() {
    return implementationClass;
  }
}

注意:要聲明一個設計用來訪問MyExtensionPoint1擴展點的擴展 ,你的plugin.xml文件必須包含具有設置適當值(查看以下示例)的keyimplementationClass屬性的<MyExtensionPoint1>標簽。

聲明擴展

  1. 對于<extensions>元素,設置xmlns (不推薦使用)或defaultExtensionNs屬性為以下值:
    • com.intellij,如果你的插件要擴展IntelliJ平臺核心功能;
    • {ID of a plugin},如果你的插件要擴展其它插件的功能。
  2. 新增<extensions>子元素。 子元素的名稱必須與你想要訪問的擴展點的名字匹配。
  3. 根據擴展點的類型:
    • 如果擴展點使用interface屬性聲明,對于新增的子元素設置implementation屬性為實現指定接口的類名。
    • 如果擴展點使用beanClass屬性聲明,對于新增的子元素設置所有在指定bean類用@Attribute 注解的屬性。

要闡明此過程,請查看以下plugin.xml文件的示例代碼片段,它定義了兩個設計用來訪問*IntelliJ平臺 *appStarterapplicationConfigurable擴展點的擴展和一個設計用來訪問測試插件MyExtensionPoint1擴展點的擴展:

<!-- 聲明訪問IntelliJ平臺擴展點的擴展
     這些擴展點使用"interface"屬性聲明
-->
  <extensions defaultExtensionNs="com.intellij">
    <appStarter implementation="MyTestPackage.MyTestExtension1" />
    <applicationConfigurable implementation="MyTestPackage.MyTestExtension2" />
  </extensions>

<!--聲明訪問自定義插件擴展點的擴展
     MyExtensionPoint1擴展點使用*beanClass*屬性聲明
-->
  <extensions defaultExtensionNs="MyPluginID">
     <MyExtensionPoint1 key="keyValue" implementationClass="MyTestPackage.MyClassImpl"></MyExtensionPoint1>
  </extensions>

如何得到擴展點列表?

要獲得IntelliJ平臺 核心的可用擴展點,查看以下XML配置文件的<extensionPoints>部分:

更多信息和示例

更多關于如何擴展IDEA核心的示例插件和詳細說明,請參閱自定義IDEA設置對話框和創建工具窗口。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容