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