zoukankan      html  css  js  c++  java
  • 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>
      
  • 相关阅读:
    Encryption (hard) CodeForces
    cf 1163D Mysterious Code (字符串, dp)
    AC日记——大整数的因子 openjudge 1.6 13
    AC日记——计算2的N次方 openjudge 1.6 12
    Ac日记——大整数减法 openjudge 1.6 11
    AC日记——大整数加法 openjudge 1.6 10
    AC日记——组合数问题 落谷 P2822 noip2016day2T1
    AC日记——向量点积计算 openjudge 1.6 09
    AC日记——石头剪刀布 openjudge 1.6 08
    AC日记——有趣的跳跃 openjudge 1.6 07
  • 原文地址:https://www.cnblogs.com/moonfan/p/15555664.html
Copyright © 2011-2022 走看看