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 1f8ef8a2c231..d2e5db9b75a9 100644 --- a/java/java-impl/src/com/intellij/codeInsight/completion/JavaCompletionContributor.java +++ b/java/java-impl/src/com/intellij/codeInsight/completion/JavaCompletionContributor.java @@ -225,6 +225,12 @@ public class JavaCompletionContributor extends CompletionContributor { new TypeArgumentCompletionProvider(false, inheritors).addCompletions(parameters, new ProcessingContext(), result); } + if (JavaSmartCompletionContributor.LAMBDA.accepts(parameters.getPosition())) { + for (LookupElement element : LambdaCompletionProvider.getLambdaVariants(parameters)) { + result.addElement(PrioritizedLookupElement.withPriority(element, 1)); + } + } + PrefixMatcher matcher = result.getPrefixMatcher(); if (JavaSmartCompletionContributor.AFTER_NEW.accepts(position)) { new JavaInheritorsGetter(ConstructorInsertHandler.BASIC_INSTANCE).generateVariants(parameters, matcher, inheritors); @@ -247,10 +253,6 @@ public class JavaCompletionContributor extends CompletionContributor { JavaGenerateMemberCompletionContributor.fillCompletionVariants(parameters, result); - if (JavaSmartCompletionContributor.LAMBDA.accepts(parameters.getPosition())) { - new LambdaCompletionProvider().addCompletions(parameters, new ProcessingContext(), result); - } - addAllClasses(parameters, result, inheritors); final PsiElement parent = position.getParent(); diff --git a/java/java-impl/src/com/intellij/codeInsight/completion/LambdaCompletionProvider.java b/java/java-impl/src/com/intellij/codeInsight/completion/LambdaCompletionProvider.java index 4fd7df6c7e2e..51990eafa3de 100644 --- a/java/java-impl/src/com/intellij/codeInsight/completion/LambdaCompletionProvider.java +++ b/java/java-impl/src/com/intellij/codeInsight/completion/LambdaCompletionProvider.java @@ -31,8 +31,12 @@ import com.intellij.psi.impl.source.resolve.graphInference.FunctionalInterfacePa import com.intellij.psi.util.PsiUtil; import com.intellij.util.Function; import com.intellij.util.ProcessingContext; +import com.intellij.util.containers.ContainerUtil; import org.jetbrains.annotations.NotNull; +import java.util.Collections; +import java.util.List; + /** * User: anna */ @@ -41,9 +45,14 @@ public class LambdaCompletionProvider extends CompletionProvider getLambdaVariants(@NotNull CompletionParameters parameters) { + if (!PsiUtil.isLanguageLevel8OrHigher(parameters.getOriginalFile())) return Collections.emptyList(); + + List result = ContainerUtil.newArrayList(); + for (ExpectedTypeInfo expectedType : JavaSmartCompletionContributor.getExpectedTypes(parameters)) { final PsiType defaultType = expectedType.getDefaultType(); if (LambdaUtil.isFunctionalType(defaultType)) { final PsiType functionalInterfaceType = FunctionalInterfaceParameterizationUtil.getGroundTargetType(defaultType); @@ -80,10 +89,11 @@ public class LambdaCompletionProvider extends CompletionProvider "); } }); - result.addElement(builder.withAutoCompletionPolicy(AutoCompletionPolicy.NEVER_AUTOCOMPLETE)); + result.add(builder.withAutoCompletionPolicy(AutoCompletionPolicy.NEVER_AUTOCOMPLETE)); } } } + return result; } private static String getParamName(PsiParameter param, JavaCodeStyleManager javaCodeStyleManager, PsiElement originalPosition) { diff --git a/java/java-tests/testSrc/com/intellij/codeInsight/daemon/lambda/Normal8CompletionTest.groovy b/java/java-tests/testSrc/com/intellij/codeInsight/daemon/lambda/Normal8CompletionTest.groovy index 1e55eb39db94..135fc3a6bf47 100644 --- a/java/java-tests/testSrc/com/intellij/codeInsight/daemon/lambda/Normal8CompletionTest.groovy +++ b/java/java-tests/testSrc/com/intellij/codeInsight/daemon/lambda/Normal8CompletionTest.groovy @@ -71,7 +71,7 @@ class Test { } }""" def items = myFixture.completeBasic() - assert items.find { LookupElementPresentation.renderElement(it).itemText == 'x -> {}' } + assert LookupElementPresentation.renderElement(items[0]).itemText == 'x -> {}' } }