IDEA 插件开发笔记

前言

  • 未完待续...

Gradle创建项目

  • File -> New -> Project -> Gradle,勾选 Java 和 IntelliJ Platform Plugin,可以勾选 Kotlin 相关内容但不影响
  • 2021.2.3 版本的 IDEA 必须用 JDK 11 及以上进行开发
  • 配置过程会在 .gradle 文件夹中下载一个 IDEA 本体程序包,注意磁盘剩余空间

项目结构

  • src/main/java 功能代码目录
  • src/main/resource/plugin.xml 配置文件
  • 开发流程为写功能代码 + 注册到配置文件中

Action——菜单项

Action

  • 最简单的内容 Action,也就是一个菜单项,其实就是一个点击事件,所有 Action 继承自 AnAction
    public class MyAction extends AnAction {
      @Override
      public void actionPerformed(@NotNull AnActionEvent event) {
          // 点击菜单之后的逻辑
      }
    
      @Override
      public void update(@NotNull AnActionEvent e) {
          // 控制这个菜单项的状态,如设置某条件下菜单不可用
      }
    }
    
  • 鼠标移动到类名上会自动提示没有在 xml 中注册,弹出配置对话框进行配置
  • 设置 Action 加入到某个组,那么这个菜单项就会显示在某个菜单/子菜单里,右侧表示在组中显示的位置
  • 点击确定,可以看到在 xml 中生成的内容,当然也可以自己写这些 xml

Action Group

  • 我们可以创建自己的菜单或者子菜单
  • 当创建菜单项不变的菜单时,只需要在 xml 中注册即可,由 IDEA 自动处理对应的类
    <actions>
      <!-- id 为了唯一性可以以包名开头,text 为显示的内容,popup=true表示自动弹出,也就是子菜单,否则会直接显示 group 内的 action -->
      <group id="com.example.test.action.MyGroup" text="MyGroup" popup="false">
        <!-- 每个 group 都要加入某个 group,如主菜单区域 group id="MainMenu",relative-to-action 既可以填 group id,也可以填 action id,总之就是相对页面上某个元素 -->
        <add-to-group group-id="MainMenu" relative-to-action="HelpMenu" anchor="after" />
      </group>
    </actions>
    这样就会在菜单栏的 Help 后面添加一个 MyGroup 菜单
    

Module——项目创建向导

项目类型

  • 待补充...

向导内容

  • 创建一个 MyModuleBuilder 继承 ModuleBuilder
    public class MyModuleBuilder extends ModuleBuilder {
      @Override
      public ModuleType<?> getModuleType() {
        // IDEA 提供了默认的一些类型,这里选空类型,在新建项目时就会在列表里显示为空项目。否则需要创建自己的 ModuleType 子类并注册
        return ModuleType.EMPTY;
      }
    
      @Override
      public void setupRootModel(@NotNull ModifiableRootModel modifiableRootModel) throws ConfigurationException {
        // 点击最后一步 finish 按钮,创建了项目名文件夹后的逻辑
        // 最后应该调用默认的 doAddContentEntry() 创建这个项目
        doAddContentEntry(modifiableRootModel);
      }
      @Override
      public ModuleWizardStep[] createWizardSteps(@NotNull WizardContext wizardContext, @NotNull ModulesProvider modulesProvider) {
        // 每一个 ModuleWizardStep 就是创建项目的一个步骤,当然最后一步 finish 那页不算
        return new ModuleWizardStep[]{
          new ModuleWizardStep() {
            @Override
            public JComponent getComponent() {
              // 返回 Java Swing 界面,IDEA 还提供了另一套 Swing 组件(JB-前缀)
              return null;
            }
            @Override
            public void updateDataModel() {
    
            }
          }
        };
      }
    }
    
  • 在配置文件中添加我们的 Builder 就可以看到效果
    <extensions defaultExtensionNs="com.intellij">
      <moduleBuilder builderClass="com.example.test.module.MyModuleBuilder"/>
    </extensions>
    
上一篇:android 中DrawerLayout实现抽屉,Android-Camera内存问题剖析


下一篇:初学工厂模式