diff --git a/ChangeLog.md b/ChangeLog.md index 3753c753990..2757990ac0f 100644 --- a/ChangeLog.md +++ b/ChangeLog.md @@ -274,6 +274,7 @@ Using 'this' as function argument in constructor of non-final class - [`KT-13124`](https://youtrack.jetbrains.com/issue/KT-13124) Pull Up: Skip super members without explicit declarations - [`KT-13032`](https://youtrack.jetbrains.com/issue/KT-13032) Rename: Support accessors with non-conventional names - [`KT-13463`](https://youtrack.jetbrains.com/issue/KT-13463) Rename: Quote parameter name when necessary +- [`KT-13476`](https://youtrack.jetbrains.com/issue/KT-13476) Rename: Fix parameter rename when new name matches call selector ##### New features diff --git a/idea/src/org/jetbrains/kotlin/idea/refactoring/rename/renameConflictUtils.kt b/idea/src/org/jetbrains/kotlin/idea/refactoring/rename/renameConflictUtils.kt index de5234a7d54..b3c83bb88ca 100644 --- a/idea/src/org/jetbrains/kotlin/idea/refactoring/rename/renameConflictUtils.kt +++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/rename/renameConflictUtils.kt @@ -171,6 +171,7 @@ fun reportShadowing( result += BasicUnresolvableCollisionUsageInfo(refElement, elementToBindUsageInfoTo, message) } +// todo: break into smaller functions private fun checkUsagesRetargeting( elementToBindUsageInfosTo: PsiElement, declaration: PsiNamedElement, @@ -287,7 +288,9 @@ private fun checkUsagesRetargeting( continue } - usageIterator.set(UsageInfoWithReplacement(fullCallExpression, declaration, qualifiedExpression)) + if (fullCallExpression !is KtQualifiedExpression) { + usageIterator.set(UsageInfoWithReplacement(fullCallExpression, declaration, qualifiedExpression)) + } } } diff --git a/idea/testData/refactoring/rename/paramererAsReceiverWithNewNameAsSelector/after/test/test.kt b/idea/testData/refactoring/rename/paramererAsReceiverWithNewNameAsSelector/after/test/test.kt new file mode 100644 index 00000000000..c6b9275b175 --- /dev/null +++ b/idea/testData/refactoring/rename/paramererAsReceiverWithNewNameAsSelector/after/test/test.kt @@ -0,0 +1,8 @@ +interface I { + fun some() +} + +fun f(some: I) { + println(some) + some.some() +} \ No newline at end of file diff --git a/idea/testData/refactoring/rename/paramererAsReceiverWithNewNameAsSelector/before/test/test.kt b/idea/testData/refactoring/rename/paramererAsReceiverWithNewNameAsSelector/before/test/test.kt new file mode 100644 index 00000000000..3ea9fb5290d --- /dev/null +++ b/idea/testData/refactoring/rename/paramererAsReceiverWithNewNameAsSelector/before/test/test.kt @@ -0,0 +1,8 @@ +interface I { + fun some() +} + +fun f(/*rename*/o: I) { + println(o) + o.some() +} \ No newline at end of file diff --git a/idea/testData/refactoring/rename/paramererAsReceiverWithNewNameAsSelector/parameterAsReceiverWithNewNameAsSelector.test b/idea/testData/refactoring/rename/paramererAsReceiverWithNewNameAsSelector/parameterAsReceiverWithNewNameAsSelector.test new file mode 100644 index 00000000000..5a426749978 --- /dev/null +++ b/idea/testData/refactoring/rename/paramererAsReceiverWithNewNameAsSelector/parameterAsReceiverWithNewNameAsSelector.test @@ -0,0 +1,6 @@ +{ + "type": "MARKED_ELEMENT", + "mainFile": "test/test.kt", + "newName": "some", + "withRuntime": "true" +} \ No newline at end of file diff --git a/idea/tests/org/jetbrains/kotlin/idea/refactoring/rename/RenameTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/refactoring/rename/RenameTestGenerated.java index 8dccaa7ae50..48968ccf46a 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/refactoring/rename/RenameTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/refactoring/rename/RenameTestGenerated.java @@ -239,6 +239,12 @@ public class RenameTestGenerated extends AbstractRenameTest { doTest(fileName); } + @TestMetadata("paramererAsReceiverWithNewNameAsSelector/parameterAsReceiverWithNewNameAsSelector.test") + public void testParamererAsReceiverWithNewNameAsSelector_ParameterAsReceiverWithNewNameAsSelector() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/refactoring/rename/paramererAsReceiverWithNewNameAsSelector/parameterAsReceiverWithNewNameAsSelector.test"); + doTest(fileName); + } + @TestMetadata("parameterRedeclaration/parameterRedeclaration.test") public void testParameterRedeclaration_ParameterRedeclaration() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("idea/testData/refactoring/rename/parameterRedeclaration/parameterRedeclaration.test");