From ee817a280ea4828f2146687833096328eb25ce46 Mon Sep 17 00:00:00 2001 From: anna Date: Wed, 20 Jul 2011 19:29:46 +0400 Subject: [PATCH] optimize scope editing --- .../ui/TreeModelBuilder.java | 29 ++++++++++++------- 1 file changed, 19 insertions(+), 10 deletions(-) diff --git a/java/java-impl/src/com/intellij/packageDependencies/ui/TreeModelBuilder.java b/java/java-impl/src/com/intellij/packageDependencies/ui/TreeModelBuilder.java index 20422dbc2099..3f6b99df382e 100644 --- a/java/java-impl/src/com/intellij/packageDependencies/ui/TreeModelBuilder.java +++ b/java/java-impl/src/com/intellij/packageDependencies/ui/TreeModelBuilder.java @@ -170,19 +170,22 @@ public class TreeModelBuilder { countFiles(project); final PsiManager psiManager = PsiManager.getInstance(project); myFileIndex.iterateContent(new ContentIterator() { + PackageDependenciesNode lastParent = null; public boolean processFile(VirtualFile fileOrDir) { if (!fileOrDir.isDirectory()) { final PsiFile psiFile = psiManager.findFile(fileOrDir); if (psiFile != null) { - buildFileNode(psiFile); + lastParent = buildFileNode(psiFile, lastParent); } + } else { + lastParent = null; } return true; } }); for (VirtualFile root : LibraryUtil.getLibraryRoots(project)) { - processFilesRecursively(root, psiManager); + processFilesRecursively(root, null, psiManager); } } }; @@ -198,19 +201,22 @@ public class TreeModelBuilder { return new TreeModel(myRoot, myTotalFileCount, myMarkedFileCount); } - private void processFilesRecursively(VirtualFile file, PsiManager psiManager) { + @Nullable + private PackageDependenciesNode processFilesRecursively(VirtualFile file, @Nullable PackageDependenciesNode parent, PsiManager psiManager) { if (file.isDirectory()) { VirtualFile[] children = file.getChildren(); + PackageDependenciesNode dirNode = null; for (VirtualFile aChildren : children) { - processFilesRecursively(aChildren, psiManager); + dirNode = processFilesRecursively(aChildren, dirNode, psiManager); } } else { final PsiFile psiFile = psiManager.findFile(file); if (psiFile != null) { // skip inners & anonymous - buildFileNode(psiFile); + return buildFileNode(psiFile, parent); } } + return null; } private void countFilesRecursively(VirtualFile file) { @@ -244,7 +250,7 @@ public class TreeModelBuilder { public void run() { for (final PsiFile file : files) { if (file != null) { - buildFileNode(file); + buildFileNode(file, null); } } } @@ -261,7 +267,8 @@ public class TreeModelBuilder { return new TreeModel(myRoot, myTotalFileCount, myMarkedFileCount); } - private void buildFileNode(PsiFile file) { + @Nullable + private PackageDependenciesNode buildFileNode(PsiFile file, @Nullable PackageDependenciesNode parent) { ProgressIndicator indicator = ProgressManager.getInstance().getProgressIndicator(); if (indicator != null) { indicator.setIndeterminate(false); @@ -273,12 +280,12 @@ public class TreeModelBuilder { indicator.setFraction(((double)myScannedFileCount++) / myTotalFileCount); } - if (file == null || !file.isValid()) return; + if (file == null || !file.isValid()) return null; boolean isMarked = myMarker != null && myMarker.isMarked(file); if (isMarked) myMarkedFileCount++; if (isMarked || myAddUnmarkedFiles) { - PackageDependenciesNode dirNode = getFileParentNode(file); - if (dirNode == null) return; + PackageDependenciesNode dirNode = parent != null ? parent : getFileParentNode(file); + if (dirNode == null) return null; if (myShowFiles) { FileNode fileNode = new FileNode(file, isMarked); @@ -287,7 +294,9 @@ public class TreeModelBuilder { else { dirNode.addFile(file, isMarked); } + return dirNode; } + return null; } public @Nullable PackageDependenciesNode getFileParentNode(PsiFile file) {