美文网首页idea插件开发
IDEA插件开发参考资料-1

IDEA插件开发参考资料-1

作者: 巴巴11 | 来源:发表于2020-04-01 12:12 被阅读0次

IDEA的社区版源码
https://github.com/JetBrains/intellij-community

IDEA SDK的官方文档
http://www.jetbrains.org/intellij/sdk/docs

插件配置文件plugin.xml

  <actions>
    <!-- Add your actions here -->
    <action id="xxx" class="xxx" text="xxx">
      <add-to-group group-id="xxx" anchor="last"/>
    </action>
  </actions>

anchor代表插件相对于组的位置的位置,有以下几种:

first:放在最前面
last:放在最后
before:放在relative-to-action属性指定的ID的前面
after:放在relative-to-action属性指定的ID的后面

举例:
Group ID选择了,anchor选了last


image.png

最后插件就会在git块的这里出现:


image.png

IDEA官方开发者封装了大量易用的api,由于官方文档介绍很笼统,看过了仅有的文档,只能根据要开发的插件功能,去定位官方的源码相似功能部分,然后模仿着写。

经验:
一. 在event线程操作UI

这点很多平台都有这种规定,后台线程是不能操作UI的,Android中使用的是消息Handler机制,在IDEA中也有类似的消息机制。在event线程中不要进行耗时操作(例如网络,IO),耗时操作要放在后台线程。在后台线程获取到数据后,可以使用下面方式来更新UI。(还有其他方法,这里仅介绍一种)

ApplicationManager.getApplication().invokeLater(new Runnable() {
        @Override
        public void run() {
                // update UI
       }
});

二. 如何开启一个后台任务?
不仅限于此,这里介绍一种方法,可以使用ProgressManager来开启

ProgressManager.getInstance().XXXX(new Runnable());
image.png

补全后可以看到很多方法,选择合适的调用即可。

三. 如何开启进度条任务(类似于构建,ide底下会出进度条)
创建自定义类MyTask继承于Task.Backgroundable,并重写run方法,run方法在后台线程执行,调用时可以如下:

new BackgroundTaskQueue(project, "my-task-name").run(new MyTask());

四. 什么是虚拟文件系统VFS(VirtualFileSystem)?
<meta charset="utf-8">

官方文档地址: http://www.jetbrains.org/intellij/sdk/docs/basics/architectural_overview/files.html
看代码时可能会经常看见VirtualFile,初次见肯定会疑惑,简单介绍一下(摘自官档):

虚拟文件系统(VFS)是IntelliJ Platform的一个组件,它封装了用于处理文件的大部分活动。它有以下主要用途:

  • 提供用于处理文件的通用API,无论其实际位置如何(在磁盘上,存档中,在HTTP服务器上,或者git上等)
  • 在检测到修改时跟踪文件修改并提供文件内容的新旧版本。
  • 提供将附加持久数据与VFS中的文件相关联的可能性。

看一下VirtualFileSystem实例的方法,大概有以下几项:
刷新、获取VirtualFile、添加监听等作用。

VirtualFileSystem实例的方法

比较常用的是VirtualFile,看一下实例方法


VirtualFile实例的方法 image.png

可以看到我们常用的文件操作基本都在这里。而与之相对应的有个类叫 Document ,这两个是不同的概念,Document 只能用于文本的文档,而且对应的是实例文件。VirtualFile是虚拟的文件,既可用于文本也可用于二进制文件。

五. 什么是程序结构接口PSI (Program Structure Interface)?

程序结构接口,通常称为PSI,是IntelliJ平台中的一个层,负责解析文件并创建支持平台许多功能的语法和语义代码模型。(摘自官档)

也就是说对特定语言语法树,符号解析等可以使用PSI,如果有此需要,可以参考
https://www.jetbrains.org/intellij/sdk/docs/basics/architectural_overview/psi.html

六. UI相关(用户界面组件)

IntelliJ平台包含大量自定义Swing组件。在插件中使用这些组件将确保您的插件与IDE的其余部分的UI一致并且与其一致,并且与使用默认Swing组件相比,通常可以减少代码大小。
列举一些

  • Tool Windows
  • 对话框 Dialogs
  • 弹出窗口 Popups
  • 通知 Notifications
  • 文件和类选择器 File and Class Choosers
  • 编辑器组件 Editor Components
  • 列表和树控件 List and Tree Controls
  • 以及其他很多很多

<meta charset="utf-8">

可以参考http://www.jetbrains.org/intellij/sdk/docs/user_interface_components/user_interface_components.html

总结:
其中VFS和PSI是众多模块中比较核心的部分,开发过程中也建议参考其他开源插件的源码,多看多想,相信读者在开发过程中会有不小的收获。

参考:
https://www.jianshu.com/p/18493cba6cb9

相关文章

网友评论

    本文标题:IDEA插件开发参考资料-1

    本文链接:https://www.haomeiwen.com/subject/pqvouhtx.html