EA-41408 - assert: PsiWalkingState.elementStarted

This commit is contained in:
Alexey Kudravtsev
2013-06-26 10:43:34 +04:00
parent e9b7d1f151
commit aa2f862dc4
2 changed files with 27 additions and 12 deletions
@@ -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;
}