diff --git a/java/java-psi-impl/src/com/intellij/psi/impl/PsiSuperMethodImplUtil.java b/java/java-psi-impl/src/com/intellij/psi/impl/PsiSuperMethodImplUtil.java index e5ae3926e4ca..990bd2798563 100644 --- a/java/java-psi-impl/src/com/intellij/psi/impl/PsiSuperMethodImplUtil.java +++ b/java/java-psi-impl/src/com/intellij/psi/impl/PsiSuperMethodImplUtil.java @@ -24,6 +24,7 @@ import com.intellij.openapi.util.Pair; import com.intellij.psi.*; import com.intellij.psi.impl.source.HierarchicalMethodSignatureImpl; import com.intellij.psi.impl.source.PsiClassImpl; +import com.intellij.psi.search.GlobalSearchScope; import com.intellij.psi.search.searches.DeepestSuperMethodsSearch; import com.intellij.psi.search.searches.SuperMethodsSearch; import com.intellij.psi.util.*; @@ -45,7 +46,7 @@ public class PsiSuperMethodImplUtil { @NotNull @Override public Map fun(PsiClass dom) { - return buildMethodHierarchy(dom, null, PsiSubstitutor.EMPTY, true, new THashSet(), false); + return buildMethodHierarchy(dom, null, PsiSubstitutor.EMPTY, true, new THashSet(), false, dom.getResolveScope()); } }); private static final PsiCacheKey>, PsiClass> SIGNATURES_BY_NAME_KEY = PsiCacheKey @@ -56,7 +57,7 @@ public class PsiSuperMethodImplUtil { @Nullable @Override protected Map create(String methodName) { - return buildMethodHierarchy(psiClass, methodName, PsiSubstitutor.EMPTY, true, new THashSet(), false); + return buildMethodHierarchy(psiClass, methodName, PsiSubstitutor.EMPTY, true, new THashSet(), false, psiClass.getResolveScope()); } }; } @@ -131,7 +132,8 @@ public class PsiSuperMethodImplUtil { @NotNull PsiSubstitutor substitutor, final boolean includePrivates, @NotNull final Set visited, - boolean isInRawContext) { + boolean isInRawContext, + GlobalSearchScope resolveScope) { ProgressManager.checkCanceled(); Map result = new LinkedHashMap(); final Map> sameParameterErasureMethods = new THashMap>(MethodSignatureUtil.METHOD_PARAMETERS_ERASURE_EQUALITY); @@ -189,6 +191,8 @@ public class PsiSuperMethodImplUtil { } for (PsiClassType superType : aClass.getSuperTypes()) { + superType = PsiClassImplUtil.correctType(superType, resolveScope); + if (superType == null) continue; //super class doesn't belong to resolve scope PsiClassType.ClassResolveResult superTypeResolveResult = superType.resolveGenerics(); PsiClass superClass = superTypeResolveResult.getElement(); if (superClass == null) continue; @@ -197,7 +201,7 @@ public class PsiSuperMethodImplUtil { PsiSubstitutor finalSubstitutor = obtainFinalSubstitutor(superClass, superSubstitutor, substitutor, isInRawContext); final boolean isInRawContextSuper = (isInRawContext || PsiUtil.isRawSubstitutor(superClass, superSubstitutor)) && superClass.getTypeParameters().length != 0; - Map superResult = buildMethodHierarchy(superClass, nameHint, finalSubstitutor, false, visited, isInRawContextSuper); + Map superResult = buildMethodHierarchy(superClass, nameHint, finalSubstitutor, false, visited, isInRawContextSuper, resolveScope); visited.remove(superClass); List> flattened = new ArrayList>();