扩展

走着路睡觉大约 3 分钟

扩展

扩展

除了为按键和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的扩展点可看 文档

可以搜索open in new window 扩展点的用法

此外 在 plugin.xml里 可以联想出所有的扩展点,如下图:

想了解更多,可查看 文档

声明扩展

需要注意以下3点

  1. 在plugin.xml增加extensions标签,
    如果扩展继承于IntelliJ Platform的方法,则defaultExtensionNs="com.intellij"
    如果扩展继承于 第三方插件 ,则设置 defaultExtensionNs="第三方插件的id",详看下面代码

  2. 在extensions标签下增加子标签,子标签的名称需要和你开发的扩展点名称保持一致 ,详看下面代码

  3. 根据扩展点的类型,需要以下操作,详看下面代码

    • 如果扩展点是使用 interface 属性声明的,那么需要设置 implementation="class的全限定名称"

    • 如果扩展点是使用 beanClass 属性声明的,那么需要在指定的类上加上注解 @Attributeopen in new window

了解更多详情,请看 文档


<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)中抛出 ExtensionNotApplicableExceptionopen in new window

扩展的其它属性

以下几个属性需要配置为类的全限定名称( 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).

上次编辑于:
贡献者: zhaojingbo
Loading...