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 参数获取文件所在路径等信息。

  • 相关阅读:
    Code First 数据迁移 转
    WebAPI Post接收数据
    hbase1.2.4 API改动
    spark中RDD持久化浅析
    SQLSTATE[42S22]: Column not found: 1054 Unknown column 'Attr_id' in 'where clause'
    宝塔忘记面板地址怎么办? 可以找到没问题的
    卸载Apache 删除已经停止的服务
    Composer 卸载
    TP5.1模型 增删改查
    打印数据库int类型的时间戳
  • 原文地址:https://www.cnblogs.com/eleven24/p/8949346.html
Copyright © 2011-2022 走看看