From dff29429581e885c4bf089649b3afc9b45688772 Mon Sep 17 00:00:00 2001 From: "Anna.Kozlova" Date: Tue, 6 Dec 2016 16:31:22 +0100 Subject: [PATCH] replace underscore with type-based-name if parameter name is underscore (IDEA-165093) --- .../intellij/refactoring/util/LambdaRefactoringUtil.java | 8 +++++++- .../NoUnderscoreInLambdaParameterName.after.java | 7 +++++++ .../NoUnderscoreInLambdaParameterName.java | 7 +++++++ .../style/MethodRefCanBeReplacedWithLambdaFixTest.java | 4 ++++ 4 files changed, 25 insertions(+), 1 deletion(-) create mode 100644 plugins/InspectionGadgets/test/com/siyeh/igfixes/style/methodRefs2lambda/NoUnderscoreInLambdaParameterName.after.java create mode 100644 plugins/InspectionGadgets/test/com/siyeh/igfixes/style/methodRefs2lambda/NoUnderscoreInLambdaParameterName.java diff --git a/java/java-impl/src/com/intellij/refactoring/util/LambdaRefactoringUtil.java b/java/java-impl/src/com/intellij/refactoring/util/LambdaRefactoringUtil.java index 4f37c858fe9f..1721264cff2a 100644 --- a/java/java-impl/src/com/intellij/refactoring/util/LambdaRefactoringUtil.java +++ b/java/java-impl/src/com/intellij/refactoring/util/LambdaRefactoringUtil.java @@ -95,7 +95,7 @@ public class LambdaRefactoringUtil { baseName = nameInfo.names.length > 0 ? nameInfo.names[0] : parameter.getName(); } else { - final String initialName; + String initialName; if (psiParameters != null) { final int idx = parameterIndex - (isReceiver ? 1 : 0); initialName = psiParameters.length > 0 ? psiParameters[idx < psiParameters.length ? idx : psiParameters.length - 1].getName() @@ -105,6 +105,12 @@ public class LambdaRefactoringUtil { initialName = parameter.getName(); } LOG.assertTrue(initialName != null); + if ("_".equals(initialName)) { + SuggestedNameInfo nameInfo = codeStyleManager.suggestVariableName(VariableKind.PARAMETER, null, null, psiSubstitutor.substitute(parameter.getType())); + if (nameInfo.names.length > 0) { + initialName = nameInfo.names[0]; + } + } baseName = codeStyleManager.variableNameToPropertyName(initialName, VariableKind.PARAMETER); } diff --git a/plugins/InspectionGadgets/test/com/siyeh/igfixes/style/methodRefs2lambda/NoUnderscoreInLambdaParameterName.after.java b/plugins/InspectionGadgets/test/com/siyeh/igfixes/style/methodRefs2lambda/NoUnderscoreInLambdaParameterName.after.java new file mode 100644 index 000000000000..58e0a74013cb --- /dev/null +++ b/plugins/InspectionGadgets/test/com/siyeh/igfixes/style/methodRefs2lambda/NoUnderscoreInLambdaParameterName.after.java @@ -0,0 +1,7 @@ +import java.util.function.IntConsumer; + +public class Main { + void test(int _) {}; + + IntConsumer c = i -> test(i); +} \ No newline at end of file diff --git a/plugins/InspectionGadgets/test/com/siyeh/igfixes/style/methodRefs2lambda/NoUnderscoreInLambdaParameterName.java b/plugins/InspectionGadgets/test/com/siyeh/igfixes/style/methodRefs2lambda/NoUnderscoreInLambdaParameterName.java new file mode 100644 index 000000000000..f7d9e7b4fbb3 --- /dev/null +++ b/plugins/InspectionGadgets/test/com/siyeh/igfixes/style/methodRefs2lambda/NoUnderscoreInLambdaParameterName.java @@ -0,0 +1,7 @@ +import java.util.function.IntConsumer; + +public class Main { + void test(int _) {}; + + IntConsumer c = this::test; +} \ No newline at end of file diff --git a/plugins/InspectionGadgets/testsrc/com/siyeh/ig/fixes/style/MethodRefCanBeReplacedWithLambdaFixTest.java b/plugins/InspectionGadgets/testsrc/com/siyeh/ig/fixes/style/MethodRefCanBeReplacedWithLambdaFixTest.java index 03b500b5030b..cd3ccf9a0bcd 100644 --- a/plugins/InspectionGadgets/testsrc/com/siyeh/ig/fixes/style/MethodRefCanBeReplacedWithLambdaFixTest.java +++ b/plugins/InspectionGadgets/testsrc/com/siyeh/ig/fixes/style/MethodRefCanBeReplacedWithLambdaFixTest.java @@ -130,4 +130,8 @@ public class MethodRefCanBeReplacedWithLambdaFixTest extends IGQuickFixesTestCas public void testPreserveExpressionQualifier() throws Exception { doTest(); } + + public void testNoUnderscoreInLambdaParameterName() throws Exception { + doTest(); + } }