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 f223b7e9292b..5ab6d2f28065 100644 --- a/java/java-impl/src/com/intellij/codeInsight/completion/FunctionalExpressionCompletionProvider.java +++ b/java/java-impl/src/com/intellij/codeInsight/completion/FunctionalExpressionCompletionProvider.java @@ -154,9 +154,11 @@ public class FunctionalExpressionCompletionProvider extends CompletionProvider consumer = eachReturnType -> { PsiClass psiClass = PsiUtil.resolveClassInType(eachReturnType); - if (psiClass == null || !MethodReferenceResolver.canBeConstructed(psiClass)) return; + if (psiClass == null) return; if (eachReturnType.getArrayDimensions() == 0) { + if (!MethodReferenceResolver.canBeConstructed(psiClass)) return; + PsiMethod[] constructors = psiClass.getConstructors(); for (PsiMethod psiMethod : constructors) { if (isSignatureAppropriate(psiMethod, params, substitutor, 0, originalPosition)) { diff --git a/java/java-tests/testData/codeInsight/completion/smartType/AbstractArrayConstructorRef-out.java b/java/java-tests/testData/codeInsight/completion/smartType/AbstractArrayConstructorRef-out.java new file mode 100644 index 000000000000..5b19aad3fe0d --- /dev/null +++ b/java/java-tests/testData/codeInsight/completion/smartType/AbstractArrayConstructorRef-out.java @@ -0,0 +1,9 @@ +import java.util.stream.Stream; +public class Outer { + + Abstract[] foo(Stream s) { + return s.toArray(Abstract[]::new); + } +} + +abstract class Abstract {} \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/completion/smartType/AbstractArrayConstructorRef.java b/java/java-tests/testData/codeInsight/completion/smartType/AbstractArrayConstructorRef.java new file mode 100644 index 000000000000..e1409fdc0b2f --- /dev/null +++ b/java/java-tests/testData/codeInsight/completion/smartType/AbstractArrayConstructorRef.java @@ -0,0 +1,9 @@ +import java.util.stream.Stream; +public class Outer { + + Abstract[] foo(Stream s) { + return s.toArray(Ab); + } +} + +abstract class Abstract {} \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/java/codeInsight/completion/SmartType18CompletionTest.java b/java/java-tests/testSrc/com/intellij/java/codeInsight/completion/SmartType18CompletionTest.java index 6f2e20d7d527..8c7df94b7bd1 100644 --- a/java/java-tests/testSrc/com/intellij/java/codeInsight/completion/SmartType18CompletionTest.java +++ b/java/java-tests/testSrc/com/intellij/java/codeInsight/completion/SmartType18CompletionTest.java @@ -88,6 +88,7 @@ public class SmartType18CompletionTest extends LightFixtureCompletionTestCase { } public void testInnerArrayConstructorRef() { doTest(true); } + public void testAbstractArrayConstructorRef() { doTest(true); } public void testNoConstraintsWildcard() { doTest();