From 2ac4ed9c483c9a99755644a26119e53d035237dc Mon Sep 17 00:00:00 2001 From: peter Date: Fri, 27 Jan 2017 14:51:39 +0100 Subject: [PATCH] IDEA-167160 Completion doesn't suggest types for parameters in lambdas in Java --- .../completion/JavaCompletionContributor.java | 3 +++ .../SuggestClassNamesForLambdaParameterTypes.java | 13 +++++++++++++ ...gestClassNamesForLambdaParameterTypes_after.java | 13 +++++++++++++ .../completion/NormalCompletionTest.groovy | 2 ++ 4 files changed, 31 insertions(+) create mode 100644 java/java-tests/testData/codeInsight/completion/normal/SuggestClassNamesForLambdaParameterTypes.java create mode 100644 java/java-tests/testData/codeInsight/completion/normal/SuggestClassNamesForLambdaParameterTypes_after.java diff --git a/java/java-impl/src/com/intellij/codeInsight/completion/JavaCompletionContributor.java b/java/java-impl/src/com/intellij/codeInsight/completion/JavaCompletionContributor.java index 6121f993f709..be3d41caf03b 100644 --- a/java/java-impl/src/com/intellij/codeInsight/completion/JavaCompletionContributor.java +++ b/java/java-impl/src/com/intellij/codeInsight/completion/JavaCompletionContributor.java @@ -773,6 +773,9 @@ public class JavaCompletionContributor extends CompletionContributor { return true; } } + if (psiElement(PsiIdentifier.class).withParent(psiParameter()).accepts(file.findElementAt(startOffset))) { + return true; + } HighlighterIterator iterator = ((EditorEx)editor).getHighlighter().createIterator(startOffset); if (iterator.atEnd()) return false; diff --git a/java/java-tests/testData/codeInsight/completion/normal/SuggestClassNamesForLambdaParameterTypes.java b/java/java-tests/testData/codeInsight/completion/normal/SuggestClassNamesForLambdaParameterTypes.java new file mode 100644 index 000000000000..8f917f14497d --- /dev/null +++ b/java/java-tests/testData/codeInsight/completion/normal/SuggestClassNamesForLambdaParameterTypes.java @@ -0,0 +1,13 @@ +package abcdef; + +import java.util.List; + +/** + * Created by peter on 1/27/17. ${FFF} + */ +public class Foo { + void foo() { + List strings = null; + strings.stream().anyMatch((ChSeqx) -> x.charAt(0) == 'a'); + } +} diff --git a/java/java-tests/testData/codeInsight/completion/normal/SuggestClassNamesForLambdaParameterTypes_after.java b/java/java-tests/testData/codeInsight/completion/normal/SuggestClassNamesForLambdaParameterTypes_after.java new file mode 100644 index 000000000000..e3f93c53eec1 --- /dev/null +++ b/java/java-tests/testData/codeInsight/completion/normal/SuggestClassNamesForLambdaParameterTypes_after.java @@ -0,0 +1,13 @@ +package abcdef; + +import java.util.List; + +/** + * Created by peter on 1/27/17. ${FFF} + */ +public class Foo { + void foo() { + List strings = null; + strings.stream().anyMatch((CharSequencex) -> x.charAt(0) == 'a'); + } +} diff --git a/java/java-tests/testSrc/com/intellij/codeInsight/completion/NormalCompletionTest.groovy b/java/java-tests/testSrc/com/intellij/codeInsight/completion/NormalCompletionTest.groovy index 477be032ea96..45c6df631011 100644 --- a/java/java-tests/testSrc/com/intellij/codeInsight/completion/NormalCompletionTest.groovy +++ b/java/java-tests/testSrc/com/intellij/codeInsight/completion/NormalCompletionTest.groovy @@ -1743,4 +1743,6 @@ class Bar { assert myFixture.lookupElements[0].object == uClass } + void testSuggestClassNamesForLambdaParameterTypes() { doTest('\n') } + }