扩展
扩展
扩展
除了为按键和toolbar增加Actions之外,还提供了扩展方式来扩展idea的功能
用扩展增加的常见功能如下:
com.intellij.toolWindow 扩展点可以增加 tool windows (显示在用户界面边侧的窗口,如project, gradle的窗口);
com.intellij.applicationConfigurable 和 com.intellij.projectConfigurable 扩展点可以增加Settings/Preferences 对话框
自定义语言插件 使用了大量的扩展点来扩展语言的功能
提示
有1000多个扩展点来扩展ide的功能
可用的扩展点
扩展点和监听器列表(Extension Point and Listener List ) 列举了所有的 IntelliJ Platform的扩展点,
针对于特定ide的扩展点可看 文档
可以搜索 扩展点的用法
此外 在 plugin.xml里 可以联想出所有的扩展点,如下图:
想了解更多,可查看 文档
声明扩展
需要注意以下3点
在plugin.xml增加extensions标签,
如果扩展继承于IntelliJ Platform的方法,则defaultExtensionNs="com.intellij"
如果扩展继承于 第三方插件 ,则设置 defaultExtensionNs="第三方插件的id",详看下面代码在extensions标签下增加子标签,子标签的名称需要和你开发的扩展点名称保持一致 ,详看下面代码
根据扩展点的类型,需要以下操作,详看下面代码
如果扩展点是使用 interface 属性声明的,那么需要设置 implementation="class的全限定名称"
如果扩展点是使用 beanClass 属性声明的,那么需要在指定的类上加上注解 @Attribute
了解更多详情,请看 文档
<idea-plugin>
<!--
声明 IntelliJ Platform的扩展点,IntelliJ Platform的扩展点已经定义好接口,开发的时候,实现对应的接口就可以
-->
<extensions defaultExtensionNs="com.intellij">
<!-- com.intellij.appStarter 的扩展点-->
<appStarter
implementation="com.example.MyAppStarter"/>
<!-- com.intellij.projectTemplatesFactor 的扩展点-->
<projectTemplatesFactory
implementation="com.example.MyProjectTemplatesFactory"/>
</extensions>
<!--
声明自定义插件(插件id="another.plugin")的扩展点 ,"myExtensionPoint"扩展需要声明一个"beanClass",并指定他的key和implementationClass
-->
<extensions defaultExtensionNs="another.plugin">
<myExtensionPoint
key="keyValue"
implementationClass="com.example.MyExtensionPointImpl"/>
</extensions>
</idea-plugin>
扩展的默认属性
id :唯一的id
order :可以使用 first, last or before [插件id],after [插件id] 来指定顺序
os 指定系统,如果设置了os="windows",那么将只在windwos系统下才注册这个扩展
如果在某个扩展中需要退出程序,可以在扩展的构造器(constructor)中抛出 ExtensionNotApplicableException
扩展的其它属性
以下几个属性需要配置为类的全限定名称( fully qualified class name)
implementation
className
serviceInterface/serviceImplementation
以Class结尾的属性
A required parent type can be specified in the extension point declaration via nested <with>:
<extensionPoint name="myExtension" beanClass="MyExtensionBean">
<with
attribute="psiElementClass"
implements="com.intellij.psi.PsiElement"/>
</extensionPoint>
Property name language (or ending in *Language, 2020.2+) resolves to all present Language IDs.
Similarly, action resolves to all registered <action> IDs.
Specifying @org.jetbrains.annotations.Nls validates a UI String capitalization according to the text property Capitalization enum value (2019.2 and later).
Attributes with Enum type support code insight with lowerCamelCased notation (2020.1 and later).