diff --git a/platform/lang-impl/src/com/intellij/openapi/roots/impl/DirectoryIndexComponent.java b/platform/lang-impl/src/com/intellij/openapi/roots/impl/DirectoryIndexComponent.java index ab82128a8c24..bee9deaa4f8f 100644 --- a/platform/lang-impl/src/com/intellij/openapi/roots/impl/DirectoryIndexComponent.java +++ b/platform/lang-impl/src/com/intellij/openapi/roots/impl/DirectoryIndexComponent.java @@ -140,22 +140,22 @@ public class DirectoryIndexComponent extends DirectoryIndexImpl { if (module != null) { if (parentInfo.isInModuleSource) { String newDirPackageName = getPackageNameForSubdir(parentPackage, file.getName()); - state.fillMapWithModuleSource(file, module, newDirPackageName, parentInfo.sourceRoot, parentInfo.isTestSource); + state.fillMapWithModuleSource(file, module, newDirPackageName, parentInfo.sourceRoot, parentInfo.isTestSource, null); } } if (parentInfo.libraryClassRoot != null) { String newDirPackageName = getPackageNameForSubdir(parentPackage, file.getName()); - state.fillMapWithLibraryClasses(file, newDirPackageName, parentInfo.libraryClassRoot); + state.fillMapWithLibraryClasses(file, newDirPackageName, parentInfo.libraryClassRoot, null); } if (parentInfo.isInLibrarySource) { String newDirPackageName = getPackageNameForSubdir(parentPackage, file.getName()); - state.fillMapWithLibrarySources(file, newDirPackageName, parentInfo.sourceRoot); + state.fillMapWithLibrarySources(file, newDirPackageName, parentInfo.sourceRoot, null); } if (!parentInfo.getOrderEntries().isEmpty()) { - state.fillMapWithOrderEntries(file, parentInfo.getOrderEntries(), null, null, null, parentInfo); + state.fillMapWithOrderEntries(file, parentInfo.getOrderEntries(), null, null, null, parentInfo, null); } return state; } diff --git a/platform/projectModel-impl/src/com/intellij/openapi/roots/impl/DirectoryIndexImpl.java b/platform/projectModel-impl/src/com/intellij/openapi/roots/impl/DirectoryIndexImpl.java index ce23cac4706c..ddfa00d68104 100644 --- a/platform/projectModel-impl/src/com/intellij/openapi/roots/impl/DirectoryIndexImpl.java +++ b/platform/projectModel-impl/src/com/intellij/openapi/roots/impl/DirectoryIndexImpl.java @@ -357,7 +357,7 @@ public class DirectoryIndexImpl extends DirectoryIndex { for (SourceFolder sourceFolder : sourceFolders) { VirtualFile dir = sourceFolder.getFile(); if (dir != null) { - fillMapWithModuleSource(dir, module, sourceFolder.getPackagePrefix(), dir, sourceFolder.isTestSource()); + fillMapWithModuleSource(dir, module, sourceFolder.getPackagePrefix(), dir, sourceFolder.isTestSource(), progress); } } } @@ -367,7 +367,7 @@ public class DirectoryIndexImpl extends DirectoryIndex { final Module module, final String packageName, final VirtualFile sourceRoot, - final boolean isTestSource) { + final boolean isTestSource, @Nullable final ProgressIndicator progress) { VfsUtilCore.visitChildrenRecursively(dir, new DirectoryVisitor() { @@ -375,6 +375,9 @@ public class DirectoryIndexImpl extends DirectoryIndex { @Override protected DirectoryInfo updateInfo(VirtualFile file) { + if (progress != null) { + progress.checkCanceled(); + } DirectoryInfo info = myDirToInfoMap.get(file); if (info == null) return null; if (!module.equals(info.module)) return null; @@ -417,13 +420,16 @@ public class DirectoryIndexImpl extends DirectoryIndex { if (isLibrary) { VirtualFile[] sourceRoots = orderEntry.getFiles(OrderRootType.SOURCES); for (final VirtualFile sourceRoot : sourceRoots) { - fillMapWithLibrarySources(sourceRoot, "", sourceRoot); + fillMapWithLibrarySources(sourceRoot, "", sourceRoot, progress); } } } } - protected void fillMapWithLibrarySources(VirtualFile dir, String packageName, VirtualFile sourceRoot) { + protected void fillMapWithLibrarySources(VirtualFile dir, String packageName, VirtualFile sourceRoot, @Nullable ProgressIndicator progress) { + if (progress != null) { + progress.checkCanceled(); + } if (isIgnored(dir)) return; DirectoryInfo info = getOrCreateDirInfo(dir); @@ -441,7 +447,7 @@ public class DirectoryIndexImpl extends DirectoryIndex { for (VirtualFile child : children) { if (child.isDirectory()) { String childPackageName = getPackageNameForSubdir(packageName, child.getName()); - fillMapWithLibrarySources(child, childPackageName, sourceRoot); + fillMapWithLibrarySources(child, childPackageName, sourceRoot, progress); } } } @@ -455,13 +461,16 @@ public class DirectoryIndexImpl extends DirectoryIndex { if (isLibrary) { VirtualFile[] classRoots = orderEntry.getFiles(OrderRootType.CLASSES); for (final VirtualFile classRoot : classRoots) { - fillMapWithLibraryClasses(classRoot, "", classRoot); + fillMapWithLibraryClasses(classRoot, "", classRoot, progress); } } } } - protected void fillMapWithLibraryClasses(VirtualFile dir, String packageName, VirtualFile classRoot) { + protected void fillMapWithLibraryClasses(VirtualFile dir, String packageName, VirtualFile classRoot, @Nullable ProgressIndicator progress) { + if (progress != null) { + progress.checkCanceled(); + } if (isIgnored(dir)) return; DirectoryInfo info = getOrCreateDirInfo(dir); @@ -481,7 +490,7 @@ public class DirectoryIndexImpl extends DirectoryIndex { for (VirtualFile child : children) { if (child.isDirectory()) { String childPackageName = getPackageNameForSubdir(packageName, child.getName()); - fillMapWithLibraryClasses(child, childPackageName, classRoot); + fillMapWithLibraryClasses(child, childPackageName, classRoot, progress); } } } @@ -489,7 +498,7 @@ public class DirectoryIndexImpl extends DirectoryIndex { private void initOrderEntries(Module module, MultiMap depEntries, MultiMap libClassRootEntries, - MultiMap libSourceRootEntries) { + MultiMap libSourceRootEntries, ProgressIndicator progress) { for (OrderEntry orderEntry : getOrderEntries(module)) { if (orderEntry instanceof ModuleOrderEntry) { @@ -512,7 +521,7 @@ public class DirectoryIndexImpl extends DirectoryIndex { VirtualFile[] sourceRoots = orderEntry.getFiles(OrderRootType.SOURCES); for (VirtualFile sourceRoot : sourceRoots) { - fillMapWithOrderEntries(sourceRoot, oneEntryList, entryModule, null, null, null); + fillMapWithOrderEntries(sourceRoot, oneEntryList, entryModule, null, null, null, progress); } } else if (orderEntry instanceof LibraryOrderEntry || orderEntry instanceof JdkOrderEntry) { @@ -530,23 +539,23 @@ public class DirectoryIndexImpl extends DirectoryIndex { private void fillMapWithOrderEntries(MultiMap depEntries, MultiMap libClassRootEntries, - MultiMap libSourceRootEntries) { + MultiMap libSourceRootEntries, ProgressIndicator progress) { for (Map.Entry> mapEntry : depEntries.entrySet()) { final VirtualFile vRoot = mapEntry.getKey(); final Collection entries = mapEntry.getValue(); - fillMapWithOrderEntries(vRoot, entries, null, null, null, null); + fillMapWithOrderEntries(vRoot, entries, null, null, null, null, progress); } for (Map.Entry> mapEntry : libClassRootEntries.entrySet()) { final VirtualFile vRoot = mapEntry.getKey(); final Collection entries = mapEntry.getValue(); - fillMapWithOrderEntries(vRoot, entries, null, vRoot, null, null); + fillMapWithOrderEntries(vRoot, entries, null, vRoot, null, null, progress); } for (Map.Entry> mapEntry : libSourceRootEntries.entrySet()) { final VirtualFile vRoot = mapEntry.getKey(); final Collection entries = mapEntry.getValue(); - fillMapWithOrderEntries(vRoot, entries, null, null, vRoot, null); + fillMapWithOrderEntries(vRoot, entries, null, null, vRoot, null, progress); } } @@ -581,10 +590,10 @@ public class DirectoryIndexImpl extends DirectoryIndex { protected void fillMapWithOrderEntries(final VirtualFile root, final Collection orderEntries, - final Module module, - final VirtualFile libraryClassRoot, - final VirtualFile librarySourceRoot, - final DirectoryInfo parentInfo) { + @Nullable final Module module, + @Nullable final VirtualFile libraryClassRoot, + @Nullable final VirtualFile librarySourceRoot, + @Nullable final DirectoryInfo parentInfo, @Nullable final ProgressIndicator progress) { VfsUtilCore.visitChildrenRecursively(root, new DirectoryVisitor() { @@ -592,6 +601,9 @@ public class DirectoryIndexImpl extends DirectoryIndex { @Override protected DirectoryInfo updateInfo(VirtualFile dir) { + if (progress != null) { + progress.checkCanceled(); + } if (isIgnored(dir)) return null; DirectoryInfo info = myDirToInfoMap.get(dir); // do not create it here! @@ -662,9 +674,9 @@ public class DirectoryIndexImpl extends DirectoryIndex { initOrderEntries(module, depEntries, libClassRootEntries, - libSourceRootEntries); + libSourceRootEntries, progress); } - fillMapWithOrderEntries(depEntries, libClassRootEntries, libSourceRootEntries); + fillMapWithOrderEntries(depEntries, libClassRootEntries, libSourceRootEntries, progress); killOrderEntryArrayDuplicates(); }