编写一个IDEA插件之怎么实现事件监听

发布时间:2021-10-26 15:48:54 作者:iii
来源:亿速云 阅读:425

本篇内容主要讲解“编写一个IDEA插件之怎么实现事件监听”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“编写一个IDEA插件之怎么实现事件监听”吧!

如何监听项目或模块改变事件

首先是项目级别的事件监听。添加一个项目管理事件监听器,我们需要实现ProjectManagerListener接口,该接口有四个方法,其源码如下。

public interface ProjectManagerListener extends EventListener {   default void projectOpened(@NotNull Project project) {   }   default void projectClosed(@NotNull Project project) {   }   default void projectClosing(@NotNull Project project) {   }   default void projectClosingBeforeSave(@NotNull Project project) {   } }

有了项目管理事件监听器之后,我们如何注册该监听器呢?

有两种方法,一种是代码方式注册,一种是在plugin.xml插件配置文件中注册。

代码方式注册可调用ProjectManager.getInstance().addProjectManagerListener();方法注册,但这种方式注册有一个弊端,就是无法监听到项目打开事件,projectOpened方法不会被调用,应该在我们能够调用该方法注册监听器时,项目实际已经打开了。

所以注册项目管理监听器我们只能通过修改plugin.xml配置文件方式注册,配置代码如下:

<applicationListeners>     <listener class="com.msyc.ycpay.plugin.listener.MyProjectManagerListener"               topic="com.intellij.openapi.project.ProjectManagerListener"/> </applicationListeners>

当我们给IDEA注册自定义的项目管理事件监听器后,我们就可以通过项目管理事件监听器注册其它的事件监听器,例如注册模块监听事件,这是因为模块的事件触发在项目打开事件触发之后才会触发。因此,在projectOpened方法中可注册任何其它的事件监听器。

注册模块事件监听器代码如下:

project.getMessageBus().connect() .subscribe(ProjectTopics.MODULES, new ModuleListener(){});

subscribe方法需要两个参数:

ModuleListener接口的定义如下:

public interface ModuleListener extends EventListener {   default void moduleAdded(@NotNull Project project, @NotNull Module module) {   }   default void beforeModuleRemoved(@NotNull Project project, @NotNull Module module) {   }   default void moduleRemoved(@NotNull Project project, @NotNull Module module) {   }   default void modulesRenamed(@NotNull Project project, @NotNull List<Module> modules, @NotNull Function<Module, String> oldNameProvider) {   } }

如何监听文件编辑事件

通过前面两篇的学习,我们已经了解什么是PSI,知道一个文件对应一个PsiFile,一个PsiFile本身也是一个PsiElement,由许多的PsiElement构成,每个PsiElement也都可以有子PsiElement。

因此,监听文件改变事件其实就是监听PSI树的结构改变事件,我们需要通过PsiManager注册PsiTreeChangeListener,代码如下。

PsiManager.getInstance(project).addPsiTreeChangeListener(                 new PsiTreeChangeListener() {                     // .....                 }, FILES::clear);

至于注册时机,视情况而定,可以在Service初始化时注册,可以在AnAction触发时注册,也可以在projectOpened事件方法中注册。

PsiTreeChangeListener接口定义的方法较多,可以分为两类事件,一类是before事件、一类是after事件,接口源码如下。

public interface PsiTreeChangeListener extends EventListener {   void beforeChildAddition(@NotNull PsiTreeChangeEvent event);   void beforeChildRemoval(@NotNull PsiTreeChangeEvent event);   void beforeChildReplacement(@NotNull PsiTreeChangeEvent event);   void beforeChildMovement(@NotNull PsiTreeChangeEvent event);   void beforeChildrenChange(@NotNull PsiTreeChangeEvent event);   void beforePropertyChange(@NotNull PsiTreeChangeEvent event);    void childAdded(@NotNull PsiTreeChangeEvent event);   void childRemoved(@NotNull PsiTreeChangeEvent event);   void childReplaced(@NotNull PsiTreeChangeEvent event);   void childrenChanged(@NotNull PsiTreeChangeEvent event);   void childMoved(@NotNull PsiTreeChangeEvent event);   void propertyChanged(@NotNull PsiTreeChangeEvent event); }

到此,相信大家对“编写一个IDEA插件之怎么实现事件监听”有了更深的了解,不妨来实际操作一番吧!这里是亿速云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

推荐阅读:
  1. 如何编写nagios插件
  2. IntelliJ IDEA插件怎么用

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

idea

上一篇:云服务器端口被占用怎么办

下一篇:如何理解Python vim检查编码

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》