mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
prioritize lambdas in basic code completion (IDEA-135296)
This commit is contained in:
+6
-4
@@ -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();
|
||||
|
||||
+14
-4
@@ -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<CompletionParam
|
||||
protected void addCompletions(@NotNull CompletionParameters parameters,
|
||||
ProcessingContext context,
|
||||
@NotNull CompletionResultSet result) {
|
||||
if (!PsiUtil.isLanguageLevel8OrHigher(parameters.getOriginalFile())) return;
|
||||
final ExpectedTypeInfo[] expectedTypes = JavaSmartCompletionContributor.getExpectedTypes(parameters);
|
||||
for (ExpectedTypeInfo expectedType : expectedTypes) {
|
||||
result.addAllElements(getLambdaVariants(parameters));
|
||||
}
|
||||
|
||||
static List<LookupElement> getLambdaVariants(@NotNull CompletionParameters parameters) {
|
||||
if (!PsiUtil.isLanguageLevel8OrHigher(parameters.getOriginalFile())) return Collections.emptyList();
|
||||
|
||||
List<LookupElement> 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<CompletionParam
|
||||
EditorModificationUtil.insertStringAtCaret(editor, " -> ");
|
||||
}
|
||||
});
|
||||
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) {
|
||||
|
||||
+1
-1
@@ -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 -> {}'
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user