找不到想用的插件?那就自己敲一个!

一、开发工具

下载 IntelliJ IDEA 2021.1.3(最新版2023.1.4的是使用 kotlin开发 + gradle.ktx 管理版本)

二、新建项目

1. new project,选择我们的 IDEA 版本,之后即可新建一个Plugin项目

lua的idea插件是什么_AndroidStudio

2. 关键类介绍
  1. plugin.xml 是关于这个插件工程的描述文件
  2. *.iml 主要用于文件管理和依赖包管理
3. 创建 Action

lua的idea插件是什么_插件_02

4. 补充相关参数

lua的idea插件是什么_lua的idea插件是什么_03

a. ActionID:一个IDE中不能存在两个id相同的 Action
b. ClassName:新建的Action类名
c. Name:Action 名 - 显示在菜单中的名字
d. Description:具体描述,鼠标停留在菜单中时的提示描述信息
e. Add to Group:要添加在哪个组,比如选择 NewGroup,就会添加到右键文件夹的New展开项下,Last 会添加到最后一个
f. Keyboard Shortcuts:默认快捷键
5. 新建后会有一个类,同时在 plugin.xml 配置文件中可以进行后续的调整修改

lua的idea插件是什么_plugin_04

6. 引用外部工具包
  1. maven 下载
  2. 本地依赖jar
  • 下载jar包后放在lib下
  • .iml 添加 jar 包依赖节点
7. UI 的开发 - SwingUI
  1. 如果插件需要UI,可以新建一个弹窗
  2. 然后根据输入选择等等来做你需要做的事,如:
8. 运行 Plugin
  1. 调整代码,增加一个输入框,并将输入框的内容显示出来
  2. 运行代码
  3. 此时会拉起一个新的 IntelliJ IDE

    a. 这是一个IDEA的临时镜像
    b. 你也可以以debug模式运行插件
  4. 随便选择一个项目进入,如果嫌卡也可以选择一个空文件夹
  5. 打开Plugin可以看到已经安装了我们新写的插件
  6. 点击后会弹窗
  7. 输入HelloWorld!点击ok ->

三、打包

1. 无外部依赖的打包

直接在 Build -> Prepare Plugin 即可生成 jar 包,将jar包发布或者直接本地安装到 IDE 即可

2. 依赖了三方jar包的打包

如果依赖了 三方 jar 包,直接 Prepare Plugin 生成的将不再是 jar包,而是一个 zip 压缩包。
这个包也一样可以直接拖入 IDE 中加载为插件,放心~

四、常用 API 分享

1. JDialog

JDialog 弹出时默认会挤在一起,可以使用 dialog.pack() 方法使用布局文件中的首选尺寸来显示

  1. dialog.setLocation可以设置显示位置
  2. dialog.setVisible(true) 来替代 show() 提高显示性能
2. File 相关
  1. IDEA 插件中使用 PSI 系统解析文件,获取当前编辑的文件,光标位置,Editor 等等,这里api太多了,就不做过多介绍了
  2. FileChooserDescriptor 弹出文件选择窗
3. 弹窗 - Message
// 弹出一条消息
Messages.showMessageDialog(msg, title, Messages.getInformationIcon());
// 弹出一条 yes/no 弹窗
Messages.showYesNoDialog(msg, title, Messages.getWarningIcon());
// 弹出一条错误提示
Messages.showErrorDialog(msg, title);
4. 通知

在操作成功之后,在 IDEA 右下角通知用户,使用 NotificationGroup 类即可。

public class NotificationUtil {
    private static final NotificationGroup notificationGroup = new NotificationGroup("ApiDoc.NotificationGroup", NotificationDisplayType.BALLOON, true);

    public static void warnNotify(String message) {
        Notifications.Bus.notify(notificationGroup.createNotification(message, NotificationType.WARNING), Application.project);
    }

    public static void infoNotify(String message) {
        Notifications.Bus.notify(notificationGroup.createNotification(message, NotificationType.INFORMATION), Application.project);
    }

    public static void errorNotify(String message) {
        Notifications.Bus.notify(notificationGroup.createNotification(message, NotificationType.ERROR), Application.project);
    }
}
5. 用户行为记录

PropertiesComponent.getInstance(project),可以获取当前project此插件的一些操作记录

  1. 通过 setValue 记下用户的操作
  2. 通过 getValue 取出上次的操作,这样就不用每次都选择或者要求用户输入了