IntelliJ平臺(tái) 提供了擴(kuò)展和擴(kuò)展點(diǎn)的概念诊笤,允許插件與其他插件或IDE相互配合励稳。
擴(kuò)展點(diǎn)
如果你想允許其它擴(kuò)展擴(kuò)展你的插件的功能窍株,你必須在插件中聲明一個(gè)或一系列的擴(kuò)展點(diǎn)晕换。每個(gè)擴(kuò)展點(diǎn)都要定義一個(gè)允許訪問(wèn)的類或接口筐喳。
擴(kuò)展
如果你想要你的插件擴(kuò)展其它插件或IntelliJ平臺(tái) 的功能法绵,你必須聲明一個(gè)或一系列的擴(kuò)展转质。
如何聲明擴(kuò)展或擴(kuò)展點(diǎn)
您可以分別在插件配置文件plugin.xml
中的<extensions>
和<extensionPoints>
部分聲明擴(kuò)展和擴(kuò)展點(diǎn)佩抹。
聲明擴(kuò)展點(diǎn)
在<extensionPoints>
部分, 插入一個(gè)子元素<extensionPoint>
叼风,分別在name
、beanClass
和interface
屬性定義擴(kuò)展點(diǎn)名稱和允許擴(kuò)展插件功能的bean類名或接口名棍苹。
要闡明此過(guò)程无宿,請(qǐng)查看以下plugin.xml
文件的示例代碼片段:
<extensionPoints>
<extensionPoint name="MyExtensionPoint1" beanClass="MyPlugin.MyBeanClass1">
<extensionPoint name="MyExtensionPoint2" interface="MyPlugin.MyInterface">
</extensionPoints>
-
interface
屬性設(shè)置一個(gè)要擴(kuò)展此擴(kuò)展點(diǎn)的插件必須要實(shí)現(xiàn)的接口; -
beanClass
屬性設(shè)置一個(gè)使用@Attribute注解一個(gè)或多個(gè)屬性的bean類枢里。
要擴(kuò)展此擴(kuò)展點(diǎn)的插件會(huì)從plugin.xml
文件中讀取這些屬性孽鸡。
要闡明此過(guò)程,查看以下使用以上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;
}
}
注意:要聲明一個(gè)設(shè)計(jì)用來(lái)訪問(wèn)
MyExtensionPoint1
擴(kuò)展點(diǎn)的擴(kuò)展 栏豺,你的plugin.xml
文件必須包含具有設(shè)置適當(dāng)值(查看以下示例)的key
和implementationClass
屬性的<MyExtensionPoint1>
標(biāo)簽彬碱。
聲明擴(kuò)展
- 對(duì)于
<extensions>
元素,設(shè)置xmlns
(不推薦使用)或defaultExtensionNs
屬性為以下值:-
com.intellij
奥洼,如果你的插件要擴(kuò)展IntelliJ平臺(tái)核心功能巷疼; -
{ID of a plugin}
,如果你的插件要擴(kuò)展其它插件的功能灵奖。
-
- 新增
<extensions>
子元素嚼沿。 子元素的名稱必須與你想要訪問(wèn)的擴(kuò)展點(diǎn)的名字匹配。 - 根據(jù)擴(kuò)展點(diǎn)的類型:
- 如果擴(kuò)展點(diǎn)使用
interface
屬性聲明瓷患,對(duì)于新增的子元素設(shè)置implementation
屬性為實(shí)現(xiàn)指定接口的類名伏尼。 - 如果擴(kuò)展點(diǎn)使用
beanClass
屬性聲明,對(duì)于新增的子元素設(shè)置所有在指定bean類用@Attribute 注解的屬性尉尾。
- 如果擴(kuò)展點(diǎn)使用
要闡明此過(guò)程爆阶,請(qǐng)查看以下plugin.xml
文件的示例代碼片段,它定義了兩個(gè)設(shè)計(jì)用來(lái)訪問(wèn)*IntelliJ平臺(tái) *appStarter
和applicationConfigurable
擴(kuò)展點(diǎn)的擴(kuò)展和一個(gè)設(shè)計(jì)用來(lái)訪問(wèn)測(cè)試插件MyExtensionPoint1
擴(kuò)展點(diǎn)的擴(kuò)展:
<!-- 聲明訪問(wèn)IntelliJ平臺(tái)擴(kuò)展點(diǎn)的擴(kuò)展
這些擴(kuò)展點(diǎn)使用"interface"屬性聲明
-->
<extensions defaultExtensionNs="com.intellij">
<appStarter implementation="MyTestPackage.MyTestExtension1" />
<applicationConfigurable implementation="MyTestPackage.MyTestExtension2" />
</extensions>
<!--聲明訪問(wèn)自定義插件擴(kuò)展點(diǎn)的擴(kuò)展
MyExtensionPoint1擴(kuò)展點(diǎn)使用*beanClass*屬性聲明
-->
<extensions defaultExtensionNs="MyPluginID">
<MyExtensionPoint1 key="keyValue" implementationClass="MyTestPackage.MyClassImpl"></MyExtensionPoint1>
</extensions>
如何得到擴(kuò)展點(diǎn)列表?
要獲得IntelliJ平臺(tái) 核心的可用擴(kuò)展點(diǎn)辨图,查看以下XML配置文件的<extensionPoints>
部分:
更多信息和示例
更多關(guān)于如何擴(kuò)展IDEA核心的示例插件和詳細(xì)說(shuō)明班套,請(qǐng)參閱自定義IDEA設(shè)置對(duì)話框和創(chuàng)建工具窗口。