diff --git a/java/java-psi-api/src/com/intellij/psi/PsiElementFinder.java b/java/java-psi-api/src/com/intellij/psi/PsiElementFinder.java index b33600944ffa..9de12bd4dfec 100644 --- a/java/java-psi-api/src/com/intellij/psi/PsiElementFinder.java +++ b/java/java-psi-api/src/com/intellij/psi/PsiElementFinder.java @@ -16,11 +16,11 @@ package com.intellij.psi; import com.intellij.openapi.extensions.ExtensionPointName; +import com.intellij.openapi.util.Condition; import com.intellij.psi.search.GlobalSearchScope; import com.intellij.util.Processor; import com.intellij.util.SmartList; import com.intellij.util.containers.ContainerUtil; -import com.intellij.util.containers.Predicate; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -125,7 +125,7 @@ public abstract class PsiElementFinder { * @since 14.1 */ @Nullable - public Predicate getPackageFilesFilter(@NotNull PsiPackage psiPackage, @NotNull GlobalSearchScope scope) { + public Condition getPackageFilesFilter(@NotNull PsiPackage psiPackage, @NotNull GlobalSearchScope scope) { return null; } diff --git a/java/java-psi-impl/src/com/intellij/psi/impl/JavaPsiFacadeImpl.java b/java/java-psi-impl/src/com/intellij/psi/impl/JavaPsiFacadeImpl.java index a99550bad82c..11a21c0d6161 100644 --- a/java/java-psi-impl/src/com/intellij/psi/impl/JavaPsiFacadeImpl.java +++ b/java/java-psi-impl/src/com/intellij/psi/impl/JavaPsiFacadeImpl.java @@ -20,6 +20,8 @@ import com.intellij.openapi.progress.ProgressIndicatorProvider; import com.intellij.openapi.project.DumbService; import com.intellij.openapi.project.Project; import com.intellij.openapi.util.Comparing; +import com.intellij.openapi.util.Condition; +import com.intellij.openapi.util.Conditions; import com.intellij.openapi.util.text.StringUtil; import com.intellij.openapi.vfs.VirtualFileFilter; import com.intellij.psi.*; @@ -35,12 +37,9 @@ import com.intellij.util.ConcurrencyUtil; import com.intellij.util.Processor; import com.intellij.util.SmartList; import com.intellij.util.containers.ContainerUtil; -import com.intellij.util.containers.HashMap; -import com.intellij.util.containers.Predicate; import com.intellij.util.messages.MessageBus; import gnu.trove.THashSet; import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.TestOnly; import java.util.*; @@ -243,49 +242,27 @@ public class JavaPsiFacadeImpl extends JavaPsiFacadeEx { return result == null ? PsiClass.EMPTY_ARRAY : result.toArray(new PsiClass[result.size()]); } - private static class AndPredicate implements Predicate { - private final List> myComponents = new SmartList>(); - - public AndPredicate(Predicate filter1, Predicate filter2) { - myComponents.add(filter1); - myComponents.add(filter2); - } - - @Override - public boolean apply(@Nullable T input) { - for (Predicate component : myComponents) { - if (!component.apply(input)) { - return false; - } - } - return true; - } - } - @NotNull public PsiFile[] getPackageFiles(@NotNull PsiPackage psiPackage, @NotNull GlobalSearchScope scope) { - Predicate filter = null; + Condition filter = null; for (PsiElementFinder finder : filteredFinders()) { - Predicate finderFilter = finder.getPackageFilesFilter(psiPackage, scope); + Condition finderFilter = finder.getPackageFilesFilter(psiPackage, scope); if (finderFilter != null) { if (filter == null) { filter = finderFilter; } - else if (filter instanceof AndPredicate) { - ((AndPredicate) filter).myComponents.add(finderFilter); - } else { - filter = new AndPredicate(filter, finderFilter); + filter = Conditions.and(filter, finderFilter); } } } - Set result = new HashSet(); + Set result = new LinkedHashSet(); PsiDirectory[] directories = psiPackage.getDirectories(scope); for (PsiDirectory directory : directories) { for (PsiFile file : directory.getFiles()) { - if (filter == null || filter.apply(file)) { + if (filter == null || filter.value(file)) { result.add(file); } } diff --git a/plugins/coverage/src/com/intellij/coverage/view/JavaCoverageViewExtension.java b/plugins/coverage/src/com/intellij/coverage/view/JavaCoverageViewExtension.java index 2d858e573247..569424f11032 100644 --- a/plugins/coverage/src/com/intellij/coverage/view/JavaCoverageViewExtension.java +++ b/plugins/coverage/src/com/intellij/coverage/view/JavaCoverageViewExtension.java @@ -219,7 +219,9 @@ public class JavaCoverageViewExtension extends CoverageViewExtension { })) { final PsiPackage[] subPackages = ApplicationManager.getApplication().runReadAction(new Computable() { public PsiPackage[] compute() { - return psiPackage.getSubPackages(mySuitesBundle.getSearchScope(node.getProject())); + return psiPackage.isValid() + ? psiPackage.getSubPackages(mySuitesBundle.getSearchScope(node.getProject())) + : PsiPackage.EMPTY_ARRAY; } }); for (PsiPackage subPackage: subPackages) { @@ -228,7 +230,9 @@ public class JavaCoverageViewExtension extends CoverageViewExtension { final PsiFile[] childFiles = ApplicationManager.getApplication().runReadAction(new Computable() { public PsiFile[] compute() { - return psiPackage.getFiles(mySuitesBundle.getSearchScope(node.getProject())); + return psiPackage.isValid() + ? psiPackage.getFiles(mySuitesBundle.getSearchScope(node.getProject())) + : PsiFile.EMPTY_ARRAY; } }); for (PsiFile file : childFiles) {