diff --git a/java/java-impl/src/com/intellij/codeInsight/completion/FunctionalExpressionCompletionProvider.java b/java/java-impl/src/com/intellij/codeInsight/completion/FunctionalExpressionCompletionProvider.java index 5ab6d2f28065..95505d2f39ab 100644 --- a/java/java-impl/src/com/intellij/codeInsight/completion/FunctionalExpressionCompletionProvider.java +++ b/java/java-impl/src/com/intellij/codeInsight/completion/FunctionalExpressionCompletionProvider.java @@ -240,7 +240,7 @@ public class FunctionalExpressionCompletionProvider extends CompletionProvider result = new ArrayList<>(); final PsiType functionalInterfaceParamType = substitutor.substitute(params[0].getType()); final PsiClass paramClass = PsiUtil.resolveClassInClassTypeOnly(functionalInterfaceParamType); - if (paramClass != null && !paramClass.hasTypeParameters()) { + if (paramClass != null) { final Set visited = new HashSet<>(); for (PsiMethod psiMethod : paramClass.getAllMethods()) { PsiClass containingClass = psiMethod.getContainingClass(); PsiClass qualifierClass = containingClass != null ? containingClass : paramClass; if (visited.add(psiMethod.getName()) && !psiMethod.hasModifierProperty(PsiModifier.STATIC) && - hasAppropriateReturnType(expectedReturnType, psiMethod) && + hasAppropriateReturnType(expectedReturnType, psiMethod, substitutor) && isSignatureAppropriate(psiMethod, params, substitutor, 1, originalPosition)) { LookupElement methodRefLookupElement = createMethodRefOnClass(functionalInterfaceType, psiMethod, qualifierClass); if (prioritize && containingClass == paramClass) { @@ -296,9 +296,11 @@ public class FunctionalExpressionCompletionProvider extends CompletionProvider> stream) { + stream.map(); + } +} +""" + def items = myFixture.completeBasic() + assert items.find {LookupElementPresentation.renderElement(it).itemText.contains('Entry::getKey')} + } + void "test constructor ref"() { myFixture.configureByText "a.java", """ interface Foo9 {