diff --git a/idea/src/org/jetbrains/kotlin/idea/refactoring/rename/RenameKotlinParameterProcessor.kt b/idea/src/org/jetbrains/kotlin/idea/refactoring/rename/RenameKotlinParameterProcessor.kt index c5f3f5cad14..96793372519 100644 --- a/idea/src/org/jetbrains/kotlin/idea/refactoring/rename/RenameKotlinParameterProcessor.kt +++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/rename/RenameKotlinParameterProcessor.kt @@ -6,10 +6,13 @@ package org.jetbrains.kotlin.idea.refactoring.rename import com.intellij.psi.PsiElement +import com.intellij.psi.PsiReference +import com.intellij.psi.search.SearchScope import com.intellij.refactoring.listeners.RefactoringElementListener import com.intellij.usageView.UsageInfo import org.jetbrains.kotlin.asJava.namedUnwrappedElement import org.jetbrains.kotlin.idea.refactoring.KotlinRefactoringSettings +import org.jetbrains.kotlin.idea.search.or import org.jetbrains.kotlin.psi.KtFunction import org.jetbrains.kotlin.psi.KtNamedDeclaration import org.jetbrains.kotlin.psi.KtParameter @@ -39,6 +42,18 @@ class RenameKotlinParameterProcessor : RenameKotlinPsiProcessor() { result += collisions } + override fun findReferences( + element: PsiElement, + searchScope: SearchScope, + searchInCommentsAndStrings: Boolean + ): MutableCollection { + if (element !is KtParameter) return super.findReferences(element, searchScope, searchInCommentsAndStrings) + val ownerFunction = element.ownerFunction + ?: return super.findReferences(element, searchScope, searchInCommentsAndStrings) + val newScope = searchScope or ownerFunction.useScope + return super.findReferences(element, newScope, searchInCommentsAndStrings) + } + override fun renameElement(element: PsiElement, newName: String, usages: Array, listener: RefactoringElementListener?) { super.renameElement(element, newName, usages, listener) diff --git a/idea/testData/refactoring/rename/renameKotlinConstructorParameterWithByNameUsages/after/test/kotlinClient.kt b/idea/testData/refactoring/rename/renameKotlinConstructorParameterWithByNameUsages/after/test/kotlinClient.kt new file mode 100644 index 00000000000..e69d26eba13 --- /dev/null +++ b/idea/testData/refactoring/rename/renameKotlinConstructorParameterWithByNameUsages/after/test/kotlinClient.kt @@ -0,0 +1,3 @@ +fun bar() { + Foo(second = 1) +} diff --git a/idea/testData/refactoring/rename/renameKotlinConstructorParameterWithByNameUsages/after/test/test.kt b/idea/testData/refactoring/rename/renameKotlinConstructorParameterWithByNameUsages/after/test/test.kt new file mode 100644 index 00000000000..ce8511b0021 --- /dev/null +++ b/idea/testData/refactoring/rename/renameKotlinConstructorParameterWithByNameUsages/after/test/test.kt @@ -0,0 +1 @@ +class Foo(val second: Int = 1) \ No newline at end of file diff --git a/idea/testData/refactoring/rename/renameKotlinConstructorParameterWithByNameUsages/before/test/kotlinClient.kt b/idea/testData/refactoring/rename/renameKotlinConstructorParameterWithByNameUsages/before/test/kotlinClient.kt new file mode 100644 index 00000000000..80e68435ec6 --- /dev/null +++ b/idea/testData/refactoring/rename/renameKotlinConstructorParameterWithByNameUsages/before/test/kotlinClient.kt @@ -0,0 +1,3 @@ +fun bar() { + Foo(first = 1) +} diff --git a/idea/testData/refactoring/rename/renameKotlinConstructorParameterWithByNameUsages/before/test/test.kt b/idea/testData/refactoring/rename/renameKotlinConstructorParameterWithByNameUsages/before/test/test.kt new file mode 100644 index 00000000000..98cfd99128a --- /dev/null +++ b/idea/testData/refactoring/rename/renameKotlinConstructorParameterWithByNameUsages/before/test/test.kt @@ -0,0 +1 @@ +class Foo(val /*rename*/first: Int = 1) \ No newline at end of file diff --git a/idea/testData/refactoring/rename/renameKotlinConstructorParameterWithByNameUsages/renameKotlinConstructorParameterWithByNameUsages.test b/idea/testData/refactoring/rename/renameKotlinConstructorParameterWithByNameUsages/renameKotlinConstructorParameterWithByNameUsages.test new file mode 100644 index 00000000000..8996c6967e8 --- /dev/null +++ b/idea/testData/refactoring/rename/renameKotlinConstructorParameterWithByNameUsages/renameKotlinConstructorParameterWithByNameUsages.test @@ -0,0 +1,6 @@ +{ + "type": "MARKED_ELEMENT", + "mainFile": "test/test.kt", + "newName": "second", + "withRuntime": "true" +} \ No newline at end of file diff --git a/idea/testData/refactoring/rename/renameKotlinFunctionParameterWithByNameUsages/after/test/kotlinClient.kt b/idea/testData/refactoring/rename/renameKotlinFunctionParameterWithByNameUsages/after/test/kotlinClient.kt new file mode 100644 index 00000000000..71cc840194d --- /dev/null +++ b/idea/testData/refactoring/rename/renameKotlinFunctionParameterWithByNameUsages/after/test/kotlinClient.kt @@ -0,0 +1,3 @@ +fun bar() { + foo(second = 1) +} diff --git a/idea/testData/refactoring/rename/renameKotlinFunctionParameterWithByNameUsages/after/test/test.kt b/idea/testData/refactoring/rename/renameKotlinFunctionParameterWithByNameUsages/after/test/test.kt new file mode 100644 index 00000000000..4e96190749e --- /dev/null +++ b/idea/testData/refactoring/rename/renameKotlinFunctionParameterWithByNameUsages/after/test/test.kt @@ -0,0 +1,3 @@ +fun foo(second: Int = 1) { + +} \ No newline at end of file diff --git a/idea/testData/refactoring/rename/renameKotlinFunctionParameterWithByNameUsages/before/test/kotlinClient.kt b/idea/testData/refactoring/rename/renameKotlinFunctionParameterWithByNameUsages/before/test/kotlinClient.kt new file mode 100644 index 00000000000..abf4cc96716 --- /dev/null +++ b/idea/testData/refactoring/rename/renameKotlinFunctionParameterWithByNameUsages/before/test/kotlinClient.kt @@ -0,0 +1,3 @@ +fun bar() { + foo(first = 1) +} diff --git a/idea/testData/refactoring/rename/renameKotlinFunctionParameterWithByNameUsages/before/test/test.kt b/idea/testData/refactoring/rename/renameKotlinFunctionParameterWithByNameUsages/before/test/test.kt new file mode 100644 index 00000000000..d1118b00c2e --- /dev/null +++ b/idea/testData/refactoring/rename/renameKotlinFunctionParameterWithByNameUsages/before/test/test.kt @@ -0,0 +1,3 @@ +fun foo(/*rename*/first: Int = 1) { + +} \ No newline at end of file diff --git a/idea/testData/refactoring/rename/renameKotlinFunctionParameterWithByNameUsages/renameKotlinFunctionParameterWithByNameUsages.test b/idea/testData/refactoring/rename/renameKotlinFunctionParameterWithByNameUsages/renameKotlinFunctionParameterWithByNameUsages.test new file mode 100644 index 00000000000..8996c6967e8 --- /dev/null +++ b/idea/testData/refactoring/rename/renameKotlinFunctionParameterWithByNameUsages/renameKotlinFunctionParameterWithByNameUsages.test @@ -0,0 +1,6 @@ +{ + "type": "MARKED_ELEMENT", + "mainFile": "test/test.kt", + "newName": "second", + "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 123bcd37c11..ebbb803be55 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/refactoring/rename/RenameTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/refactoring/rename/RenameTestGenerated.java @@ -738,6 +738,11 @@ public class RenameTestGenerated extends AbstractRenameTest { runTest("idea/testData/refactoring/rename/renameKotlinClassWithFile/kotlinClass.test"); } + @TestMetadata("renameKotlinConstructorParameterWithByNameUsages/renameKotlinConstructorParameterWithByNameUsages.test") + public void testRenameKotlinConstructorParameterWithByNameUsages_RenameKotlinConstructorParameterWithByNameUsages() throws Exception { + runTest("idea/testData/refactoring/rename/renameKotlinConstructorParameterWithByNameUsages/renameKotlinConstructorParameterWithByNameUsages.test"); + } + @TestMetadata("renameKotlinDataClassParameter/renameKotlinDataClassParameter.test") public void testRenameKotlinDataClassParameter_RenameKotlinDataClassParameter() throws Exception { runTest("idea/testData/refactoring/rename/renameKotlinDataClassParameter/renameKotlinDataClassParameter.test"); @@ -808,6 +813,11 @@ public class RenameTestGenerated extends AbstractRenameTest { runTest("idea/testData/refactoring/rename/renameKotlinFunctionInEnum/renameKotlinFunctionInEnumFromSubclass.test"); } + @TestMetadata("renameKotlinFunctionParameterWithByNameUsages/renameKotlinFunctionParameterWithByNameUsages.test") + public void testRenameKotlinFunctionParameterWithByNameUsages_RenameKotlinFunctionParameterWithByNameUsages() throws Exception { + runTest("idea/testData/refactoring/rename/renameKotlinFunctionParameterWithByNameUsages/renameKotlinFunctionParameterWithByNameUsages.test"); + } + @TestMetadata("renameKotlinFunWithJvmName/renameKotlinFunWithJvmName.test") public void testRenameKotlinFunWithJvmName_RenameKotlinFunWithJvmName() throws Exception { runTest("idea/testData/refactoring/rename/renameKotlinFunWithJvmName/renameKotlinFunWithJvmName.test");