From d970993b430caea3797f6fc8de2f5dc8a4a6c621 Mon Sep 17 00:00:00 2001 From: peter Date: Tue, 24 Apr 2018 15:29:05 +0200 Subject: [PATCH] java completion: suggest AbstractClass::new[] (IDEA-188431) --- .../FunctionalExpressionCompletionProvider.java | 4 +++- .../smartType/AbstractArrayConstructorRef-out.java | 9 +++++++++ .../smartType/AbstractArrayConstructorRef.java | 9 +++++++++ .../completion/SmartType18CompletionTest.java | 1 + 4 files changed, 22 insertions(+), 1 deletion(-) create mode 100644 java/java-tests/testData/codeInsight/completion/smartType/AbstractArrayConstructorRef-out.java create mode 100644 java/java-tests/testData/codeInsight/completion/smartType/AbstractArrayConstructorRef.java 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();