diff --git a/idea/src/org/jetbrains/kotlin/idea/refactoring/rename/RenameKotlinClassifierProcessor.kt b/idea/src/org/jetbrains/kotlin/idea/refactoring/rename/RenameKotlinClassifierProcessor.kt index ea53ab3ec57..77b382838d7 100644 --- a/idea/src/org/jetbrains/kotlin/idea/refactoring/rename/RenameKotlinClassifierProcessor.kt +++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/rename/RenameKotlinClassifierProcessor.kt @@ -30,6 +30,7 @@ import org.jetbrains.kotlin.asJava.namedUnwrappedElement import org.jetbrains.kotlin.descriptors.ClassifierDescriptor import org.jetbrains.kotlin.idea.caches.resolve.analyze import org.jetbrains.kotlin.idea.caches.resolve.unsafeResolveToDescriptor +import org.jetbrains.kotlin.idea.refactoring.withExpectedActuals import org.jetbrains.kotlin.idea.references.KtSimpleNameReference import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.resolve.BindingContext @@ -61,15 +62,16 @@ class RenameKotlinClassifierProcessor : RenameKotlinPsiProcessor() { val classOrObject = getClassOrObject(element) as? KtClassOrObject ?: return - val file = classOrObject.containingKtFile - - val virtualFile = file.virtualFile - if (virtualFile != null) { - val nameWithoutExtensions = virtualFile.nameWithoutExtension - if (nameWithoutExtensions == classOrObject.name) { - val newFileName = newName + "." + virtualFile.extension - allRenames.put(file, newFileName) - RenamePsiElementProcessor.forElement(file).prepareRenaming(file, newFileName, allRenames) + classOrObject.withExpectedActuals().forEach { + val file = it.containingKtFile + val virtualFile = file.virtualFile + if (virtualFile != null) { + val nameWithoutExtensions = virtualFile.nameWithoutExtension + if (nameWithoutExtensions == it.name) { + val newFileName = newName + "." + virtualFile.extension + allRenames.put(file, newFileName) + RenamePsiElementProcessor.forElement(file).prepareRenaming(file, newFileName, allRenames) + } } } } diff --git a/idea/src/org/jetbrains/kotlin/idea/refactoring/rename/RenameKotlinClassifierProcessor.kt.173 b/idea/src/org/jetbrains/kotlin/idea/refactoring/rename/RenameKotlinClassifierProcessor.kt.173 index ba039fbf423..df27f800aa8 100644 --- a/idea/src/org/jetbrains/kotlin/idea/refactoring/rename/RenameKotlinClassifierProcessor.kt.173 +++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/rename/RenameKotlinClassifierProcessor.kt.173 @@ -30,6 +30,7 @@ import org.jetbrains.kotlin.asJava.namedUnwrappedElement import org.jetbrains.kotlin.descriptors.ClassifierDescriptor import org.jetbrains.kotlin.idea.caches.resolve.analyze import org.jetbrains.kotlin.idea.caches.resolve.unsafeResolveToDescriptor +import org.jetbrains.kotlin.idea.refactoring.withExpectedActuals import org.jetbrains.kotlin.idea.references.KtSimpleNameReference import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.resolve.BindingContext @@ -61,15 +62,16 @@ class RenameKotlinClassifierProcessor : RenameKotlinPsiProcessor() { val classOrObject = getClassOrObject(element) as? KtClassOrObject ?: return - val file = classOrObject.containingKtFile - - val virtualFile = file.virtualFile - if (virtualFile != null) { - val nameWithoutExtensions = virtualFile.nameWithoutExtension - if (nameWithoutExtensions == classOrObject.name) { - val newFileName = newName + "." + virtualFile.extension - allRenames.put(file, newFileName) - RenamePsiElementProcessor.forElement(file).prepareRenaming(file, newFileName, allRenames) + classOrObject.withExpectedActuals().forEach { + val file = it.containingKtFile + val virtualFile = file.virtualFile + if (virtualFile != null) { + val nameWithoutExtensions = virtualFile.nameWithoutExtension + if (nameWithoutExtensions == it.name) { + val newFileName = newName + "." + virtualFile.extension + allRenames.put(file, newFileName) + RenamePsiElementProcessor.forElement(file).prepareRenaming(file, newFileName, allRenames) + } } } } diff --git a/idea/testData/refactoring/renameMultiModule/headersAndImplsByHeaderClassWithFileNames/after/Common/Common.iml b/idea/testData/refactoring/renameMultiModule/headersAndImplsByHeaderClassWithFileNames/after/Common/Common.iml new file mode 100644 index 00000000000..0ecf9949f6c --- /dev/null +++ b/idea/testData/refactoring/renameMultiModule/headersAndImplsByHeaderClassWithFileNames/after/Common/Common.iml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/idea/testData/refactoring/renameMultiModule/headersAndImplsByHeaderClassWithFileNames/after/Common/src/test/Baz.kt b/idea/testData/refactoring/renameMultiModule/headersAndImplsByHeaderClassWithFileNames/after/Common/src/test/Baz.kt new file mode 100644 index 00000000000..8ad57c097fd --- /dev/null +++ b/idea/testData/refactoring/renameMultiModule/headersAndImplsByHeaderClassWithFileNames/after/Common/src/test/Baz.kt @@ -0,0 +1,9 @@ +package test + +expect class Baz +expect class Bar + +fun test() { + val baz: Baz = Baz() + val bar: Bar = Bar() +} \ No newline at end of file diff --git a/idea/testData/refactoring/renameMultiModule/headersAndImplsByHeaderClassWithFileNames/after/JS/JS.iml b/idea/testData/refactoring/renameMultiModule/headersAndImplsByHeaderClassWithFileNames/after/JS/JS.iml new file mode 100644 index 00000000000..3de270f43fa --- /dev/null +++ b/idea/testData/refactoring/renameMultiModule/headersAndImplsByHeaderClassWithFileNames/after/JS/JS.iml @@ -0,0 +1,21 @@ + + + + + + Common + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/idea/testData/refactoring/renameMultiModule/headersAndImplsByHeaderClassWithFileNames/after/JS/src/test/test.kt b/idea/testData/refactoring/renameMultiModule/headersAndImplsByHeaderClassWithFileNames/after/JS/src/test/test.kt new file mode 100644 index 00000000000..65e2d16ad2e --- /dev/null +++ b/idea/testData/refactoring/renameMultiModule/headersAndImplsByHeaderClassWithFileNames/after/JS/src/test/test.kt @@ -0,0 +1,9 @@ +package test + +actual class Baz +actual class Bar + +fun test() { + val baz: Baz = Baz() + val bar: Bar = Bar() +} \ No newline at end of file diff --git a/idea/testData/refactoring/renameMultiModule/headersAndImplsByHeaderClassWithFileNames/after/JVM/JVM.iml b/idea/testData/refactoring/renameMultiModule/headersAndImplsByHeaderClassWithFileNames/after/JVM/JVM.iml new file mode 100644 index 00000000000..76d2b885834 --- /dev/null +++ b/idea/testData/refactoring/renameMultiModule/headersAndImplsByHeaderClassWithFileNames/after/JVM/JVM.iml @@ -0,0 +1,21 @@ + + + + + + Common + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/idea/testData/refactoring/renameMultiModule/headersAndImplsByHeaderClassWithFileNames/after/JVM/src/test/Baz.kt b/idea/testData/refactoring/renameMultiModule/headersAndImplsByHeaderClassWithFileNames/after/JVM/src/test/Baz.kt new file mode 100644 index 00000000000..65e2d16ad2e --- /dev/null +++ b/idea/testData/refactoring/renameMultiModule/headersAndImplsByHeaderClassWithFileNames/after/JVM/src/test/Baz.kt @@ -0,0 +1,9 @@ +package test + +actual class Baz +actual class Bar + +fun test() { + val baz: Baz = Baz() + val bar: Bar = Bar() +} \ No newline at end of file diff --git a/idea/testData/refactoring/renameMultiModule/headersAndImplsByHeaderClassWithFileNames/before/Common/Common.iml b/idea/testData/refactoring/renameMultiModule/headersAndImplsByHeaderClassWithFileNames/before/Common/Common.iml new file mode 100644 index 00000000000..0ecf9949f6c --- /dev/null +++ b/idea/testData/refactoring/renameMultiModule/headersAndImplsByHeaderClassWithFileNames/before/Common/Common.iml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/idea/testData/refactoring/renameMultiModule/headersAndImplsByHeaderClassWithFileNames/before/Common/src/test/Foo.kt b/idea/testData/refactoring/renameMultiModule/headersAndImplsByHeaderClassWithFileNames/before/Common/src/test/Foo.kt new file mode 100644 index 00000000000..619dd8a8618 --- /dev/null +++ b/idea/testData/refactoring/renameMultiModule/headersAndImplsByHeaderClassWithFileNames/before/Common/src/test/Foo.kt @@ -0,0 +1,9 @@ +package test + +expect class /*rename*/Foo +expect class Bar + +fun test() { + val foo: Foo = Foo() + val bar: Bar = Bar() +} \ No newline at end of file diff --git a/idea/testData/refactoring/renameMultiModule/headersAndImplsByHeaderClassWithFileNames/before/JS/JS.iml b/idea/testData/refactoring/renameMultiModule/headersAndImplsByHeaderClassWithFileNames/before/JS/JS.iml new file mode 100644 index 00000000000..3de270f43fa --- /dev/null +++ b/idea/testData/refactoring/renameMultiModule/headersAndImplsByHeaderClassWithFileNames/before/JS/JS.iml @@ -0,0 +1,21 @@ + + + + + + Common + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/idea/testData/refactoring/renameMultiModule/headersAndImplsByHeaderClassWithFileNames/before/JS/src/test/test.kt b/idea/testData/refactoring/renameMultiModule/headersAndImplsByHeaderClassWithFileNames/before/JS/src/test/test.kt new file mode 100644 index 00000000000..c89a91e72c9 --- /dev/null +++ b/idea/testData/refactoring/renameMultiModule/headersAndImplsByHeaderClassWithFileNames/before/JS/src/test/test.kt @@ -0,0 +1,9 @@ +package test + +actual class Foo +actual class Bar + +fun test() { + val foo: Foo = Foo() + val bar: Bar = Bar() +} \ No newline at end of file diff --git a/idea/testData/refactoring/renameMultiModule/headersAndImplsByHeaderClassWithFileNames/before/JVM/JVM.iml b/idea/testData/refactoring/renameMultiModule/headersAndImplsByHeaderClassWithFileNames/before/JVM/JVM.iml new file mode 100644 index 00000000000..76d2b885834 --- /dev/null +++ b/idea/testData/refactoring/renameMultiModule/headersAndImplsByHeaderClassWithFileNames/before/JVM/JVM.iml @@ -0,0 +1,21 @@ + + + + + + Common + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/idea/testData/refactoring/renameMultiModule/headersAndImplsByHeaderClassWithFileNames/before/JVM/src/test/Foo.kt b/idea/testData/refactoring/renameMultiModule/headersAndImplsByHeaderClassWithFileNames/before/JVM/src/test/Foo.kt new file mode 100644 index 00000000000..c89a91e72c9 --- /dev/null +++ b/idea/testData/refactoring/renameMultiModule/headersAndImplsByHeaderClassWithFileNames/before/JVM/src/test/Foo.kt @@ -0,0 +1,9 @@ +package test + +actual class Foo +actual class Bar + +fun test() { + val foo: Foo = Foo() + val bar: Bar = Bar() +} \ No newline at end of file diff --git a/idea/testData/refactoring/renameMultiModule/headersAndImplsByHeaderClassWithFileNames/headersAndImplsByHeaderClassWithFileNames.test b/idea/testData/refactoring/renameMultiModule/headersAndImplsByHeaderClassWithFileNames/headersAndImplsByHeaderClassWithFileNames.test new file mode 100644 index 00000000000..00a2af7afeb --- /dev/null +++ b/idea/testData/refactoring/renameMultiModule/headersAndImplsByHeaderClassWithFileNames/headersAndImplsByHeaderClassWithFileNames.test @@ -0,0 +1,6 @@ +{ + "type": "MARKED_ELEMENT", + "file": "Common/src/test/Foo.kt", + "newName": "Baz", + "isMultiModule": "true" +} \ No newline at end of file diff --git a/idea/testData/refactoring/renameMultiModule/headersAndImplsByImplClassWithFileNames/after/Common/Common.iml b/idea/testData/refactoring/renameMultiModule/headersAndImplsByImplClassWithFileNames/after/Common/Common.iml new file mode 100644 index 00000000000..0ecf9949f6c --- /dev/null +++ b/idea/testData/refactoring/renameMultiModule/headersAndImplsByImplClassWithFileNames/after/Common/Common.iml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/idea/testData/refactoring/renameMultiModule/headersAndImplsByImplClassWithFileNames/after/Common/src/test/Baz.kt b/idea/testData/refactoring/renameMultiModule/headersAndImplsByImplClassWithFileNames/after/Common/src/test/Baz.kt new file mode 100644 index 00000000000..8ad57c097fd --- /dev/null +++ b/idea/testData/refactoring/renameMultiModule/headersAndImplsByImplClassWithFileNames/after/Common/src/test/Baz.kt @@ -0,0 +1,9 @@ +package test + +expect class Baz +expect class Bar + +fun test() { + val baz: Baz = Baz() + val bar: Bar = Bar() +} \ No newline at end of file diff --git a/idea/testData/refactoring/renameMultiModule/headersAndImplsByImplClassWithFileNames/after/JS/JS.iml b/idea/testData/refactoring/renameMultiModule/headersAndImplsByImplClassWithFileNames/after/JS/JS.iml new file mode 100644 index 00000000000..3de270f43fa --- /dev/null +++ b/idea/testData/refactoring/renameMultiModule/headersAndImplsByImplClassWithFileNames/after/JS/JS.iml @@ -0,0 +1,21 @@ + + + + + + Common + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/idea/testData/refactoring/renameMultiModule/headersAndImplsByImplClassWithFileNames/after/JS/src/test/Baz.kt b/idea/testData/refactoring/renameMultiModule/headersAndImplsByImplClassWithFileNames/after/JS/src/test/Baz.kt new file mode 100644 index 00000000000..65e2d16ad2e --- /dev/null +++ b/idea/testData/refactoring/renameMultiModule/headersAndImplsByImplClassWithFileNames/after/JS/src/test/Baz.kt @@ -0,0 +1,9 @@ +package test + +actual class Baz +actual class Bar + +fun test() { + val baz: Baz = Baz() + val bar: Bar = Bar() +} \ No newline at end of file diff --git a/idea/testData/refactoring/renameMultiModule/headersAndImplsByImplClassWithFileNames/after/JVM/JVM.iml b/idea/testData/refactoring/renameMultiModule/headersAndImplsByImplClassWithFileNames/after/JVM/JVM.iml new file mode 100644 index 00000000000..76d2b885834 --- /dev/null +++ b/idea/testData/refactoring/renameMultiModule/headersAndImplsByImplClassWithFileNames/after/JVM/JVM.iml @@ -0,0 +1,21 @@ + + + + + + Common + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/idea/testData/refactoring/renameMultiModule/headersAndImplsByImplClassWithFileNames/after/JVM/src/test/test.kt b/idea/testData/refactoring/renameMultiModule/headersAndImplsByImplClassWithFileNames/after/JVM/src/test/test.kt new file mode 100644 index 00000000000..65e2d16ad2e --- /dev/null +++ b/idea/testData/refactoring/renameMultiModule/headersAndImplsByImplClassWithFileNames/after/JVM/src/test/test.kt @@ -0,0 +1,9 @@ +package test + +actual class Baz +actual class Bar + +fun test() { + val baz: Baz = Baz() + val bar: Bar = Bar() +} \ No newline at end of file diff --git a/idea/testData/refactoring/renameMultiModule/headersAndImplsByImplClassWithFileNames/before/Common/Common.iml b/idea/testData/refactoring/renameMultiModule/headersAndImplsByImplClassWithFileNames/before/Common/Common.iml new file mode 100644 index 00000000000..0ecf9949f6c --- /dev/null +++ b/idea/testData/refactoring/renameMultiModule/headersAndImplsByImplClassWithFileNames/before/Common/Common.iml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/idea/testData/refactoring/renameMultiModule/headersAndImplsByImplClassWithFileNames/before/Common/src/test/Foo.kt b/idea/testData/refactoring/renameMultiModule/headersAndImplsByImplClassWithFileNames/before/Common/src/test/Foo.kt new file mode 100644 index 00000000000..3b14697a795 --- /dev/null +++ b/idea/testData/refactoring/renameMultiModule/headersAndImplsByImplClassWithFileNames/before/Common/src/test/Foo.kt @@ -0,0 +1,9 @@ +package test + +expect class Foo +expect class Bar + +fun test() { + val foo: Foo = Foo() + val bar: Bar = Bar() +} \ No newline at end of file diff --git a/idea/testData/refactoring/renameMultiModule/headersAndImplsByImplClassWithFileNames/before/JS/JS.iml b/idea/testData/refactoring/renameMultiModule/headersAndImplsByImplClassWithFileNames/before/JS/JS.iml new file mode 100644 index 00000000000..3de270f43fa --- /dev/null +++ b/idea/testData/refactoring/renameMultiModule/headersAndImplsByImplClassWithFileNames/before/JS/JS.iml @@ -0,0 +1,21 @@ + + + + + + Common + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/idea/testData/refactoring/renameMultiModule/headersAndImplsByImplClassWithFileNames/before/JS/src/test/Foo.kt b/idea/testData/refactoring/renameMultiModule/headersAndImplsByImplClassWithFileNames/before/JS/src/test/Foo.kt new file mode 100644 index 00000000000..bea2489bd44 --- /dev/null +++ b/idea/testData/refactoring/renameMultiModule/headersAndImplsByImplClassWithFileNames/before/JS/src/test/Foo.kt @@ -0,0 +1,9 @@ +package test + +actual class /*rename*/Foo +actual class Bar + +fun test() { + val foo: Foo = Foo() + val bar: Bar = Bar() +} \ No newline at end of file diff --git a/idea/testData/refactoring/renameMultiModule/headersAndImplsByImplClassWithFileNames/before/JVM/JVM.iml b/idea/testData/refactoring/renameMultiModule/headersAndImplsByImplClassWithFileNames/before/JVM/JVM.iml new file mode 100644 index 00000000000..76d2b885834 --- /dev/null +++ b/idea/testData/refactoring/renameMultiModule/headersAndImplsByImplClassWithFileNames/before/JVM/JVM.iml @@ -0,0 +1,21 @@ + + + + + + Common + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/idea/testData/refactoring/renameMultiModule/headersAndImplsByImplClassWithFileNames/before/JVM/src/test/test.kt b/idea/testData/refactoring/renameMultiModule/headersAndImplsByImplClassWithFileNames/before/JVM/src/test/test.kt new file mode 100644 index 00000000000..c89a91e72c9 --- /dev/null +++ b/idea/testData/refactoring/renameMultiModule/headersAndImplsByImplClassWithFileNames/before/JVM/src/test/test.kt @@ -0,0 +1,9 @@ +package test + +actual class Foo +actual class Bar + +fun test() { + val foo: Foo = Foo() + val bar: Bar = Bar() +} \ No newline at end of file diff --git a/idea/testData/refactoring/renameMultiModule/headersAndImplsByImplClassWithFileNames/headersAndImplsByImplClassWithFileNames.test b/idea/testData/refactoring/renameMultiModule/headersAndImplsByImplClassWithFileNames/headersAndImplsByImplClassWithFileNames.test new file mode 100644 index 00000000000..83016bba5da --- /dev/null +++ b/idea/testData/refactoring/renameMultiModule/headersAndImplsByImplClassWithFileNames/headersAndImplsByImplClassWithFileNames.test @@ -0,0 +1,6 @@ +{ + "type": "MARKED_ELEMENT", + "file": "JS/src/test/Foo.kt", + "newName": "Baz", + "isMultiModule": "true" +} \ No newline at end of file diff --git a/idea/tests/org/jetbrains/kotlin/idea/refactoring/rename/MultiModuleRenameTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/refactoring/rename/MultiModuleRenameTestGenerated.java index ac21287603f..95256feff68 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/refactoring/rename/MultiModuleRenameTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/refactoring/rename/MultiModuleRenameTestGenerated.java @@ -74,6 +74,11 @@ public class MultiModuleRenameTestGenerated extends AbstractMultiModuleRenameTes runTest("idea/testData/refactoring/renameMultiModule/headersAndImplsByHeaderClassSecondaryConstructorParameter/headersAndImplsByHeaderClassSecondaryConstructorParameter.test"); } + @TestMetadata("headersAndImplsByHeaderClassWithFileNames/headersAndImplsByHeaderClassWithFileNames.test") + public void testHeadersAndImplsByHeaderClassWithFileNames_HeadersAndImplsByHeaderClassWithFileNames() throws Exception { + runTest("idea/testData/refactoring/renameMultiModule/headersAndImplsByHeaderClassWithFileNames/headersAndImplsByHeaderClassWithFileNames.test"); + } + @TestMetadata("headersAndImplsByHeaderFun/headersAndImplsByHeaderFun.test") public void testHeadersAndImplsByHeaderFun_HeadersAndImplsByHeaderFun() throws Exception { runTest("idea/testData/refactoring/renameMultiModule/headersAndImplsByHeaderFun/headersAndImplsByHeaderFun.test"); @@ -119,6 +124,11 @@ public class MultiModuleRenameTestGenerated extends AbstractMultiModuleRenameTes runTest("idea/testData/refactoring/renameMultiModule/headersAndImplsByImplClassSecondaryConstructorParameter/headersAndImplsByImplClassSecondaryConstructorParameter.test"); } + @TestMetadata("headersAndImplsByImplClassWithFileNames/headersAndImplsByImplClassWithFileNames.test") + public void testHeadersAndImplsByImplClassWithFileNames_HeadersAndImplsByImplClassWithFileNames() throws Exception { + runTest("idea/testData/refactoring/renameMultiModule/headersAndImplsByImplClassWithFileNames/headersAndImplsByImplClassWithFileNames.test"); + } + @TestMetadata("headersAndImplsByImplFun/headersAndImplsByImplFun.test") public void testHeadersAndImplsByImplFun_HeadersAndImplsByImplFun() throws Exception { runTest("idea/testData/refactoring/renameMultiModule/headersAndImplsByImplFun/headersAndImplsByImplFun.test");