From 22a73bc09d058423345699ad3652532a48319c32 Mon Sep 17 00:00:00 2001 From: Dmitry Gridin Date: Wed, 19 Jun 2019 15:59:40 +0700 Subject: [PATCH] ChangeFunctionSignatureFix: fix wrong result #KT-32001 Fixed --- .../kotlin/idea/quickfix/ChangeFunctionSignatureFix.kt | 4 ++-- .../quickfix/changeSignature/addFunctionParameter2.kt | 10 ++++++++++ .../changeSignature/addFunctionParameter2.kt.after | 10 ++++++++++ .../quickfix/changeSignature/addFunctionParameter3.kt | 10 ++++++++++ .../changeSignature/addFunctionParameter3.kt.after | 10 ++++++++++ ...ddFunctionParameterWithSmartcastedArgument.kt.after | 2 +- .../kotlin/idea/quickfix/QuickFixTestGenerated.java | 10 ++++++++++ 7 files changed, 53 insertions(+), 3 deletions(-) create mode 100644 idea/testData/quickfix/changeSignature/addFunctionParameter2.kt create mode 100644 idea/testData/quickfix/changeSignature/addFunctionParameter2.kt.after create mode 100644 idea/testData/quickfix/changeSignature/addFunctionParameter3.kt create mode 100644 idea/testData/quickfix/changeSignature/addFunctionParameter3.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 c1798fcbf12..5a47575f507 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/ChangeFunctionSignatureFix.kt +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/ChangeFunctionSignatureFix.kt @@ -38,7 +38,7 @@ import org.jetbrains.kotlin.idea.refactoring.changeSignature.runChangeSignature import org.jetbrains.kotlin.psi.KtCallElement import org.jetbrains.kotlin.psi.KtFile import org.jetbrains.kotlin.psi.ValueArgument -import org.jetbrains.kotlin.psi.psiUtil.getNonStrictParentOfType +import org.jetbrains.kotlin.psi.psiUtil.getStrictParentOfType import org.jetbrains.kotlin.resolve.calls.callUtil.getCall import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode import org.jetbrains.kotlin.types.checker.KotlinTypeChecker @@ -71,7 +71,7 @@ abstract class ChangeFunctionSignatureFix( } companion object : KotlinSingleIntentionActionFactoryWithDelegate() { - override fun getElementOfInterest(diagnostic: Diagnostic): KtCallElement? = diagnostic.psiElement.getNonStrictParentOfType() + override fun getElementOfInterest(diagnostic: Diagnostic): KtCallElement? = diagnostic.psiElement.getStrictParentOfType() override fun extractFixData(element: KtCallElement, diagnostic: Diagnostic): CallableDescriptor? { return DiagnosticFactory.cast(diagnostic, Errors.TOO_MANY_ARGUMENTS, Errors.NO_VALUE_FOR_PARAMETER).a diff --git a/idea/testData/quickfix/changeSignature/addFunctionParameter2.kt b/idea/testData/quickfix/changeSignature/addFunctionParameter2.kt new file mode 100644 index 00000000000..ec19b3484f3 --- /dev/null +++ b/idea/testData/quickfix/changeSignature/addFunctionParameter2.kt @@ -0,0 +1,10 @@ +// "Add parameter to function 'called'" "true" +// WITH_RUNTIME +// DISABLE-ERRORS +// WITH_NEW_INFERENCE + +fun caller() { + called(setOf(1, 2, 3)) +} + +fun called() {} \ No newline at end of file diff --git a/idea/testData/quickfix/changeSignature/addFunctionParameter2.kt.after b/idea/testData/quickfix/changeSignature/addFunctionParameter2.kt.after new file mode 100644 index 00000000000..a42b52ada37 --- /dev/null +++ b/idea/testData/quickfix/changeSignature/addFunctionParameter2.kt.after @@ -0,0 +1,10 @@ +// "Add parameter to function 'called'" "true" +// WITH_RUNTIME +// DISABLE-ERRORS +// WITH_NEW_INFERENCE + +fun caller() { + called(setOf(1, 2, 3)) +} + +fun called(of: Set) {} \ No newline at end of file diff --git a/idea/testData/quickfix/changeSignature/addFunctionParameter3.kt b/idea/testData/quickfix/changeSignature/addFunctionParameter3.kt new file mode 100644 index 00000000000..e253bab74f5 --- /dev/null +++ b/idea/testData/quickfix/changeSignature/addFunctionParameter3.kt @@ -0,0 +1,10 @@ +// "Add parameter to function 'called'" "true" +// WITH_RUNTIME +// DISABLE-ERRORS +// !WITH_NEW_INFERENCE + +fun caller() { + called(setOf(1, 2, 3)) +} + +fun called() {} \ No newline at end of file diff --git a/idea/testData/quickfix/changeSignature/addFunctionParameter3.kt.after b/idea/testData/quickfix/changeSignature/addFunctionParameter3.kt.after new file mode 100644 index 00000000000..201b5a84940 --- /dev/null +++ b/idea/testData/quickfix/changeSignature/addFunctionParameter3.kt.after @@ -0,0 +1,10 @@ +// "Add parameter to function 'called'" "true" +// WITH_RUNTIME +// DISABLE-ERRORS +// !WITH_NEW_INFERENCE + +fun caller() { + called(setOf(1, 2, 3)) +} + +fun called(of: Set) {} \ No newline at end of file diff --git a/idea/testData/quickfix/changeSignature/addFunctionParameterWithSmartcastedArgument.kt.after b/idea/testData/quickfix/changeSignature/addFunctionParameterWithSmartcastedArgument.kt.after index 5d6c601a83f..7c63296e127 100644 --- a/idea/testData/quickfix/changeSignature/addFunctionParameterWithSmartcastedArgument.kt.after +++ b/idea/testData/quickfix/changeSignature/addFunctionParameterWithSmartcastedArgument.kt.after @@ -1,4 +1,4 @@ -// "Change the signature of function 'doSmthWithChild'" "true" +// "Add parameter to function 'doSmthWithChild'" "true" // DISABLE-ERRORS // COMPILER_ARGUMENTS: -XXLanguage:+NewInference diff --git a/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java index 0c61fc58974..aebdc229cc7 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java @@ -1939,6 +1939,16 @@ public class QuickFixTestGenerated extends AbstractQuickFixTest { runTest("idea/testData/quickfix/changeSignature/addFunctionParameter.kt"); } + @TestMetadata("addFunctionParameter2.kt") + public void testAddFunctionParameter2() throws Exception { + runTest("idea/testData/quickfix/changeSignature/addFunctionParameter2.kt"); + } + + @TestMetadata("addFunctionParameter3.kt") + public void testAddFunctionParameter3() throws Exception { + runTest("idea/testData/quickfix/changeSignature/addFunctionParameter3.kt"); + } + @TestMetadata("addFunctionParameterAndChangeTypes.kt") public void testAddFunctionParameterAndChangeTypes() throws Exception { runTest("idea/testData/quickfix/changeSignature/addFunctionParameterAndChangeTypes.kt");