IDEA插件开发---Listeners

Posted 流子

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了IDEA插件开发---Listeners相关的知识,希望对你有一定的参考价值。

侦听器允许插件以声明方式订阅通过消息总线传递的事件(有关详细信息,请参阅消息传递基础结构)。侦听器实现必须是无状态的,并且不能实现生命周期(例如,Disposable)。

您可以定义应用程序级别和项目级别的侦听器。

所有可用的侦听器/主题都列在侦听器部分下的扩展点和侦听器列表中。通过IntelliJ Platform Explorer 浏览开源 IntelliJ 平台插件的现有实现中的用法。

侦听器的声明式注册允许您获得比从代码注册侦听器更好的性能。优点是因为监听器实例是延迟创建的——第一次将事件发送到主题时——而不是在应用程序启动或项目打开期间。

从平台版本 2019.3 开始支持在plugin.xml中定义侦听器。

定义应用级监听器
要定义应用程序级侦听器,请将以下部分添加到您的plugin.xml:

该topic属性指定与您要接收的事件类型对应的侦听器接口。通常,这是用作Topic事件类型实例的类型参数的接口。该class属性指定插件中实现侦听器接口并接收事件的类。

作为一个具体的例子,如果你想接收关于所有虚拟文件系统变化的事件,你需要实现BulkFileListener对应于 topic 的接口VirtualFileManager.VFS_CHANGES。要通过代码订阅此主题,您可以使用类似以下代码段的内容:

messageBus.connect().subscribe(VirtualFileManager.VFS_CHANGES,
new BulkFileListener()
@Override
public void after(@NotNull List<? extends VFileEvent> events)
// handle the events

);
要使用声明式注册,您不再需要引用Topic实例。相反,您直接引用侦听器接口类:

然后,您将侦听器实现作为顶级类提供:

package myPlugin;

public class MyVfsListener implements BulkFileListener
@Override
public void after(@NotNull List<? extends VFileEvent> events)
// handle the events


定义项目级监听器
项目级别的侦听器以相同的方式注册,除了顶级标签是. 它们可用于监听项目级事件,例如工具窗口操作:

实现侦听器接口的类可以定义一个接受 a 的单参数构造函数Project,它将接收为其创建侦听器的项目的实例:

package myPlugin;

public class MyToolWindowListener implements ToolWindowManagerListener
private final Project project;

public MyToolwindowListener(Project project)
this.project = project;

@Override
public void stateChanged(@NotNull ToolWindowManager toolWindowManager)
// handle the state change


附加属性
可以使用以下属性限制侦听器的注册:

os- 允许将侦听器限制到给定的操作系统,例如,os="windows"仅适用于 Windows(2020.1 及更高版本)

activeInTestMode- 设置为如果返回false则禁用监听器Application.isUnitTestMode()true

activeInHeadlessMode- 设置为如果返回false则禁用侦听器。此外,作为测试模式的覆盖意味着无头模式。Application.isHeadlessEnvironment()trueactiveInTestMode

以上是关于IDEA插件开发---Listeners的主要内容,如果未能解决你的问题,请参考以下文章

idea开发工具的插件开发(一)入门

idea 开发插件。

idea插件开发--知识分享插件开发

实践idea插件开发

实践idea插件开发

IDEA工具java开发之 常用插件 mybatis插件 idea安装插件方法