diff --git a/src/main/java/play/dev/filewatch/DefaultFileWatchService.java b/src/main/java/play/dev/filewatch/DefaultFileWatchService.java index faecb94..f01aa8a 100644 --- a/src/main/java/play/dev/filewatch/DefaultFileWatchService.java +++ b/src/main/java/play/dev/filewatch/DefaultFileWatchService.java @@ -9,6 +9,9 @@ import java.io.File; import java.io.IOException; import java.nio.file.FileSystems; +import java.nio.file.Path; +import java.util.Optional; +import java.util.function.Consumer; import java.util.stream.Collectors; import java.util.stream.StreamSupport; @@ -37,7 +40,7 @@ public DefaultFileWatchService(LoggerProxy logger, boolean isMac) { } @Override - public FileWatcher watch(Iterable filesToWatch, Runnable onChange) { + public FileWatcher watch(Iterable filesToWatch, Consumer> onChange) { var dirsToWatch = StreamSupport.stream(filesToWatch.spliterator(), false) .filter( @@ -65,7 +68,7 @@ public FileWatcher watch(Iterable filesToWatch, Runnable onChange) { var directoryWatcher = DirectoryWatcher.builder() .paths(dirsToWatch.map(File::toPath).collect(Collectors.toList())) - .listener(__ -> onChange.run()) + .listener(dirChangeEvent -> onChange.accept(Optional.of(dirChangeEvent.path()))) .fileHashing(!disableFileHashCheck) .watchService(watchService) .build(); diff --git a/src/main/java/play/dev/filewatch/FileWatchService.java b/src/main/java/play/dev/filewatch/FileWatchService.java index fe26376..68c2067 100644 --- a/src/main/java/play/dev/filewatch/FileWatchService.java +++ b/src/main/java/play/dev/filewatch/FileWatchService.java @@ -5,8 +5,11 @@ package play.dev.filewatch; import java.io.File; +import java.nio.file.Path; import java.util.List; +import java.util.Optional; import java.util.concurrent.Callable; +import java.util.function.Consumer; /** A service that can watch files */ public interface FileWatchService { @@ -18,16 +21,16 @@ public interface FileWatchService { * @param onChange A callback that is executed whenever something changes. * @return A watcher */ - FileWatcher watch(Iterable filesToWatch, Runnable onChange); + FileWatcher watch(Iterable filesToWatch, Consumer> onChange); /** - * @deprecated Use {@link #watch(Iterable, Runnable)} instead + * @deprecated Use {@link #watch(Iterable, Consumer)} instead */ @Deprecated(since = "3.0.0", forRemoval = true) default FileWatcher watch(List filesToWatch, Callable onChange) { return watch( filesToWatch, - () -> { + dirChangeEvent -> { try { onChange.call(); } catch (RuntimeException e) { @@ -112,7 +115,7 @@ static FileWatchService detect( return new FileWatchService() { @Override - public FileWatcher watch(Iterable filesToWatch, Runnable onChange) { + public FileWatcher watch(Iterable filesToWatch, Consumer> onChange) { return delegate.watch(filesToWatch, onChange); } diff --git a/src/main/java/play/dev/filewatch/PollingFileWatchService.java b/src/main/java/play/dev/filewatch/PollingFileWatchService.java index 84397d1..2a333e7 100644 --- a/src/main/java/play/dev/filewatch/PollingFileWatchService.java +++ b/src/main/java/play/dev/filewatch/PollingFileWatchService.java @@ -8,6 +8,8 @@ import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; +import java.util.Optional; +import java.util.function.Consumer; import java.util.stream.Collectors; import java.util.stream.StreamSupport; @@ -36,7 +38,7 @@ private static Iterable listRecursively(Iterable files) { } @Override - public FileWatcher watch(Iterable filesToWatch, Runnable onChange) { + public FileWatcher watch(Iterable filesToWatch, Consumer> onChange) { stopped = false; var thread = @@ -51,7 +53,7 @@ public FileWatcher watch(Iterable filesToWatch, Runnable onChange) { state, () -> stopped); if (result.isTriggered()) { - onChange.run(); + onChange.accept(Optional.empty()); } state = result.getState(); } diff --git a/src/test/scala/play/dev/filewatch/FileWatchServiceSpec.scala b/src/test/scala/play/dev/filewatch/FileWatchServiceSpec.scala index e039f8a..f3a024c 100644 --- a/src/test/scala/play/dev/filewatch/FileWatchServiceSpec.scala +++ b/src/test/scala/play/dev/filewatch/FileWatchServiceSpec.scala @@ -100,7 +100,7 @@ abstract class FileWatchServiceSpec extends Specification { } private def watchFiles[T](files: File*)(block: => T): T = { - val watcher = watchService.watch(files.map(_.toJava).asJava, () => reportChange()) + val watcher = watchService.watch(files.map(_.toJava).asJava, maybePath => reportChange()) reset() try { block