diff --git a/java/java-impl/src/com/intellij/codeInsight/ExpectedTypesProvider.java b/java/java-impl/src/com/intellij/codeInsight/ExpectedTypesProvider.java index 7c8bec09f9c0..e34ef180a936 100644 --- a/java/java-impl/src/com/intellij/codeInsight/ExpectedTypesProvider.java +++ b/java/java-impl/src/com/intellij/codeInsight/ExpectedTypesProvider.java @@ -1184,22 +1184,7 @@ public class ExpectedTypesProvider { } final PsiManager manager = methodCallExpr.getManager(); final JavaPsiFacade facade = JavaPsiFacade.getInstance(manager.getProject()); - final PsiMethod[] methods = myClassProvider.findDeclaredMethods(manager, reference.getReferenceName()); - LinkedHashSet psiMethods = new LinkedHashSet<>(); - for (PsiMethod m : methods) { - if (m.hasModifierProperty(PsiModifier.STATIC) || m.hasModifierProperty(PsiModifier.PRIVATE)) { - psiMethods.add(m); - } - else { - PsiMethod[] superMethods = m.findDeepestSuperMethods(); - if (superMethods.length > 0) { - psiMethods.addAll(Arrays.asList(superMethods)); - } - else { - psiMethods.add(m); - } - } - } + Set psiMethods = mapToDeepestSuperMethods(myClassProvider.findDeclaredMethods(manager, reference.getReferenceName())); Set types = new THashSet<>(); for (PsiMethod method : psiMethods) { final PsiClass aClass = method.getContainingClass(); @@ -1220,6 +1205,25 @@ public class ExpectedTypesProvider { return types.toArray(ExpectedTypeInfo.EMPTY_ARRAY); } + private static Set mapToDeepestSuperMethods(PsiMethod[] methods) { + LinkedHashSet psiMethods = new LinkedHashSet<>(); + for (PsiMethod m : methods) { + if (m.hasModifierProperty(PsiModifier.STATIC) || m.hasModifierProperty(PsiModifier.PRIVATE)) { + psiMethods.add(m); + } + else { + PsiMethod[] superMethods = m.findDeepestSuperMethods(); + if (superMethods.length > 0) { + psiMethods.addAll(Arrays.asList(superMethods)); + } + else { + psiMethods.add(m); + } + } + } + return psiMethods; + } + @NotNull private ExpectedTypeInfo[] findClassesWithDeclaredField(@NotNull PsiReferenceExpression expression) { final JavaPsiFacade facade = JavaPsiFacade.getInstance(expression.getProject()); diff --git a/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/CreateMethodFromUsageTemplateTest.groovy b/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/CreateMethodFromUsageTemplateTest.groovy index d71b9ea67fce..eb068a1c7eb1 100644 --- a/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/CreateMethodFromUsageTemplateTest.groovy +++ b/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/CreateMethodFromUsageTemplateTest.groovy @@ -282,7 +282,7 @@ public class InvalidClass { ''' } - void 'test expected types'() { + void 'test deepest super methods are included in expected info when available'() { configureFromFileText 'a.java', '''\ class A { {