From 87be8693d2f1112d87daaf439d5c13aeaa5893fa Mon Sep 17 00:00:00 2001 From: Roman Shevchenko Date: Sat, 25 Aug 2012 15:47:01 +0400 Subject: [PATCH] Use VFS visitor in place of recursion (xpath) --- .../plugins/xpathView/search/SearchScope.java | 22 +++++++++---------- 1 file changed, 10 insertions(+), 12 deletions(-) diff --git a/plugins/xpath/xpath-view/src/org/intellij/plugins/xpathView/search/SearchScope.java b/plugins/xpath/xpath-view/src/org/intellij/plugins/xpathView/search/SearchScope.java index 07bc641a18d0..b4815f1dbd73 100644 --- a/plugins/xpath/xpath-view/src/org/intellij/plugins/xpathView/search/SearchScope.java +++ b/plugins/xpath/xpath-view/src/org/intellij/plugins/xpathView/search/SearchScope.java @@ -27,7 +27,9 @@ import com.intellij.openapi.util.InvalidDataException; import com.intellij.openapi.util.JDOMExternalizable; import com.intellij.openapi.util.WriteExternalException; import com.intellij.openapi.vfs.LocalFileSystem; +import com.intellij.openapi.vfs.VfsUtilCore; import com.intellij.openapi.vfs.VirtualFile; +import com.intellij.openapi.vfs.VirtualFileVisitor; import com.intellij.psi.PsiFile; import com.intellij.psi.PsiManager; import com.intellij.psi.search.GlobalSearchScope; @@ -246,20 +248,16 @@ public class SearchScope implements JDOMExternalizable { return LocalFileSystem.getInstance().findFileByPath(dirName.replace('\\', '/')); } - private static void iterateRecursively(VirtualFile virtualFile, Processor processor, boolean recursive) { - final VirtualFile[] children = virtualFile.getChildren(); - for (VirtualFile file : children) { - if (file.isDirectory()) { - if (recursive) { - iterateRecursively(file, processor, recursive); + private static void iterateRecursively(VirtualFile virtualFile, final Processor processor, boolean recursive) { + VfsUtilCore.visitChildrenRecursively(virtualFile, new VirtualFileVisitor(recursive ? null : VirtualFileVisitor.ONE_LEVEL_DEEP) { + @Override + public boolean visitFile(@NotNull VirtualFile file) { + if (!file.isDirectory()) { + processor.process(file); } - } else { - processor.process(file); + return true; } - } - if (!virtualFile.isDirectory()) { - processor.process(virtualFile); - } + }); } private static class MyFileIterator implements ContentIterator {