src/Pure/General/file_watcher.scala
changeset 73353 279e45248e9d
parent 73340 0ffcad1f6130
child 73359 d8a0e996614b
equal deleted inserted replaced
73352:54b43bcf1df3 73353:279e45248e9d
    10 import java.io.{File => JFile}
    10 import java.io.{File => JFile}
    11 import java.nio.file.FileSystems
    11 import java.nio.file.FileSystems
    12 import java.nio.file.{WatchKey, WatchEvent, Path => JPath}
    12 import java.nio.file.{WatchKey, WatchEvent, Path => JPath}
    13 import java.nio.file.StandardWatchEventKinds.{ENTRY_CREATE, ENTRY_DELETE, ENTRY_MODIFY}
    13 import java.nio.file.StandardWatchEventKinds.{ENTRY_CREATE, ENTRY_DELETE, ENTRY_MODIFY}
    14 
    14 
    15 import scala.collection.JavaConverters
    15 import scala.jdk.CollectionConverters._
    16 
    16 
    17 
    17 
    18 class File_Watcher private[File_Watcher]  // dummy template
    18 class File_Watcher private[File_Watcher]  // dummy template
    19 {
    19 {
    20   def register(dir: JFile): Unit = {}
    20   def register(dir: JFile): Unit = {}
    99             state.change_result(st =>
    99             state.change_result(st =>
   100               {
   100               {
   101                 val (remove, changed) =
   101                 val (remove, changed) =
   102                   st.dirs.collectFirst({ case (dir, key1) if key == key1 => dir }) match {
   102                   st.dirs.collectFirst({ case (dir, key1) if key == key1 => dir }) match {
   103                     case Some(dir) =>
   103                     case Some(dir) =>
   104                       val events =
   104                       val events: Iterable[WatchEvent[JPath]] =
   105                         JavaConverters.collectionAsScalaIterable(
   105                         key.pollEvents.asInstanceOf[java.util.List[WatchEvent[JPath]]].asScala
   106                           key.pollEvents.asInstanceOf[java.util.List[WatchEvent[JPath]]])
       
   107                       val remove = if (key.reset) None else Some(dir)
   106                       val remove = if (key.reset) None else Some(dir)
   108                       val changed =
   107                       val changed =
   109                         (Set.empty[JFile] /: events.iterator) {
   108                         (Set.empty[JFile] /: events.iterator) {
   110                           case (set, event) => set + dir.toPath.resolve(event.context).toFile
   109                           case (set, event) => set + dir.toPath.resolve(event.context).toFile
   111                         }
   110                         }