IDEA-COMMUNITY-CR-1272

This commit is contained in:
Dmitry Jemerov
2014-12-29 12:19:19 +01:00
parent 216950ebfc
commit 4ffc5b6fb4
3 changed files with 15 additions and 34 deletions
@@ -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<PsiFile> getPackageFilesFilter(@NotNull PsiPackage psiPackage, @NotNull GlobalSearchScope scope) {
public Condition<PsiFile> getPackageFilesFilter(@NotNull PsiPackage psiPackage, @NotNull GlobalSearchScope scope) {
return null;
}
@@ -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<T> implements Predicate<T> {
private final List<Predicate<T>> myComponents = new SmartList<Predicate<T>>();
public AndPredicate(Predicate<T> filter1, Predicate<T> filter2) {
myComponents.add(filter1);
myComponents.add(filter2);
}
@Override
public boolean apply(@Nullable T input) {
for (Predicate<T> component : myComponents) {
if (!component.apply(input)) {
return false;
}
}
return true;
}
}
@NotNull
public PsiFile[] getPackageFiles(@NotNull PsiPackage psiPackage, @NotNull GlobalSearchScope scope) {
Predicate<PsiFile> filter = null;
Condition<PsiFile> filter = null;
for (PsiElementFinder finder : filteredFinders()) {
Predicate<PsiFile> finderFilter = finder.getPackageFilesFilter(psiPackage, scope);
Condition<PsiFile> finderFilter = finder.getPackageFilesFilter(psiPackage, scope);
if (finderFilter != null) {
if (filter == null) {
filter = finderFilter;
}
else if (filter instanceof AndPredicate) {
((AndPredicate<PsiFile>) filter).myComponents.add(finderFilter);
}
else {
filter = new AndPredicate<PsiFile>(filter, finderFilter);
filter = Conditions.and(filter, finderFilter);
}
}
}
Set<PsiFile> result = new HashSet<PsiFile>();
Set<PsiFile> result = new LinkedHashSet<PsiFile>();
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);
}
}
@@ -219,7 +219,9 @@ public class JavaCoverageViewExtension extends CoverageViewExtension {
})) {
final PsiPackage[] subPackages = ApplicationManager.getApplication().runReadAction(new Computable<PsiPackage[]>() {
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<PsiFile[]>() {
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) {