注意:这是一篇草稿,但是因为 IntelliJ 插件开发参考资料实在太少,就放出来吧,不知道以后还有没有机会完善,怀念写 kotlin 的一周(哈哈)。
难点与应对方法:
- 语言基本陌生——问题不大
- IDE 完全陌生——看文档
- 插件运行原理一点都不知道——根据文档了解核心概念
- sdk一点都不知道,这对工时评估影响很大——这个就真的最花时间的了
先决条件:
- JVM 语言
- Gradle
- Swing
- 熟悉 IDE
Gradle
构建脚本 build.gradle
(Groovy/kotlin)
Gradle Wrapper 通过使用 gradle-wrapper.properties 配置文件来确保每个开发者和 CI 工具都使用相同的 Gradle 版本。
Swing
学 Swing 有感:终于知道后端学 CSS 有多难了。而且 Swing 不能实时调试,教程也不多。
IDE
窗口结构:https://www.jetbrains.com/help/idea/guided-tour-around-the-user-interface.html
IDE 开发体验确实好,自动改名,新建类,一键加参数
插件模板
https://github.com/JetBrains/intellij-platform-plugin-template
项目结构
plugin.xml
开发资料
文档写得一般,没有系统教程,只能看开源插件学习
开启内部模式
这里还有个也没多大用的 samples 仓库
重要概念
Action
在IntelliJ插件开发中,“Action” 是一个核心概念。一般来说,一个 “Action” 就是用户可以执行的一个操作或命令,它可以被关联到菜单项、工具栏按钮或者快捷键。 例如:打开一个新的文件、剪切和粘贴文本、用某种语言运行代码等都是 “Actions”。
你可以通过创建和注册自定义 “Action” 来扩展 IntelliJ 的功能。每个 “Action” 都需要提供一个 “actionPerformed” 方法,当用户触发该操作时,这个方法会被调用。
在 IntelliJ 的插件开发中,使用 XML 文件(通常是 plugin.xml)来注册你的 “Action”,并指定其所在的位置,如 “File” 菜单或者右键弹出菜单等。
你可以选 action 插入的位置、触发快捷键,这些都是以用户触发为基础的。所以如果你的插件或程序不需要用户触发,只需要在后台或者特定条件下自动执行某些操作,你只需要编写普通的处理类就行了。
Service
https://plugins.jetbrains.com/docs/intellij/plugin-services.html
服务是一个全局或项目级别的单例,用于保存数据和状态,或者提供复杂的操作。
Listener & Message
监听和响应 Topic
Extension Point
EP:https://plugins.jetbrains.com/docs/intellij/intellij-platform-extension-point-list.html
没太看懂,ai是这么跟我解释的:在IntelliJ中,extension point不是一个class,而是一个特殊的接口,它为你的插件提供了扩展应用程序的能力。使用extension point,你可以将自己的代码插入到IDE的生命周期中的特定点,让你的代码在某些特定事件发生时被执行。这是IntelliJ插件开发的重要组成部分,用于实现插件的具体功能。
例子:
Execution
https://plugins.jetbrains.com/docs/intellij/execution.html
可以直接执行普通命令、从右上角执行可以配置运行配置。实际要编程实现时要理解的概念比较多。
PSI
PSI (Program Structure Interface):PSI是IntelliJ用于在内存中表示源代码的接口。例如,一个Java文件将被解析为一个PSI文件,包含了多个PSI类,PSI方法等。通过PSI,你可以很容易地分析和修改代码。
可以通过 View PSI Structure 熟悉 PSI
AI 开发
- 解释概念
- 根据 API 给出例子