diff --git a/idea/src/org/jetbrains/kotlin/idea/refactoring/changeSignature/KotlinChangeInfo.kt b/idea/src/org/jetbrains/kotlin/idea/refactoring/changeSignature/KotlinChangeInfo.kt index 35379711b90..d6a66636a4b 100644 --- a/idea/src/org/jetbrains/kotlin/idea/refactoring/changeSignature/KotlinChangeInfo.kt +++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/changeSignature/KotlinChangeInfo.kt @@ -49,6 +49,7 @@ import org.jetbrains.kotlin.resolve.DescriptorToSourceUtils import org.jetbrains.kotlin.resolve.DescriptorUtils import org.jetbrains.kotlin.resolve.jvm.annotations.findJvmOverloadsAnnotation import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatform +import org.jetbrains.kotlin.resolve.source.getPsi import org.jetbrains.kotlin.types.isError import org.jetbrains.kotlin.types.typeUtil.isUnit import org.jetbrains.kotlin.utils.keysToMap @@ -555,11 +556,14 @@ fun ChangeInfo.toJetChangeInfo( } val parameterType = if (oldIndex >= 0) originalParameterDescriptors[oldIndex].type else currentType + val originalKtParameter = originalParameterDescriptors.getOrNull(oldIndex)?.source?.getPsi() as? KtParameter + val valOrVar = originalKtParameter?.valOrVarKeyword?.toValVar() ?: KotlinValVar.None KotlinParameterInfo(callableDescriptor = functionDescriptor, originalIndex = oldIndex, name = info.name, originalTypeInfo = KotlinTypeInfo(false, parameterType), - defaultValueForCall = defaultValueExpr).apply { + defaultValueForCall = defaultValueExpr, + valOrVar = valOrVar).apply { currentTypeInfo = KotlinTypeInfo(false, currentType) } } diff --git a/idea/testData/quickfix/changeSignature/jk/jkKeepValOnAddingParameter1.after.Dependency.kt b/idea/testData/quickfix/changeSignature/jk/jkKeepValOnAddingParameter1.after.Dependency.kt new file mode 100644 index 00000000000..b111d882dfc --- /dev/null +++ b/idea/testData/quickfix/changeSignature/jk/jkKeepValOnAddingParameter1.after.Dependency.kt @@ -0,0 +1 @@ +class Foo(i: Int, val n: Int) diff --git a/idea/testData/quickfix/changeSignature/jk/jkKeepValOnAddingParameter1.after.java b/idea/testData/quickfix/changeSignature/jk/jkKeepValOnAddingParameter1.after.java new file mode 100644 index 00000000000..aeb5b60e0c7 --- /dev/null +++ b/idea/testData/quickfix/changeSignature/jk/jkKeepValOnAddingParameter1.after.java @@ -0,0 +1,7 @@ +// "Add 'int' as 1st parameter to method 'Foo'" "true" + +public class J { + void test() { + new Foo(1, 2); + } +} diff --git a/idea/testData/quickfix/changeSignature/jk/jkKeepValOnAddingParameter1.before.Dependency.kt b/idea/testData/quickfix/changeSignature/jk/jkKeepValOnAddingParameter1.before.Dependency.kt new file mode 100644 index 00000000000..7353cec36b9 --- /dev/null +++ b/idea/testData/quickfix/changeSignature/jk/jkKeepValOnAddingParameter1.before.Dependency.kt @@ -0,0 +1 @@ +class Foo(val n: Int) diff --git a/idea/testData/quickfix/changeSignature/jk/jkKeepValOnAddingParameter1.before.Main.java b/idea/testData/quickfix/changeSignature/jk/jkKeepValOnAddingParameter1.before.Main.java new file mode 100644 index 00000000000..aeb5b60e0c7 --- /dev/null +++ b/idea/testData/quickfix/changeSignature/jk/jkKeepValOnAddingParameter1.before.Main.java @@ -0,0 +1,7 @@ +// "Add 'int' as 1st parameter to method 'Foo'" "true" + +public class J { + void test() { + new Foo(1, 2); + } +} diff --git a/idea/testData/quickfix/changeSignature/jk/jkKeepValOnAddingParameter2.after.Dependency.kt b/idea/testData/quickfix/changeSignature/jk/jkKeepValOnAddingParameter2.after.Dependency.kt new file mode 100644 index 00000000000..1565df33fad --- /dev/null +++ b/idea/testData/quickfix/changeSignature/jk/jkKeepValOnAddingParameter2.after.Dependency.kt @@ -0,0 +1 @@ +class Foo(val n: Int, i: Int) diff --git a/idea/testData/quickfix/changeSignature/jk/jkKeepValOnAddingParameter2.after.java b/idea/testData/quickfix/changeSignature/jk/jkKeepValOnAddingParameter2.after.java new file mode 100644 index 00000000000..74eb5b27f38 --- /dev/null +++ b/idea/testData/quickfix/changeSignature/jk/jkKeepValOnAddingParameter2.after.java @@ -0,0 +1,7 @@ +// "Add 'int' as 2nd parameter to method 'Foo'" "true" + +public class J { + void test() { + new Foo(1, 2); + } +} diff --git a/idea/testData/quickfix/changeSignature/jk/jkKeepValOnAddingParameter2.before.Dependency.kt b/idea/testData/quickfix/changeSignature/jk/jkKeepValOnAddingParameter2.before.Dependency.kt new file mode 100644 index 00000000000..7353cec36b9 --- /dev/null +++ b/idea/testData/quickfix/changeSignature/jk/jkKeepValOnAddingParameter2.before.Dependency.kt @@ -0,0 +1 @@ +class Foo(val n: Int) diff --git a/idea/testData/quickfix/changeSignature/jk/jkKeepValOnAddingParameter2.before.Main.java b/idea/testData/quickfix/changeSignature/jk/jkKeepValOnAddingParameter2.before.Main.java new file mode 100644 index 00000000000..74eb5b27f38 --- /dev/null +++ b/idea/testData/quickfix/changeSignature/jk/jkKeepValOnAddingParameter2.before.Main.java @@ -0,0 +1,7 @@ +// "Add 'int' as 2nd parameter to method 'Foo'" "true" + +public class J { + void test() { + new Foo(1, 2); + } +} diff --git a/idea/testData/quickfix/changeSignature/jk/jkKeepValOnParameterTypeChange.after.Dependency.kt b/idea/testData/quickfix/changeSignature/jk/jkKeepValOnParameterTypeChange.after.Dependency.kt new file mode 100644 index 00000000000..7611f87c657 --- /dev/null +++ b/idea/testData/quickfix/changeSignature/jk/jkKeepValOnParameterTypeChange.after.Dependency.kt @@ -0,0 +1,3 @@ +class K(private val a: Int, val b: Int) { + override fun toString(): String = b.toString() +} \ No newline at end of file diff --git a/idea/testData/quickfix/changeSignature/jk/jkKeepValOnParameterTypeChange.after.java b/idea/testData/quickfix/changeSignature/jk/jkKeepValOnParameterTypeChange.after.java new file mode 100644 index 00000000000..a196b660fb7 --- /dev/null +++ b/idea/testData/quickfix/changeSignature/jk/jkKeepValOnParameterTypeChange.after.java @@ -0,0 +1,7 @@ +// "Change 1st parameter of method 'K' from 'String' to 'int'" "true" + +public class J { + void foo() { + new K(1, 2); + } +} \ No newline at end of file diff --git a/idea/testData/quickfix/changeSignature/jk/jkKeepValOnParameterTypeChange.before.Dependency.kt b/idea/testData/quickfix/changeSignature/jk/jkKeepValOnParameterTypeChange.before.Dependency.kt new file mode 100644 index 00000000000..b8dcf4272a4 --- /dev/null +++ b/idea/testData/quickfix/changeSignature/jk/jkKeepValOnParameterTypeChange.before.Dependency.kt @@ -0,0 +1,3 @@ +class K(private val a: String, val b: Int) { + override fun toString(): String = b.toString() +} \ No newline at end of file diff --git a/idea/testData/quickfix/changeSignature/jk/jkKeepValOnParameterTypeChange.before.Main.java b/idea/testData/quickfix/changeSignature/jk/jkKeepValOnParameterTypeChange.before.Main.java new file mode 100644 index 00000000000..a196b660fb7 --- /dev/null +++ b/idea/testData/quickfix/changeSignature/jk/jkKeepValOnParameterTypeChange.before.Main.java @@ -0,0 +1,7 @@ +// "Change 1st parameter of method 'K' from 'String' to 'int'" "true" + +public class J { + void foo() { + new K(1, 2); + } +} \ No newline at end of file diff --git a/idea/testData/refactoring/changeSignature/AddParameterKeepFormatAfter.kt b/idea/testData/refactoring/changeSignature/AddParameterKeepFormatAfter.kt index a8b1501f735..ca392c3cf99 100644 --- a/idea/testData/refactoring/changeSignature/AddParameterKeepFormatAfter.kt +++ b/idea/testData/refactoring/changeSignature/AddParameterKeepFormatAfter.kt @@ -5,12 +5,18 @@ fun foo(a: Int, b: Int, d: Int, c: Int, e: Int) { fun test() { foo(1, 2, - 4, 3, 5) + 4, + 3, + 5) foo(1, 2, - 4, 3, 5) + 4, + 3, + 5) foo( 1, 2, - 4, 3, 5 + 4, + 3, + 5 ) } \ No newline at end of file diff --git a/idea/testData/refactoring/changeSignature/ParameterListAddParamAfter.kt b/idea/testData/refactoring/changeSignature/ParameterListAddParamAfter.kt index 56ab3fc042e..0bc73bb679c 100644 --- a/idea/testData/refactoring/changeSignature/ParameterListAddParamAfter.kt +++ b/idea/testData/refactoring/changeSignature/ParameterListAddParamAfter.kt @@ -1,6 +1,7 @@ fun foo( n: Int, s: String, - a: Any, l: Long + a: Any, + l: Long ) { } \ No newline at end of file diff --git a/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixMultiFileTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixMultiFileTestGenerated.java index c2937a2ba40..67d753d7b84 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixMultiFileTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixMultiFileTestGenerated.java @@ -835,6 +835,24 @@ public class QuickFixMultiFileTestGenerated extends AbstractQuickFixMultiFileTes doTestWithExtraFile(fileName); } + @TestMetadata("jkKeepValOnAddingParameter1.before.Main.java") + public void testJkKeepValOnAddingParameter1() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/quickfix/changeSignature/jk/jkKeepValOnAddingParameter1.before.Main.java"); + doTestWithExtraFile(fileName); + } + + @TestMetadata("jkKeepValOnAddingParameter2.before.Main.java") + public void testJkKeepValOnAddingParameter2() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/quickfix/changeSignature/jk/jkKeepValOnAddingParameter2.before.Main.java"); + doTestWithExtraFile(fileName); + } + + @TestMetadata("jkKeepValOnParameterTypeChange.before.Main.java") + public void testJkKeepValOnParameterTypeChange() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/quickfix/changeSignature/jk/jkKeepValOnParameterTypeChange.before.Main.java"); + doTestWithExtraFile(fileName); + } + @TestMetadata("jkRemoveFunctionParameter.before.Main.java") public void testJkRemoveFunctionParameter() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("idea/testData/quickfix/changeSignature/jk/jkRemoveFunctionParameter.before.Main.java");