diff --git a/java/java-impl/src/com/intellij/psi/NonClasspathResolveScopeEnlarger.java b/java/java-impl/src/com/intellij/psi/NonClasspathResolveScopeEnlarger.java index 01114788ac9d..b7b5a05aef28 100644 --- a/java/java-impl/src/com/intellij/psi/NonClasspathResolveScopeEnlarger.java +++ b/java/java-impl/src/com/intellij/psi/NonClasspathResolveScopeEnlarger.java @@ -5,7 +5,7 @@ import com.intellij.openapi.extensions.Extensions; import com.intellij.openapi.project.Project; import com.intellij.openapi.vfs.VfsUtil; import com.intellij.openapi.vfs.VirtualFile; -import com.intellij.psi.search.NonClasspathDirectoryScope; +import com.intellij.psi.search.NonClasspathDirectoriesScope; import com.intellij.psi.search.SearchScope; import org.jetbrains.annotations.NotNull; @@ -25,7 +25,7 @@ public class NonClasspathResolveScopeEnlarger extends ResolveScopeEnlarger { final List roots = ((NonClasspathClassFinder)finder).getClassRoots(); for (VirtualFile root : roots) { if (VfsUtil.isAncestor(root, file, true)) { - return NonClasspathDirectoryScope.compose(roots); + return NonClasspathDirectoriesScope.compose(roots); } } } diff --git a/java/java-psi-impl/src/com/intellij/psi/NonClasspathClassFinder.java b/java/java-psi-impl/src/com/intellij/psi/NonClasspathClassFinder.java index 2d11fc963cec..59a4e10d40fe 100644 --- a/java/java-psi-impl/src/com/intellij/psi/NonClasspathClassFinder.java +++ b/java/java-psi-impl/src/com/intellij/psi/NonClasspathClassFinder.java @@ -23,7 +23,7 @@ import com.intellij.openapi.util.Computable; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.psi.impl.file.PsiPackageImpl; import com.intellij.psi.search.GlobalSearchScope; -import com.intellij.psi.search.NonClasspathDirectoryScope; +import com.intellij.psi.search.NonClasspathDirectoriesScope; import com.intellij.util.ArrayUtil; import com.intellij.util.Processor; import com.intellij.util.containers.ContainerUtil; @@ -252,7 +252,7 @@ public abstract class NonClasspathClassFinder extends PsiElementFinder { GlobalSearchScope scope = base; for (PsiElementFinder finder : Extensions.getExtensions(EP_NAME, project)) { if (finder instanceof NonClasspathClassFinder) { - scope = scope.uniteWith(NonClasspathDirectoryScope.compose(((NonClasspathClassFinder)finder).getClassRoots())); + scope = scope.uniteWith(NonClasspathDirectoriesScope.compose(((NonClasspathClassFinder)finder).getClassRoots())); } } return scope; diff --git a/platform/core-api/src/com/intellij/psi/search/NonClasspathDirectoryScope.java b/platform/core-api/src/com/intellij/psi/search/NonClasspathDirectoriesScope.java similarity index 70% rename from platform/core-api/src/com/intellij/psi/search/NonClasspathDirectoryScope.java rename to platform/core-api/src/com/intellij/psi/search/NonClasspathDirectoriesScope.java index 069017dc7b5b..0cf15e6970c2 100644 --- a/platform/core-api/src/com/intellij/psi/search/NonClasspathDirectoryScope.java +++ b/platform/core-api/src/com/intellij/psi/search/NonClasspathDirectoriesScope.java @@ -19,18 +19,21 @@ package com.intellij.psi.search; import com.intellij.openapi.module.Module; import com.intellij.openapi.vfs.VfsUtilCore; import com.intellij.openapi.vfs.VirtualFile; +import com.intellij.util.containers.ContainerUtil; import org.jetbrains.annotations.NotNull; +import java.util.Collection; import java.util.List; +import java.util.Set; /** * @author peter */ -public class NonClasspathDirectoryScope extends GlobalSearchScope { - private final VirtualFile myRoot; +public class NonClasspathDirectoriesScope extends GlobalSearchScope { + private final Set myRoots; - public NonClasspathDirectoryScope(@NotNull VirtualFile root) { - myRoot = root; + public NonClasspathDirectoriesScope(@NotNull Collection roots) { + myRoots = ContainerUtil.newHashSet(roots); } @Override @@ -44,16 +47,12 @@ public class NonClasspathDirectoryScope extends GlobalSearchScope { return EMPTY_SCOPE; } - GlobalSearchScope scope = new NonClasspathDirectoryScope(roots.get(0)); - for (int i = 1; i < roots.size(); i++) { - scope = scope.uniteWith(new NonClasspathDirectoryScope(roots.get(i))); - } - return scope; + return new NonClasspathDirectoriesScope(roots); } @Override public boolean contains(@NotNull VirtualFile file) { - return VfsUtilCore.isAncestor(myRoot, file, false); + return VfsUtilCore.isUnder(file, myRoots); } @Override @@ -74,11 +73,11 @@ public class NonClasspathDirectoryScope extends GlobalSearchScope { @Override public boolean equals(Object o) { if (this == o) return true; - if (!(o instanceof NonClasspathDirectoryScope)) return false; + if (!(o instanceof NonClasspathDirectoriesScope)) return false; - NonClasspathDirectoryScope that = (NonClasspathDirectoryScope)o; + NonClasspathDirectoriesScope that = (NonClasspathDirectoriesScope)o; - if (!myRoot.equals(that.myRoot)) return false; + if (!myRoots.equals(that.myRoots)) return false; return true; } @@ -86,7 +85,7 @@ public class NonClasspathDirectoryScope extends GlobalSearchScope { @Override public int hashCode() { int result = super.hashCode(); - result = 31 * result + myRoot.hashCode(); + result = 31 * result + myRoots.hashCode(); return result; } } diff --git a/plugins/gradle/src/org/jetbrains/plugins/gradle/config/GradleBuildClasspathResolveScopeEnlarger.java b/plugins/gradle/src/org/jetbrains/plugins/gradle/config/GradleBuildClasspathResolveScopeEnlarger.java index ccfd32c62da8..1b0bb8f19f7b 100644 --- a/plugins/gradle/src/org/jetbrains/plugins/gradle/config/GradleBuildClasspathResolveScopeEnlarger.java +++ b/plugins/gradle/src/org/jetbrains/plugins/gradle/config/GradleBuildClasspathResolveScopeEnlarger.java @@ -21,7 +21,7 @@ import com.intellij.openapi.vfs.VfsUtilCore; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.psi.PsiElementFinder; import com.intellij.psi.ResolveScopeEnlarger; -import com.intellij.psi.search.NonClasspathDirectoryScope; +import com.intellij.psi.search.NonClasspathDirectoriesScope; import com.intellij.psi.search.SearchScope; import org.jetbrains.annotations.NotNull; import org.jetbrains.plugins.groovy.GroovyFileType; @@ -42,7 +42,7 @@ public class GradleBuildClasspathResolveScopeEnlarger extends ResolveScopeEnlarg final List roots = gradleClassFinder.getClassRoots(); for (VirtualFile root : roots) { if (VfsUtilCore.isAncestor(root, file, true)) { - return NonClasspathDirectoryScope.compose(roots); + return NonClasspathDirectoriesScope.compose(roots); } } } diff --git a/plugins/gradle/src/org/jetbrains/plugins/gradle/config/GradleScriptType.java b/plugins/gradle/src/org/jetbrains/plugins/gradle/config/GradleScriptType.java index 05771091bebf..61783c1453b8 100644 --- a/plugins/gradle/src/org/jetbrains/plugins/gradle/config/GradleScriptType.java +++ b/plugins/gradle/src/org/jetbrains/plugins/gradle/config/GradleScriptType.java @@ -41,7 +41,7 @@ import com.intellij.psi.PsiElement; import com.intellij.psi.PsiFile; import com.intellij.psi.PsiManager; import com.intellij.psi.search.GlobalSearchScope; -import com.intellij.psi.search.NonClasspathDirectoryScope; +import com.intellij.psi.search.NonClasspathDirectoriesScope; import icons.GradleIcons; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -52,7 +52,6 @@ import org.jetbrains.plugins.gradle.service.resolve.GradleResolverUtil; import org.jetbrains.plugins.gradle.util.GradleConstants; import org.jetbrains.plugins.groovy.config.GroovyConfigUtils; import org.jetbrains.plugins.groovy.extensions.GroovyRunnableScriptType; -import org.jetbrains.plugins.groovy.extensions.GroovyScriptType; import org.jetbrains.plugins.groovy.lang.psi.GroovyFile; import org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.GrApplicationStatement; import org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.GrExpression; @@ -332,10 +331,7 @@ public class GradleScriptType extends GroovyRunnableScriptType { files = GradleBuildClasspathManager.getInstance(file.getProject()).getModuleClasspathEntries(modulePath); - for (final VirtualFile root : files) { - result = result.uniteWith(new NonClasspathDirectoryScope(root)); - } - result = new ExternalModuleBuildGlobalSearchScope(module.getProject(), result, modulePath); + result = new ExternalModuleBuildGlobalSearchScope(module.getProject(), result.uniteWith(new NonClasspathDirectoriesScope(files)), modulePath); } return result; } diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/gant/GantScriptType.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/gant/GantScriptType.java index adda0faf476f..86e7101a3788 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/gant/GantScriptType.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/gant/GantScriptType.java @@ -20,12 +20,12 @@ import com.intellij.compiler.options.CompileStepBeforeRunNoErrorCheck; import com.intellij.execution.Location; import com.intellij.execution.RunManagerEx; import com.intellij.openapi.module.Module; -import com.intellij.openapi.module.ModuleUtil; +import com.intellij.openapi.module.ModuleUtilCore; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.psi.PsiElement; import com.intellij.psi.PsiFile; import com.intellij.psi.search.GlobalSearchScope; -import com.intellij.psi.search.NonClasspathDirectoryScope; +import com.intellij.psi.search.NonClasspathDirectoriesScope; import icons.JetgroovyIcons; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; @@ -104,7 +104,7 @@ public class GantScriptType extends GroovyRunnableScriptType { } public static List additionalScopeFiles(@NotNull GroovyFile file) { - final Module module = ModuleUtil.findModuleForPsiElement(file); + final Module module = ModuleUtilCore.findModuleForPsiElement(file); if (module != null) { final String sdkHome = GantUtils.getSdkHomeFromClasspath(module); if (sdkHome != null) { @@ -123,10 +123,6 @@ public class GantScriptType extends GroovyRunnableScriptType { @Override public GlobalSearchScope patchResolveScope(@NotNull GroovyFile file, @NotNull GlobalSearchScope baseScope) { - GlobalSearchScope result = baseScope; - for (final VirtualFile root : additionalScopeFiles(file)) { - result = result.uniteWith(new NonClasspathDirectoryScope(root)); - } - return result; + return baseScope.uniteWith(new NonClasspathDirectoriesScope(additionalScopeFiles(file))); } }