From f1c605d0f72eeb670145e6a0ca987d4510759e3c Mon Sep 17 00:00:00 2001 From: Toshiaki Kameyama Date: Wed, 30 Oct 2019 22:49:20 +0900 Subject: [PATCH] AddFunctionParametersFix: improve parameter name for 'it' argument #KT-33297 Fixed --- .../kotlin/idea/quickfix/ChangeFunctionSignatureFix.kt | 7 +++++++ .../quickfix/changeSignature/addForItParameter.kt | 8 ++++++++ .../quickfix/changeSignature/addForItParameter.kt.after | 8 ++++++++ .../kotlin/idea/quickfix/QuickFixTestGenerated.java | 5 +++++ 4 files changed, 28 insertions(+) create mode 100644 idea/testData/quickfix/changeSignature/addForItParameter.kt create mode 100644 idea/testData/quickfix/changeSignature/addForItParameter.kt.after diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/ChangeFunctionSignatureFix.kt b/idea/src/org/jetbrains/kotlin/idea/quickfix/ChangeFunctionSignatureFix.kt index 5a47575f507..c64cab02b3e 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/ChangeFunctionSignatureFix.kt +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/ChangeFunctionSignatureFix.kt @@ -40,6 +40,7 @@ import org.jetbrains.kotlin.psi.KtFile import org.jetbrains.kotlin.psi.ValueArgument import org.jetbrains.kotlin.psi.psiUtil.getStrictParentOfType import org.jetbrains.kotlin.resolve.calls.callUtil.getCall +import org.jetbrains.kotlin.resolve.calls.callUtil.getType import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode import org.jetbrains.kotlin.types.checker.KotlinTypeChecker @@ -64,6 +65,12 @@ abstract class ChangeFunctionSignatureFix( argumentName != null -> KotlinNameSuggester.suggestNameByName(argumentName.asName.asString(), validator) expression != null -> { val bindingContext = expression.analyze(BodyResolveMode.PARTIAL) + if (expression.text == "it") { + val type = expression.getType(bindingContext) + if (type != null) { + return KotlinNameSuggester.suggestNamesByType(type, validator, "param").first() + } + } KotlinNameSuggester.suggestNamesByExpressionAndType(expression, null, bindingContext, validator, "param").first() } else -> KotlinNameSuggester.suggestNameByName("param", validator) diff --git a/idea/testData/quickfix/changeSignature/addForItParameter.kt b/idea/testData/quickfix/changeSignature/addForItParameter.kt new file mode 100644 index 00000000000..28d3dbfe8d2 --- /dev/null +++ b/idea/testData/quickfix/changeSignature/addForItParameter.kt @@ -0,0 +1,8 @@ +// "Add parameter to constructor 'Foo'" "true" +// WITH_RUNTIME + +class Foo + +fun test(name: String) { + name.also { Foo(it) } +} \ No newline at end of file diff --git a/idea/testData/quickfix/changeSignature/addForItParameter.kt.after b/idea/testData/quickfix/changeSignature/addForItParameter.kt.after new file mode 100644 index 00000000000..c89bfc90e8c --- /dev/null +++ b/idea/testData/quickfix/changeSignature/addForItParameter.kt.after @@ -0,0 +1,8 @@ +// "Add parameter to constructor 'Foo'" "true" +// WITH_RUNTIME + +class Foo(s: String) + +fun test(name: String) { + name.also { Foo(it) } +} \ No newline at end of file diff --git a/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java index d6cbca0fd71..69af5f5ce7b 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java @@ -2185,6 +2185,11 @@ public class QuickFixTestGenerated extends AbstractQuickFixTest { runTest("idea/testData/quickfix/changeSignature/addEnumConstructorParameter5.kt"); } + @TestMetadata("addForItParameter.kt") + public void testAddForItParameter() throws Exception { + runTest("idea/testData/quickfix/changeSignature/addForItParameter.kt"); + } + @TestMetadata("addFunctionParameter.kt") public void testAddFunctionParameter() throws Exception { runTest("idea/testData/quickfix/changeSignature/addFunctionParameter.kt");