在知乎发表了《IntelliJ IDEA 插件开发指南》反响超乎预料,考虑了阅读体感,没有细聊每个点。 知乎私信机制导致沟通非常低效,对于程序员而言,"Talk is cheap, show me the code" 才是王道
之前开发的插件 "Trantor" 暂时不考虑开源,所以只能抽出一些个人认为有必要点,以 "文章 + demo" 的形式好好聊一聊。
如果对你有帮助,记得点亮 ⭐️
官方也提供了简单的代码示例: 官方示例
未完待续 ...
Code Sample | Description |
---|---|
问题沉淀 | 开发过程中遇到的一些问题的沉淀 |
ProgressBar | 可自定义的进度条 |
PSI | PSI 获取、创建、修改、删除、跳转等 |
LineMarker | 行标记 |
Reference | 代码引用 |
Search Everywhere | 查找 |
ModuleType | 自定义模块类型 |
Theme | Carol 主题 |
Compatible | // TODO sdk 兼容性问题 |
Error | 错误反馈,一键提交 issue 到 Github |
Gradle -> Tasks -> IntelliJ -> runIde -> Run/Debug
好几个网友问我要插件开发的学习资料,还是那句话 "官方文档、开源插件、社区、IDEA源码是插件开发最好的老师。"。
"Trantor" 插件开发周期:2020.9 到 2022.1,目前插件基本稳定,工作的重心自然也不再插件啦。 说实话,idea 插件开发与我之前的项目毫无联系,当时甚至 Java 都不太熟,当时认为它是一件有意思的事,就去做了。
开发的过程中确实有一些曲折,首先,2020 年的官方文档真的真的很晦涩(🌶️🐔),要什么没什么。现在文档不论从内容还是排版上有质的飞跃, 所以现在才开始开发插件的你们,就偷着乐吧(doge) 。不过文档始终是无法涉及到每个点的,但是源码可以!
在 IDE 看到的一切在源码里都有迹可循, 你能看到的你就能实现
举一反三
拿第一个需求举个例子,当时是需要做一个 Tool Window,里面是一棵资源树:
当时开发的大致思路:
- 文档搜 window,定位到
tool window
相关内容,先大致过一遍文档,发现文档中提到 demo 项目有相关代码示例。 - 文档搜 tree, 定位到
tree structure
相关内容,先大致过一遍文档,发现文档中提到 demo 项目有相关代码示例。 - 把官方代码示例拉下来,使用 Gradle 插件提供的 runIde debug 下
tool_window
和tree_structure_provider
的 demo,看下大致流程。 - 其实这个需求,点类似于 Project 那个窗口,于是就代码全局搜索关键字。找到关键类后一点点 debug,参考源码里 tree & node 是如何声明的。
上面 gif 可以看到下面还有一个 TrantorLint 的 tool window,主要用于代码检查(因为 Trantor 插件是服务于公司内部框架的,框架会有自己的资源定义规范与代码限制)。 当时参考了开源 的插件: sonarlint ,git clone 后 runIde 疯狂 debug 后的结果。
猜猜猜
猜,但不是盲目的猜。合理利用用关键词全局搜索,如果想要找某个方法,只能根据意图去猜。当时有个需求需要去找指定 library 里面的文件:
- 首先要找到具体的
library
实体。先全局找Library
类,然后在看下引用,利用关键词 "find","get" 之类的搜相关 api。 - library 实体里去找文件。这个步骤就比较简单了,
library.
看下代码提示即可。
注释
学会看代码注释,这句话套在任何代码开发场景都适用。 目前官方文档仍不够细致,但大部分源码注释写的都很到位,所以还是单独拎出来引起你的重视 (doge)。