zoukankan      html  css  js  c++  java
  • idea plugin 插件开发之检测文件修改

    实现 ApplicationComponent,BulkFileListener 接口,当然由于是 ApplicationComponent,因此需要在 plugin.xml 加上相关配置。

    plugin.xml 添加配置:

        <application-components>
            <component>
                <implementation-class>com.baiguiren.yaml.YamlApplicationComponent</implementation-class>
            </component>
        </application-components>
    

      

    下面是文件内容:

    public class A implements ApplicationComponent, BulkFileListener {
    
        private final MessageBusConnection connection;
    
        public A() {
            connection = ApplicationManager.getApplication().getMessageBus().connect();
        }
    
        public void initComponent() {
            connection.subscribe(VirtualFileManager.VFS_CHANGES, this);
        }
    
        public void disposeComponent() {
            connection.disconnect();
        }
    
        public void before(List<? extends VFileEvent> events) {
            // ...
        }
    
        public void after(List<? extends VFileEvent> events) {
            // ...
        }
    }
    

      

    示例:

    package com.baiguiren.yaml;
    
    import com.intellij.openapi.application.ApplicationManager;
    import com.intellij.openapi.components.ApplicationComponent;
    import com.intellij.openapi.vfs.VirtualFileManager;
    import com.intellij.openapi.vfs.newvfs.BulkFileListener;
    import com.intellij.openapi.vfs.newvfs.events.VFileEvent;
    import com.intellij.util.messages.MessageBusConnection;
    import org.jetbrains.annotations.NotNull;
    
    import java.util.HashSet;
    import java.util.List;
    
    public class YamlApplicationComponent implements ApplicationComponent, BulkFileListener {
    
        @SuppressWarnings("WeakerAccess")
        public static HashSet<String > dirtyProjects = new HashSet<>();
    
        private final MessageBusConnection connection;
    
        public YamlApplicationComponent() {
            connection = ApplicationManager.getApplication().getMessageBus().connect();
        }
    
        @Override
        public void initComponent() {
            connection.subscribe(VirtualFileManager.VFS_CHANGES, this);
        }
    
        @Override
        public void disposeComponent() {
            connection.disconnect();
        }
    
        @Override
        public void before(@NotNull List<? extends VFileEvent> events) {
    
        }
    
        @Override
        public void after(@NotNull List<? extends VFileEvent> events) {
            for (VFileEvent event : events) {
                if (isLaravelProjectEvent(event)) {
                    String projectName = getProjectName(event);
                    if (!projectName.equals("")) {
                        dirtyProjects.add(projectName);
                    }
                }
            }
        }
    
        private boolean isLaravelProjectEvent(VFileEvent event) {
            return event.getPath().endsWith("code-gen/fields.txt");
        }
    
        private String getProjectName(VFileEvent event) {
            String[] paths = event.getPath().split("/");
            if (paths.length > 3) {
                return paths[paths.length - 3];
            }
    
            return "";
        }
    
        @SuppressWarnings("WeakerAccess")
        public static boolean projectIsDirty(String projectName) {
            return dirtyProjects.contains(projectName);
        }
    }
    

      

    如上,我们可以通过 event 参数获取文件所在路径等信息。

  • 相关阅读:
    使用VMware Workstation安装win7镜像文件时遇见的错误
    每次启动懂maven项目都必须关闭javaw.exe进程
    laravel excel导出调节列宽度,对某列中数据颜色处理
    三个<li>元素放一行
    php中bootstrap框架.popover弹出框,鼠标移动到上面自动显示,离开自动消失
    锚点,自动跳转到某处
    WdatePicker控件Javascript取得当前时间、取得减30分钟时间
    (mysql数据库报错)The user specified as a definer ('root'@'%') does not exist
    c# tcp协议发送数据
    c# 键值对的方式post提交
  • 原文地址:https://www.cnblogs.com/eleven24/p/8949346.html
Copyright © 2011-2022 走看看