From c7ec44de4dc6a215408c882f5ceab4f541371c16 Mon Sep 17 00:00:00 2001 From: "Anton.Makeev" Date: Thu, 19 Nov 2009 19:41:30 +0300 Subject: [PATCH] Maven: do not iterate over dir.getChildren() when something is deleted --- .../project/MavenProjectsManagerWatcher.java | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/plugins/maven/src/main/java/org/jetbrains/idea/maven/project/MavenProjectsManagerWatcher.java b/plugins/maven/src/main/java/org/jetbrains/idea/maven/project/MavenProjectsManagerWatcher.java index 051e90c9feda..a0d1b274c01b 100644 --- a/plugins/maven/src/main/java/org/jetbrains/idea/maven/project/MavenProjectsManagerWatcher.java +++ b/plugins/maven/src/main/java/org/jetbrains/idea/maven/project/MavenProjectsManagerWatcher.java @@ -34,7 +34,9 @@ import com.intellij.openapi.vfs.VfsUtil; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.openapi.vfs.VirtualFileManager; import com.intellij.openapi.vfs.newvfs.BulkFileListener; +import com.intellij.openapi.vfs.newvfs.NewVirtualFile; import com.intellij.openapi.vfs.newvfs.events.*; +import com.intellij.openapi.vfs.newvfs.impl.NullVirtualFile; import com.intellij.openapi.vfs.pointers.VirtualFilePointer; import com.intellij.openapi.vfs.pointers.VirtualFilePointerListener; import com.intellij.openapi.vfs.pointers.VirtualFilePointerManager; @@ -49,9 +51,7 @@ import org.jetbrains.idea.maven.utils.MavenMergingUpdateQueue; import org.jetbrains.idea.maven.utils.MavenUtil; import java.io.File; -import java.util.ArrayList; -import java.util.List; -import java.util.Set; +import java.util.*; public class MavenProjectsManagerWatcher { private static final int DOCUMENT_SAVE_DELAY = 1000; @@ -397,8 +397,14 @@ public class MavenProjectsManagerWatcher { private void deleteRecursively(VirtualFile f) { if (isRelevant(f.getPath())) deleteFile(f); if (f.isDirectory()) { - for (VirtualFile each : f.getChildren()) { - deleteRecursively(each); + // prevent reading directories content if not already cached. + Collection children = f instanceof NewVirtualFile + ? ((NewVirtualFile)f).getInDbChildren() + : Arrays.asList(f.getChildren()); + for (VirtualFile each : children) { + if (each != NullVirtualFile.INSTANCE) { + deleteRecursively(each); + } } } }