• IDEA插件开发(6)---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的代码洞察力。

  • 相关阅读:
    初认识vue,v-for,v-if,v-bind,v-model,v-html等指令
    EasyPoi大数据导入导出百万级实例
    【pod进阶】
    python+django协同过滤算法的音乐推荐系统研究vue
    链表 oj2 (7.31)
    阿里提前批(阿里云)一面30min
    C 嵌入式系统设计模式 08:硬件代理模式
    【接口测试】HTTP接口详细验证清单
    MySQL JDBC编程
    插入排序之希尔排序——【数据结构】
  • 原文地址:https://blog.csdn.net/jiangguilong2000/article/details/126061820