IDEA插件开发---Extensions
Posted 流子
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了IDEA插件开发---Extensions相关的知识,希望对你有一定的参考价值。
扩展是插件扩展 IntelliJ 平台功能的最常用方式,这种方式不像向菜单或工具栏添加操作那么简单。
以下是使用扩展完成的一些最常见的任务:
com.intellij.toolWindow扩展点允许插件添加工具窗口(显示在 IDE 用户界面两侧的面板);
和扩展点允许插件将页面添加到com.intellij.applicationConfigurable设置/首选项对话框;com.intellij.projectConfigurable
自定义语言插件使用许多扩展点来扩展 IDE 中的各种语言支持功能。
平台和捆绑的插件中有 1000 多个扩展点,允许自定义 IDE 行为的不同部分。
探索可用的扩展
扩展点和侦听器列表列出了 IntelliJ 平台和 IntelliJ IDEA 中捆绑插件中的所有可用扩展点。此外,特定于 IDE 的专用扩展点和侦听器列表可在第 VIII 部分 - 产品特定下获得。通过IntelliJ Platform Explorer 浏览开源 IntelliJ 平台插件的现有实现中的用法。
或者(或者在使用 3rd 方扩展点时),可以在plugin.xml的块defaultExtensionNs内使用自动完成列出指定命名空间 ( ) 的所有可用扩展点。使用视图 | 查找列表中的快速文档以访问有关扩展点和实现的更多信息(如果适用)。有关更多信息和策略,请参阅探索 IntelliJ 平台 API。
声明扩展
自动完成、快速文档和其他代码洞察功能可用于扩展点标签和属性。
如果您的plugin.xml中尚不存在该元素,请将其添加到该元素。将属性设置为以下值之一:defaultExtensionNs
com.intellij,如果您的插件扩展了 IntelliJ 平台核心功能。
ID of a plugin,如果您的插件扩展了另一个插件的功能(必须配置Plugin Dependencies)。
向元素添加一个新的子元素。子元素的名称必须与您希望扩展访问的扩展点的名称匹配。
根据扩展点的类型,执行以下操作之一:
如果扩展点是使用interface属性声明的,对于新添加的子元素,将implementation属性设置为实现指定接口的类的名称。
如果扩展点是使用beanClass属性声明的,则对于新添加的子元素,设置所有使用@Attribute指定bean类中的注解注解的属性。
有关详细信息,请参阅声明扩展点部分。
为了阐明此过程,请考虑plugin.xml文件的以下示例部分,该部分定义了两个旨在访问IntelliJ 平台中的com.intellij.appStarter和扩展点的扩展,以及一个用于访问另一个插件中的扩展点的扩展:com.intellij.projectTemplatesFactoryanother.plugin.myExtensionPointanother.plugin
扩展默认属性 以下属性始终可用:id- 唯一身份
orderfirst- 允许分别使用last或对所有定义的扩展进行before|after [id]排序
os- 允许限制给定操作系统的扩展,例如,os="windows"仅在 Windows 上注册扩展
如果扩展实例在某些情况下需要“退出”,它可以抛出ExtensionNotApplicableException它的构造函数。
扩展属性代码洞察
有几个工具特性可用于帮助在plugin.xml中配置 bean 类扩展点。
带有注释的属性@RequiredElement会自动插入并验证(2019.3 及更高版本)。如果允许给定属性具有显式空值,则设置allowEmpty为true(2020.3 及更高版本)。
与以下列表匹配的属性名称将解析为完全限定的类名称:
implementation
className
serviceInterface/serviceImplementation
以Class(区分大小写)结尾
可以通过嵌套在扩展点声明中指定所需的父类型:
属性名称language(或以*Language, 2020.2+ 结尾)解析为所有存在的LanguageID。同样,action解析为所有已注册的ID。
指定根据文本属性枚举值(2019.2 及更高版本)@org.jetbrains.annotations.Nls验证 UI大小写。StringCapitalization
具有类型的属性支持使用lowerCamelCased表示法(2020.1 及更高版本)Enum的代码洞察力。
以上是关于IDEA插件开发---Extensions的主要内容,如果未能解决你的问题,请参考以下文章