From 1101873f41cebd46911eaad693e0c02c28d6040e Mon Sep 17 00:00:00 2001 From: Toshiaki Kameyama Date: Sat, 20 May 2023 15:54:39 +0900 Subject: [PATCH] [kotlin] Fix false Positive "Add constructor parameter" quickfix for value class ^KTIJ-16740 Fixed closes https://github.com/JetBrains/intellij-community/pull/2446 GitOrigin-RevId: f60af82b0daa5cef13b495f979be75ea9def45f8 --- .../idea/quickfix/ChangeFunctionSignatureFix.kt | 6 ++++++ .../idea/quickfix/K1QuickFixTestGenerated.java | 10 ++++++++++ .../addConstructorParameterForInlineClass.kt | 11 +++++++++++ .../addConstructorParameterForValueClass.kt | 12 ++++++++++++ 4 files changed, 39 insertions(+) create mode 100644 plugins/kotlin/idea/tests/testData/quickfix/changeSignature/addConstructorParameterForInlineClass.kt create mode 100644 plugins/kotlin/idea/tests/testData/quickfix/changeSignature/addConstructorParameterForValueClass.kt diff --git a/plugins/kotlin/idea/src/org/jetbrains/kotlin/idea/quickfix/ChangeFunctionSignatureFix.kt b/plugins/kotlin/idea/src/org/jetbrains/kotlin/idea/quickfix/ChangeFunctionSignatureFix.kt index 3a574f35c4ea..0499a6dbf710 100644 --- a/plugins/kotlin/idea/src/org/jetbrains/kotlin/idea/quickfix/ChangeFunctionSignatureFix.kt +++ b/plugins/kotlin/idea/src/org/jetbrains/kotlin/idea/quickfix/ChangeFunctionSignatureFix.kt @@ -7,6 +7,7 @@ import com.intellij.openapi.project.Project import com.intellij.psi.PsiElement import org.jetbrains.kotlin.descriptors.CallableDescriptor import org.jetbrains.kotlin.descriptors.CallableMemberDescriptor.Kind.SYNTHESIZED +import org.jetbrains.kotlin.descriptors.ConstructorDescriptor import org.jetbrains.kotlin.descriptors.FunctionDescriptor import org.jetbrains.kotlin.descriptors.ValueParameterDescriptor import org.jetbrains.kotlin.diagnostics.Diagnostic @@ -28,6 +29,7 @@ import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.psi.psiUtil.getStrictParentOfType import org.jetbrains.kotlin.resolve.calls.util.getCall import org.jetbrains.kotlin.resolve.calls.util.getType +import org.jetbrains.kotlin.resolve.isValueClass import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode import org.jetbrains.kotlin.types.checker.KotlinTypeChecker @@ -91,6 +93,10 @@ abstract class ChangeFunctionSignatureFix( val arguments = originalElement.valueArguments if (arguments.size > parameters.size) { + if (functionDescriptor is ConstructorDescriptor && + functionDescriptor.containingDeclaration.isValueClass() + ) return null + val bindingContext = originalElement.analyze() val call = originalElement.getCall(bindingContext) ?: return null val argumentToParameter = call.mapArgumentsToParameters(functionDescriptor) diff --git a/plugins/kotlin/idea/tests/test/org/jetbrains/kotlin/idea/quickfix/K1QuickFixTestGenerated.java b/plugins/kotlin/idea/tests/test/org/jetbrains/kotlin/idea/quickfix/K1QuickFixTestGenerated.java index ea535b7342d9..8cd91644b6d6 100644 --- a/plugins/kotlin/idea/tests/test/org/jetbrains/kotlin/idea/quickfix/K1QuickFixTestGenerated.java +++ b/plugins/kotlin/idea/tests/test/org/jetbrains/kotlin/idea/quickfix/K1QuickFixTestGenerated.java @@ -2875,6 +2875,16 @@ public abstract class K1QuickFixTestGenerated extends AbstractK1QuickFixTest { runTest("testData/quickfix/changeSignature/addConstructorParameterForConstantTypeMismatch.kt"); } + @TestMetadata("addConstructorParameterForInlineClass.kt") + public void testAddConstructorParameterForInlineClass() throws Exception { + runTest("testData/quickfix/changeSignature/addConstructorParameterForInlineClass.kt"); + } + + @TestMetadata("addConstructorParameterForValueClass.kt") + public void testAddConstructorParameterForValueClass() throws Exception { + runTest("testData/quickfix/changeSignature/addConstructorParameterForValueClass.kt"); + } + @TestMetadata("addEnumConstructorParameter.kt") public void testAddEnumConstructorParameter() throws Exception { runTest("testData/quickfix/changeSignature/addEnumConstructorParameter.kt"); diff --git a/plugins/kotlin/idea/tests/testData/quickfix/changeSignature/addConstructorParameterForInlineClass.kt b/plugins/kotlin/idea/tests/testData/quickfix/changeSignature/addConstructorParameterForInlineClass.kt new file mode 100644 index 000000000000..b223a057a3f8 --- /dev/null +++ b/plugins/kotlin/idea/tests/testData/quickfix/changeSignature/addConstructorParameterForInlineClass.kt @@ -0,0 +1,11 @@ +// "Add parameter to constructor 'Foo'" "false" +// DISABLE-ERRORS +// ACTION: Convert property initializer to getter +// ACTION: Convert to lazy property +// ACTION: Create function 'Foo' +// ACTION: Create secondary constructor +// ACTION: Put arguments on separate lines +// ACTION: Remove argument +inline class Foo(val i: Int) + +val foo = Foo(10, 20) \ No newline at end of file diff --git a/plugins/kotlin/idea/tests/testData/quickfix/changeSignature/addConstructorParameterForValueClass.kt b/plugins/kotlin/idea/tests/testData/quickfix/changeSignature/addConstructorParameterForValueClass.kt new file mode 100644 index 000000000000..91abda96b2ac --- /dev/null +++ b/plugins/kotlin/idea/tests/testData/quickfix/changeSignature/addConstructorParameterForValueClass.kt @@ -0,0 +1,12 @@ +// "Add parameter to constructor 'Foo'" "false" +// DISABLE-ERRORS +// ACTION: Convert property initializer to getter +// ACTION: Convert to lazy property +// ACTION: Create function 'Foo' +// ACTION: Create secondary constructor +// ACTION: Put arguments on separate lines +// ACTION: Remove argument +@JvmInline +value class Foo(val i: Int) + +val foo = Foo(10, 20) \ No newline at end of file