mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
EA-41408 - assert: PsiWalkingState.elementStarted
This commit is contained in:
+21
-9
@@ -23,9 +23,7 @@ import com.intellij.openapi.application.ApplicationManager;
|
||||
import com.intellij.openapi.progress.ProgressIndicator;
|
||||
import com.intellij.openapi.progress.ProgressIndicatorProvider;
|
||||
import com.intellij.openapi.util.Computable;
|
||||
import com.intellij.psi.JavaRecursiveElementWalkingVisitor;
|
||||
import com.intellij.psi.PsiClass;
|
||||
import com.intellij.psi.PsiElement;
|
||||
import com.intellij.psi.*;
|
||||
import com.intellij.psi.search.GlobalSearchScope;
|
||||
import com.intellij.psi.search.LocalSearchScope;
|
||||
import com.intellij.psi.search.PsiShortNamesCache;
|
||||
@@ -111,11 +109,10 @@ public class AllClassesSearchExecutor implements QueryExecutor<PsiClass, AllClas
|
||||
return true;
|
||||
}
|
||||
|
||||
private static boolean processScopeRootForAllClasses(PsiElement scopeRoot, final Processor<PsiClass> processor) {
|
||||
if (scopeRoot == null) return true;
|
||||
final boolean[] stopped = new boolean[]{false};
|
||||
private static boolean processScopeRootForAllClasses(@NotNull PsiElement scopeRoot, final Processor<PsiClass> processor) {
|
||||
final boolean[] stopped = {false};
|
||||
|
||||
scopeRoot.accept(new JavaRecursiveElementWalkingVisitor() {
|
||||
JavaElementVisitor visitor = scopeRoot instanceof PsiCompiledElement ? new JavaRecursiveElementVisitor() {
|
||||
@Override
|
||||
public void visitElement(PsiElement element) {
|
||||
if (!stopped[0]) {
|
||||
@@ -123,11 +120,26 @@ public class AllClassesSearchExecutor implements QueryExecutor<PsiClass, AllClas
|
||||
}
|
||||
}
|
||||
|
||||
@Override public void visitClass(PsiClass aClass) {
|
||||
@Override
|
||||
public void visitClass(PsiClass aClass) {
|
||||
stopped[0] = !processor.process(aClass);
|
||||
super.visitClass(aClass);
|
||||
}
|
||||
});
|
||||
} : new JavaRecursiveElementWalkingVisitor() {
|
||||
@Override
|
||||
public void visitElement(PsiElement element) {
|
||||
if (!stopped[0]) {
|
||||
super.visitElement(element);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void visitClass(PsiClass aClass) {
|
||||
stopped[0] = !processor.process(aClass);
|
||||
super.visitClass(aClass);
|
||||
}
|
||||
};
|
||||
scopeRoot.accept(visitor);
|
||||
|
||||
return !stopped[0];
|
||||
}
|
||||
|
||||
@@ -23,7 +23,6 @@ import com.intellij.psi.PsiElement;
|
||||
import com.intellij.psi.PsiFile;
|
||||
import com.intellij.psi.util.PsiTreeUtil;
|
||||
import com.intellij.psi.util.PsiUtilCore;
|
||||
import com.intellij.util.containers.ContainerUtil;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
@@ -35,6 +34,7 @@ import java.util.Set;
|
||||
public class LocalSearchScope extends SearchScope {
|
||||
private static final Logger LOG = Logger.getInstance("#com.intellij.psi.search.LocalSearchScope");
|
||||
|
||||
@NotNull
|
||||
private final PsiElement[] myScope;
|
||||
private final boolean myIgnoreInjectedPsi;
|
||||
|
||||
@@ -67,8 +67,10 @@ public class LocalSearchScope extends SearchScope {
|
||||
LOG.assertTrue(element != null, "null element");
|
||||
LOG.assertTrue(element.getContainingFile() != null, element.getClass().getName());
|
||||
if (element instanceof PsiFile) {
|
||||
List<PsiFile> files = ((PsiFile)element).getViewProvider().getAllFiles();
|
||||
ContainerUtil.addAll(localScope, files);
|
||||
for (PsiFile file : ((PsiFile)element).getViewProvider().getAllFiles()) {
|
||||
if (file == null) throw new IllegalArgumentException("file "+element+" returned null in its getAllFiles()");
|
||||
localScope.add(file);
|
||||
}
|
||||
}
|
||||
else if (element.getTextRange() != null){
|
||||
localScope.add(element);
|
||||
@@ -86,6 +88,7 @@ public class LocalSearchScope extends SearchScope {
|
||||
return myDisplayName == null ? super.getDisplayName() : myDisplayName;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public PsiElement[] getScope() {
|
||||
return myScope;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user