mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
IDEA-COMMUNITY-CR-1272
This commit is contained in:
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user