From ce25c88fe48c0bfd8bf524b4f679fbea12af0234 Mon Sep 17 00:00:00 2001 From: "Gregory.Shrago" Date: Tue, 28 Mar 2017 18:29:20 +0300 Subject: [PATCH] introduce fileTraverser() --- .../intellij/openapi/util/io/FileUtil.java | 22 +++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/platform/util/src/com/intellij/openapi/util/io/FileUtil.java b/platform/util/src/com/intellij/openapi/util/io/FileUtil.java index 1a51783ac080..f4c5d7f5d837 100644 --- a/platform/util/src/com/intellij/openapi/util/io/FileUtil.java +++ b/platform/util/src/com/intellij/openapi/util/io/FileUtil.java @@ -25,6 +25,8 @@ import com.intellij.util.*; import com.intellij.util.concurrency.FixedFuture; import com.intellij.util.containers.ContainerUtil; import com.intellij.util.containers.Convertor; +import com.intellij.util.containers.JBIterable; +import com.intellij.util.containers.JBTreeTraverser; import com.intellij.util.io.URLUtil; import com.intellij.util.text.FilePathHashingStrategy; import com.intellij.util.text.StringFactory; @@ -1291,10 +1293,26 @@ public class FileUtil extends FileUtilRt { } } - public static boolean processFilesRecursively(@NotNull File root, @NotNull Processor processor) { - return processFilesRecursively(root, processor, null); + @NotNull + public static JBTreeTraverser fileTraverser(@Nullable File root) { + return new JBTreeTraverser(FILE_CHILDREN).withRoot(root); } + private static final Function> FILE_CHILDREN = new Function>() { + @Override + public Iterable fun(File file) { + return file != null && file.isDirectory() ? JBIterable.of(file.listFiles()) : JBIterable.empty(); + } + }; + + public static boolean processFilesRecursively(@NotNull File root, @NotNull Processor processor) { + return fileTraverser(root).bfsTraversal().processEach(processor); + } + + /** + * @see FileUtil#fileTraverser(File) + */ + @Deprecated public static boolean processFilesRecursively(@NotNull File root, @NotNull Processor processor, @Nullable final Processor directoryFilter) { final LinkedList queue = new LinkedList();