JetBrains公司系列产品IDEA、WebStrom、PyCharm、CLion、GoLand等都是基于IntelliJ Platform开发而成,掌握IntelliJ插件开发技能便能拥有提升开发效率的终极武器。本教程Dmeo源码请关注微信公众号“开发效率”进行获取。
如果您是JetBrains产品的用户,那您一定要看看这篇文章:JetBrains IntelliJ支持自动切换输入法,写代码如丝般顺滑
前言
自己探索IntelliJ插件开发之路并不好走,国内这方面资料较少且不成体系,虽然有官方的开发教程,但是英文版不太好理解而且讲得太浅,以至于会遇到很多无法解决的问题。因此,作者写了这篇系列教程,为了让中文开发者快速入门。授人予鱼不如授人予渔,作者觉得自我解决问题的思路比教程更重要,所以开篇首先给大家总结作者在开发过程的思路。
官方文档
IntelliJ Platform Plugin SDK是插件开发的官方文档(文末有链接),这里对IntelliJ IDE做了简单而全面的介绍,我们需要尽量去通读这篇文档,我觉得它最重要的作用是告诉我这个概念用英文怎么描述,这个对后续遇到问题时查找解决方案非常重要。所以当我们不知道该怎么描述我们遇到的问题的时候,首先来这里找下有没有对应的介绍。
开源插件
IntelliJ插件很多都是开源的,我们可以学习里面的代码,看是否能解决我们的问题。如果能找到一款实现功能很相近的开源插件,那将事半功倍。
IntelliJ插件市场是一个非常好寻找开源插件的地方,在这里可以根据关键字寻找你想要的插件,然后进入插件详情页面,找到Source Code,如下所示,有时作者可能没有设置Source Code,也许你可以去作者的Github找到远吗。
另外一个寻找开源插件的好地方就是Github,输入IDEA+关键字可以找到很多开源插件。
IntelliJ Platform源码
IntelliJ Platform是一个开源项目,在Github可以找到源代码intellij-community,另外我们也可以在插件项目中查看到源代码,那样会更方便。IDE里面的很多官方功能其实也是插件的形式提供的,所以我们可以参考他们的实现来完成我们的想法。其中最关键的还是需要知道IDE里面的概念如何用英文描述,只有知道某个功能的英文描述我们才能找到相应的类,才能知道他们是怎么实现的。所以,如果安装了中文汉化包的话赶紧把它卸载吧。
举个我自己的实际例子,我想知道键盘事件怎么监听,我知道IDE有个功能点击shift两次便能查找类或方法,通过IDE使用界面我了解到这个功能叫SearchEverywhere,于是我在项目工程里面用SearchEverywhere功能搜索关键字SearchEverywhere,于是找到了最相近的实现类com.intellij.ide.actions.SearchEverywhereAction,通过阅读源代码找到了点击两次shift与SearchEverywhere功能的联系,如下图中所示,它是通过ModifierKeyDoubleClickHandler类注册了点击两次shift后激活SearchEverywhere功能。
继续深入到ModifierKeyDoubleClickHandler里面,我找到了怎么监听键盘事件的代码如下所示,通过IdeEventQueue.EventDispatcher应该可以监听到IDEA里面所有事件,通过event instanceof KeyEvent判断是否为键盘事件,点击左上角插头形状图标,发现这个类还需要在plugin.xml里面进行注册,如下所示。
<ideEventQueueDispatcher implementation="com.intellij.openapi.keymap.impl.ModifierKeyDoubleClickHandler$MyEventDispatcher"/>
参考
IntelliJ Platform Plugin SDK:https://plugins.jetbrains.com/docs/intellij/welcome.html#getting-started
JetBrains Plugins Marketplace :https://plugins.jetbrains.com