java: avoid recursion prevention when checking imported vs inherited superclass (IDEA-67385, IDEA-228814)

GitOrigin-RevId: 2a246ced1d66c4c3c9df71dcd51a491b471a744c
This commit is contained in:
Peter Gromov
2019-12-16 19:36:07 +00:00
committed by intellij-monorepo-bot
parent b36538cfa5
commit 4b12b7a4e3
4 changed files with 5 additions and 3 deletions
@@ -190,6 +190,9 @@ public class ClassResolverProcessor implements PsiScopeProcessor, NameHint, Elem
private boolean isAmbiguousInherited(PsiClass containingClass1) {
PsiClass psiClass = PsiTreeUtil.getContextOfType(myPlace, PsiClass.class);
if (psiClass instanceof PsiAnonymousClass && myPlace == ((PsiAnonymousClass)psiClass).getBaseClassReference()) {
psiClass = PsiTreeUtil.getContextOfType(psiClass, PsiClass.class);
}
while (psiClass != null) {
if (psiClass.isInheritor(containingClass1, false)) {
return true;
@@ -1,5 +1,5 @@
package p;
public class BaseImpl implements Base {
static class Inner implements Inner { }
static class Inner implements Base.Inner { }
}
@@ -1,5 +1,5 @@
package p;
public class BaseImpl implements Base {
static class Inner implements BaseImpl.Inner { }
static class Inner implements Base.Inner { }
}
@@ -388,7 +388,6 @@ public class RecursionManager {
"com.intellij.psi.impl.source.tree.java.MethodReferenceResolver.resolve(",
"com.intellij.psi.impl.source.resolve.graphInference.PsiPolyExpressionUtil.isPolyExpression(",
// inner class imports
"com.intellij.psi.impl.source.resolve.ClassResolverProcessor.isAmbiguousInherited(",
"com.intellij.psi.impl.source.PsiJavaFileBaseImpl.processDeclarations(",
"com.intellij.psi.impl.PsiClassImplUtil.getScopeCorrectedSuperTypes(",
"com.intellij.psi.impl.source.PsiImportStaticReferenceElementImpl.multiResolve(",