Freewind @ Thoughtworks scala java javascript dart 工具 编程实践 月结 math python english [comments admin] [feed]

(2014-09-27) 如何在编写Idea Plugin的时候,知道项目中哪些文件被新建、删除、移动等

广告: 云梯:翻墙vpn (省10元) 土行孙:科研用户翻墙http proxy (有优惠)

plugin.xml

<project-components>
    <component>
        <implementation-class>com.thoughtworks.pli.intellij.remotepair.RemotePairProjectComponent</implementation-class>
    </component>
</project-components>

RemotePairProjectComponent.scala

package com.thoughtworks.pli.intellij.remotepair

import com.intellij.openapi.fileEditor.{FileEditorManagerEvent, FileEditorManager, FileEditorManagerAdapter, FileEditorManagerListener}
import com.intellij.openapi.vfs._
import org.jetbrains.annotations.NotNull
import com.intellij.util.messages.{Topic, MessageBusConnection}
import com.intellij.openapi.components.ProjectComponent
import com.intellij.openapi.project.Project
import com.intellij.openapi.vfs.impl.BulkVirtualFileListenerAdapter

class RemotePairProjectComponent(project: Project) extends ProjectComponent {

  override def initComponent() {}

  override def disposeComponent() {}

  override def getComponentName: String = "RemotePairProjectComponent"

  override def projectOpened() {
    val connection: MessageBusConnection = project.getMessageBus.connect(project)
    val fileListener = new VirtualFileAdapter() {
      override def fileDeleted(event: VirtualFileEvent) {
        println("### file deleted: " + event.getFile)
      }

      override def fileCreated(event: VirtualFileEvent) {
        println("### file created: " + event.getFile)
      }

      override def fileMoved(event: VirtualFileMoveEvent) {
        println("### file moved: " + event.getFile)
      }

      override def propertyChanged(event: VirtualFilePropertyEvent) {
        println("### file property changed: " + event.getFile)
      }

      override def fileCopied(event: VirtualFileCopyEvent) {
        println("### file copied: " + event.getFile)
      }

      override def contentsChanged(event: VirtualFileEvent) {
        println("### contents changed: " + event.getFile)
      }
    }

    connection.subscribe(VirtualFileManager.VFS_CHANGES, new BulkVirtualFileListenerAdapter(fileListener))
  }

  override def projectClosed() {}

}

运行

### file created: file:///.../test/src/XXX.java
### contents changed: file:///.../test/src/XXX.java
########## file selection changed: null -> file:///.../test/src/XXX.java
########## file opened: file:///.../test/src/XXX.java
### contents changed: file:///.../test/src/XXX.java
### contents changed: file:///.../test/.idea/workspace.xml
comments powered by Disqus