IDEA插件开发---Listeners
Posted 流子
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了IDEA插件开发---Listeners相关的知识,希望对你有一定的参考价值。
侦听器允许插件以声明方式订阅通过消息总线传递的事件(有关详细信息,请参阅消息传递基础结构)。侦听器实现必须是无状态的,并且不能实现生命周期(例如,Disposable)。
您可以定义应用程序级别和项目级别的侦听器。
所有可用的侦听器/主题都列在侦听器部分下的扩展点和侦听器列表中。通过IntelliJ Platform Explorer 浏览开源 IntelliJ 平台插件的现有实现中的用法。
侦听器的声明式注册允许您获得比从代码注册侦听器更好的性能。优点是因为监听器实例是延迟创建的——第一次将事件发送到主题时——而不是在应用程序启动或项目打开期间。
从平台版本 2019.3 开始支持在plugin.xml中定义侦听器。
定义应用级监听器
要定义应用程序级侦听器,请将以下部分添加到您的plugin.xml:
作为一个具体的例子,如果你想接收关于所有虚拟文件系统变化的事件,你需要实现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
定义项目级监听器
项目级别的侦听器以相同的方式注册,除了顶级标签是. 它们可用于监听项目级事件,例如工具窗口操作:
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的主要内容,如果未能解决你的问题,请参考以下文章