你可能不知道的IDEA Plugin开发技巧

7,198 阅读4分钟

其实从很久之前就想开发IDEA插件了,一来确实是有兴趣,二来如果可以定制插件的话确实可以解放生产力(其实还可以装逼,不是)。但是这方面的资料确实比较匮乏,很多问题解决起来摸不到头脑,像极了10多年前研究mysql的那批人,正好最近有一些感悟,分享一波,希望对大家有帮助

用本地安装的IDEA调试

问题起因是我这边使用的是m1芯片的mac开发的,在调试自己开发的插件的时候,总是启动配置版本号的intel版本的IDEA,虽然能启动,但是贼慢。。。用过最初版本的M1芯片电脑的同学应该都体验过当时的IDEA的卡顿程度。。。前几天在翻文档的时候,偶然发现了这个配置项。配置之后就可以通过本地的IDEA启动了~这样不仅提高了每次运行启动的速度,在初次build的时候也可以不用下载几百兆的软件包了!

image.png

只要在build.gradle文件中的intellij中添加这个属性就可以了,要注意version属性和localPath属性不能同时设置

image.png

文档地址:plugins.jetbrains.com/docs/intell…

查看PSI文件结构

我这边最开始开发的插件,是一个自动生成注解mybatis-plus注解的工具,当时开发的时候一直搞不清PSI文件结构,所以每次都要debug查看,属实麻烦

其实在Tools目录下有一个查看PSI结构的工具

image.png

比如现在我有这样的一个java文件

image.png

通过工具可以查看这个文件的PSI结构如下图

image.png 当搞不清文件结构的时候,就不用每次debug了,还是非常好用的

启动内部模式

这个应该是我最近发现的最有价值的功能!当我发现的那一刻,我仿佛变成了光。。。

文档地址:plugins.jetbrains.com/docs/intell…

首先是模式的开启,在Help菜单中的Edit Custom Properties添加一行配置,在文件中输入 idea.is.internal=true,然后重启IDEA之后就会生效

image.png

image.png 在重新启动之后就会发现Tool菜单中多了一行Internal Actions

image.png

本次主要说一下UI Debugger这个功能,因为其他的我也不清楚有什么用。。。。

image.png

这个功能可以看到在idea中的鼠标操作对应action都是什么,这么说可能不太清楚,举个例子

我们先做一个新建java类的操作

image.png

然后在UI Debugger中就可以看到我们刚才新建类的操作

image.png

复制图中的CreateClassAction,然后查找这个类,你会发现,我们找到了刚才操作的源码

image.png

打开这个class长这样,是不是感觉找到了新世界的大门

image.png

当然,到这我们其实也只是觉得牛逼,其实没有什么实际作用

下面来说几个我觉得用处比较大的

学习Api的使用

我们在开发插件的时候,其实最大的问题就是资料不足,很多api都不知道怎么用,当我们手里有了源码之后,我们其实可以从源码中学到很多Api的使用

比如上面图的中国呢CreateClassAction类的buildDialog方法,就是我们新建类的时候弹出来的框,可以看到IDEA根据不同的jdk版本,弹出来的内容也会有所不同

image.png

同样是CreateClassAction这个类中,看下图中的这个方法名,应该就是实际生成文件的逻辑了,原来居然有方法可以直接生成文件🤨🤨,那当以后有生成文件之类的需求,这部分就可以参考一下

image.png

有了这个,当我们有跟IDEA已有的类似的功能需求时,可以直接去找源码获取一些线索

寻找action的group

还有一个经常会遇到的问题就是,我现在想往某个菜单中加入我的action,但是有时很难找到这个菜单的group是什么,拿上面的例子举例

我们可以查看CreateClassAction这个类的引用位置(mac command+鼠标左键/win ctrl+鼠标左键),然后会发现,只有一个位置引用了这个类

image.png

所以我们新建类的这个action所在的组就是NewGroup1

拓展操作

除此之外,我们还可以做一些拓展(偷懒)的操作。比如,我可以直接继承方才创建类的action

image.png

然后在plugin.xml配置一下

image.png

启动调试之后,你就会看到一个和原来的创建java类一模一样的action(甚至图标都嫖过来了)

image.png

这就是本文的所有内容了,如果觉得有用的话,点个赞再走呀

如果有对插件开发有兴趣的同学欢迎加我v啊:yslowgenius 其实还有个公众号叫:笨天才(刚起步。。准备写一些平时研究的技术)