IntelliJ IDEA插件开发

插件组件

  • 组件是插件集成的基本概念。有三种组件:
    • 应用程序级组件在IDE启动时被创建和初始化。可以通过使用该方法从Application实例获取它们getComponent(Class)。
    • 为ProjectIDE中的每个实例创建项目级组件。(请注意,即使未打开的项目也可以创建组件。)可以Project使用该getComponent(Class)方法从实例中获取。
    • 为ModuleIDE中加载的每个项目的每个内部创建模块级组件。可以Module使用该getComponent(Class)方法从实例中获取模块级组件。
  • 每个组件都应该在配置文件中指定接口和实现类。接口类将用于从其他组件检索组件,实现类将用于组件实例化。
  • 请注意,同一级别的两个组件(应用程序,项目或模块)不能具有相同的接口类。可以为接口和实现指定相同的类。
  • 每个组件都有一个唯一的名称,用于其外部化和其他内部需求。组件的名称由其getComponentName()方法返回。

应用程序级组件

  • 在IDE启动时被创建和初始化
  • 可以通过使用该方法从Application实例获取它们getComponent(Class);
  • 请注意,应用程序级组件必须在plugin.ml文件的部分中注册

快速创建应用程序组件

  • 可选地,应用程序级组件的实现类可以实现ApplicationComponent接口。
  • IntelliJ Platform界面将帮助您声明应用程序组件的实现类,并将自动对plugin.xml文件的部分进行适当的更改。
  • 创建和注册应用程序组件:
    • 在项目中,打开目标包的上下文菜单,然后单击新建(或按Alt+ Insert)。
    • 在新建菜单中,单击应用程序组件。
    • 在打开的“ 新建应用程序组件”对话框中,输入应用程序组件名称,然后单击“ 确定”。
  • 在的IntelliJ平台将生成实现一个新的Java类ApplicationComponent接口。首先在plugin.xml文件中注册新创建的组件,然后将一个节点添加到模块树视图; 并在编辑器中打开创建的应用程序组件类文件。
    1.0
    新建
    1.1
    生成类
    1.2
    自动在plugin注册

项目级组件

  • 项目级组件的实现类可以实现ProjectComponent接口
  • 如果需要项目实例,项目级组件的构造函数可以具有项目类型的参数。如果它依赖于其他组件,它还可以将其他应用程序级或项目级组件指定为参数。
  • 请注意,项目级组件必须在plugin.xml文件的部分注册(请参阅插件配置文件)。

创建和注册项目组件

  • 在的IntelliJ平台提出了一种简化的方法来创建项目的组成部分,与所有必要的基础设施。
  • IDEA接口将帮助您声明项目组件的实现类,并将自动对plugin.xml文件的部分进行适当的更改。
  • 创建和注册项目组件
    • 在项目中,打开目标包的上下文菜单,然后单击新建(或按Alt+ Insert)。
    • 在“ 新建”菜单中,单击“ 项目组件”。
    • 在打开的“ 新建项目组件”对话框中,输入项目组件名称,然后单击“ 确定”。
  • 在的IntelliJ平台将生成实现一个新的Java类ProjectComponent接口; 在plugin.xml文件中注册新创建的组件; 在模块树视图中添加一个节点; 并在编辑器中打开创建的应用程序组件类文件。

模块级组件

  • 可选地,模块级组件的实现类可以实现ModuleComponent接口。
  • 如果需要模块实例,则模块级组件的构造函数可以具有“模块”类型的参数。它还可以指定其他应用程序级别,项目级别或模块级组件作为参数,如果它依赖于这些组件。
  • 请注意,模块级组件必须在plugin.xml文件的部分注册(请参阅插件配置文件)。

快速创建模块组件

  • 在的IntelliJ平台提出了一种简化的方法来创建模块组成,具有所有必要的基础设施。

  • IDEA界面将帮助您声明模块组件的实现类,并将自动对plugin.xml文件的部分进行适当的更改。

  • 创建和注册项目组件
    • 在项目中,打开目标包的上下文菜单,然后单击新建(或按Alt+ Insert)。
    • 在新建菜单中,单击模块组件。
    • 在打开的“ 新建模块组件”对话框中,输入模块组件名称,然后单击“ 确定”。
  • 在的IntelliJ平台将生成实现一个新的Java类ModuleComponent接口; 在plugin.xml文件中注册新创建的组件; 在模块树视图中添加一个节点; 并在编辑器中打开创建的应用程序组件类文件。

组件的状态

  • 如果组件的类实现了JDOMExternalizable(已弃用)或PersistentStateComponent接口,则每个组件的状态将被自动保存并加载。
  • 当组件的类实现PersistentStateComponent接口时,组件状态将保存在您可以使用Java代码中的@State@Storage注释指定的XML文件中。
  • 当组件的类实现JDOMExternalizable接口时,组件将其状态保存在以下文件中:
    • 项目级组件将其状态保存到project(.ipr)文件中。但是,如果plugin.xml文件中的工作区选项设置为true,则组件会将其配置保存到workspace(.iws)文件。
    • 模块级组件将其状态保存到module(.iml)文件。
  • 有关更多信息和示例,请参阅持久化组件状态。

默认

  • 默认值(组件的预定义设置)应放在.xml文件中。将该文件放在与默认包对应的文件夹中的插件的类路径中。该readExternal()方法将在根标记上调用。
  • 如果组件具有默认值,则该readExternal()方法被调用两次:
    • 第一次默认
    • 第二次保存配置

插件组件生命周期

  • 组件按以下顺序加载:
    • 创建 - 构造函数被调用。
      初始化 - initComponent调用该方法(如果组件实现ApplicationComponent接口)。
    • 配置 - readExternal调用该方法(如果组件实现JDOMExternalizable接口),或者loadState调用该方法(如果组件实现PersistentStateComponent并且具有非默认持久状态)。
    • 对于模块组件,将调用ModuleComponent接口的moduleAdded方法来通知模块已被添加到项目中。
    • 对于项目组件,将调用ProjectComponent接口的projectOpened方法来通知项目已加载。
  • 组件按以下顺序卸载:
    • 保存配置 - writeExternal调用该方法(如果组件实现JDOMExternalizable接口),或者getState调用该方法(如果组件实现PersistentStateComponent)。
    • 处置 - disposeComponent调用该方法。
  • 请注意,您不应该使用组件getComponent()构造函数中的方法来请求任何其他组件,否则您将得到一个断言。如果在初始化组件时需要访问其他组件,可以将其指定为构造函数参数或在initComponent方法中访问它们。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值