diff options
Diffstat (limited to 'java/java-impl/src/com/intellij/codeInsight/completion/LambdaCompletionProvider.java')
-rw-r--r-- | java/java-impl/src/com/intellij/codeInsight/completion/LambdaCompletionProvider.java | 22 |
1 files changed, 17 insertions, 5 deletions
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 f169ccd8aa56..4fd7df6c7e2e 100644 --- a/java/java-impl/src/com/intellij/codeInsight/completion/LambdaCompletionProvider.java +++ b/java/java-impl/src/com/intellij/codeInsight/completion/LambdaCompletionProvider.java @@ -25,6 +25,7 @@ import com.intellij.openapi.editor.EditorModificationUtil; import com.intellij.openapi.project.Project; import com.intellij.openapi.util.text.StringUtil; import com.intellij.psi.*; +import com.intellij.psi.codeStyle.CodeStyleManager; import com.intellij.psi.codeStyle.JavaCodeStyleManager; import com.intellij.psi.impl.source.resolve.graphInference.FunctionalInterfaceParameterizationUtil; import com.intellij.psi.util.PsiUtil; @@ -52,18 +53,25 @@ public class LambdaCompletionProvider extends CompletionProvider<CompletionParam final Project project = method.getProject(); final PsiElement originalPosition = parameters.getOriginalPosition(); final JVMElementFactory jvmElementFactory = originalPosition != null ? JVMElementFactories.getFactory(originalPosition.getLanguage(), project) : null; + final JavaCodeStyleManager javaCodeStyleManager = JavaCodeStyleManager.getInstance(project); if (jvmElementFactory != null) { final PsiSubstitutor substitutor = LambdaUtil.getSubstitutor(method, PsiUtil.resolveGenericsClassInType(functionalInterfaceType)); - final JavaCodeStyleManager codeStyleManager = JavaCodeStyleManager.getInstance(project); - params = GenerateMembersUtil.overriddenParameters(params, jvmElementFactory, codeStyleManager, substitutor, originalPosition); + params = GenerateMembersUtil.overriddenParameters(params, jvmElementFactory, javaCodeStyleManager, substitutor, originalPosition); } - final String paramsString = params.length == 1 ? params[0].getName() : "(" + StringUtil.join(params, new Function<PsiParameter, String>() { + String paramsString = + params.length == 1 ? getParamName(params[0], javaCodeStyleManager, originalPosition) : "(" + StringUtil.join(params, new Function<PsiParameter, String>() { @Override public String fun(PsiParameter parameter) { - return parameter.getName(); + return getParamName(parameter, javaCodeStyleManager, originalPosition); } - }, ",") + ")"; + }, ",") + ")"; + + final CodeStyleManager codeStyleManager = CodeStyleManager.getInstance(project); + PsiLambdaExpression lambdaExpression = (PsiLambdaExpression)JavaPsiFacade.getElementFactory(project) + .createExpressionFromText(paramsString + " -> {}", null); + lambdaExpression = (PsiLambdaExpression)codeStyleManager.reformat(lambdaExpression); + paramsString = lambdaExpression.getParameterList().getText(); final LookupElementBuilder builder = LookupElementBuilder.create(paramsString).withPresentableText(paramsString + " -> {}").withInsertHandler(new InsertHandler<LookupElement>() { @Override @@ -77,4 +85,8 @@ public class LambdaCompletionProvider extends CompletionProvider<CompletionParam } } } + + private static String getParamName(PsiParameter param, JavaCodeStyleManager javaCodeStyleManager, PsiElement originalPosition) { + return javaCodeStyleManager.suggestUniqueVariableName(param.getName(), originalPosition, true); + } } |