From da6b8b75eae5b064c7bfa15c0fe1e3f4e0409b6e Mon Sep 17 00:00:00 2001 From: Alexey Sedunov Date: Fri, 15 May 2015 14:50:14 +0300 Subject: [PATCH] Move File/Change Package: Change package directive prior to processing of internal usages (otherwise some necessary imports are not added) --- .../changePackage/KotlinChangePackageRefactoring.kt | 2 +- .../moveFilesOrDirectories/MoveKotlinFileHandler.kt | 3 ++- .../addExtensionImport/addExtensionImport.test | 5 +++++ .../addExtensionImport/after/source/bar.kt | 7 +++++++ .../addExtensionImport/after/source/foo.kt | 9 +++++++++ .../addExtensionImport/before/source/bar.kt | 5 +++++ .../addExtensionImport/before/source/foo.kt | 7 +++++++ .../addExtensionImport/addExtensionImport.test | 5 +++++ .../moveFile/addExtensionImport/after/source/bar.kt | 7 +++++++ .../moveFile/addExtensionImport/after/target/foo.kt | 9 +++++++++ .../moveFile/addExtensionImport/before/source/bar.kt | 5 +++++ .../moveFile/addExtensionImport/before/source/foo.kt | 7 +++++++ .../idea/refactoring/move/JetMoveTestGenerated.java | 12 ++++++++++++ 13 files changed, 81 insertions(+), 2 deletions(-) create mode 100644 idea/testData/refactoring/move/kotlin/changePackage/addExtensionImport/addExtensionImport.test create mode 100644 idea/testData/refactoring/move/kotlin/changePackage/addExtensionImport/after/source/bar.kt create mode 100644 idea/testData/refactoring/move/kotlin/changePackage/addExtensionImport/after/source/foo.kt create mode 100644 idea/testData/refactoring/move/kotlin/changePackage/addExtensionImport/before/source/bar.kt create mode 100644 idea/testData/refactoring/move/kotlin/changePackage/addExtensionImport/before/source/foo.kt create mode 100644 idea/testData/refactoring/move/kotlin/moveFile/addExtensionImport/addExtensionImport.test create mode 100644 idea/testData/refactoring/move/kotlin/moveFile/addExtensionImport/after/source/bar.kt create mode 100644 idea/testData/refactoring/move/kotlin/moveFile/addExtensionImport/after/target/foo.kt create mode 100644 idea/testData/refactoring/move/kotlin/moveFile/addExtensionImport/before/source/bar.kt create mode 100644 idea/testData/refactoring/move/kotlin/moveFile/addExtensionImport/before/source/foo.kt diff --git a/idea/src/org/jetbrains/kotlin/idea/refactoring/move/changePackage/KotlinChangePackageRefactoring.kt b/idea/src/org/jetbrains/kotlin/idea/refactoring/move/changePackage/KotlinChangePackageRefactoring.kt index 1d95b095668..6c6fee53952 100644 --- a/idea/src/org/jetbrains/kotlin/idea/refactoring/move/changePackage/KotlinChangePackageRefactoring.kt +++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/move/changePackage/KotlinChangePackageRefactoring.kt @@ -61,8 +61,8 @@ public class KotlinChangePackageRefactoring(val file: JetFile) { val internalUsages = file.getInternalReferencesToUpdateOnPackageNameChange(PackageNameInfo(currentFqName, newFqName)) project.executeWriteCommand("Change file's package to '${newFqName.asString()}'") { - postProcessMoveUsages(internalUsages) packageDirective.setFqName(newFqName) + postProcessMoveUsages(internalUsages) project.runWithElementsToShortenIsEmptyIgnored { declarationProcessor.execute(declarationUsages) } } } diff --git a/idea/src/org/jetbrains/kotlin/idea/refactoring/move/moveFilesOrDirectories/MoveKotlinFileHandler.kt b/idea/src/org/jetbrains/kotlin/idea/refactoring/move/moveFilesOrDirectories/MoveKotlinFileHandler.kt index 72ebab00922..db4fc06c539 100644 --- a/idea/src/org/jetbrains/kotlin/idea/refactoring/move/moveFilesOrDirectories/MoveKotlinFileHandler.kt +++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/move/moveFilesOrDirectories/MoveKotlinFileHandler.kt @@ -94,8 +94,9 @@ public class MoveKotlinFileHandler : MoveFileHandler() { if (file !is JetFile) return val packageNameInfo = packageNameInfo ?: return - postProcessMoveUsages(file.getInternalReferencesToUpdateOnPackageNameChange(packageNameInfo)) + val internalUsages = file.getInternalReferencesToUpdateOnPackageNameChange(packageNameInfo) file.getPackageDirective()?.setFqName(packageNameInfo.newPackageName) + postProcessMoveUsages(internalUsages) } override fun retargetUsages(usageInfos: List?, oldToNewMap: Map?) { diff --git a/idea/testData/refactoring/move/kotlin/changePackage/addExtensionImport/addExtensionImport.test b/idea/testData/refactoring/move/kotlin/changePackage/addExtensionImport/addExtensionImport.test new file mode 100644 index 00000000000..8a40c9f83a0 --- /dev/null +++ b/idea/testData/refactoring/move/kotlin/changePackage/addExtensionImport/addExtensionImport.test @@ -0,0 +1,5 @@ +{ + "mainFile": "source/foo.kt", + "type": "CHANGE_PACKAGE_DIRECTIVE", + "newPackageName": "source" +} \ No newline at end of file diff --git a/idea/testData/refactoring/move/kotlin/changePackage/addExtensionImport/after/source/bar.kt b/idea/testData/refactoring/move/kotlin/changePackage/addExtensionImport/after/source/bar.kt new file mode 100644 index 00000000000..3db75e08e97 --- /dev/null +++ b/idea/testData/refactoring/move/kotlin/changePackage/addExtensionImport/after/source/bar.kt @@ -0,0 +1,7 @@ +package target + +import source.C + +fun C.foo() { + +} \ No newline at end of file diff --git a/idea/testData/refactoring/move/kotlin/changePackage/addExtensionImport/after/source/foo.kt b/idea/testData/refactoring/move/kotlin/changePackage/addExtensionImport/after/source/foo.kt new file mode 100644 index 00000000000..c3d4fb89a5d --- /dev/null +++ b/idea/testData/refactoring/move/kotlin/changePackage/addExtensionImport/after/source/foo.kt @@ -0,0 +1,9 @@ +package source + +import target.foo + +class C + +fun test(c: C) { + c.foo() +} \ No newline at end of file diff --git a/idea/testData/refactoring/move/kotlin/changePackage/addExtensionImport/before/source/bar.kt b/idea/testData/refactoring/move/kotlin/changePackage/addExtensionImport/before/source/bar.kt new file mode 100644 index 00000000000..7a573138c9c --- /dev/null +++ b/idea/testData/refactoring/move/kotlin/changePackage/addExtensionImport/before/source/bar.kt @@ -0,0 +1,5 @@ +package target + +fun C.foo() { + +} \ No newline at end of file diff --git a/idea/testData/refactoring/move/kotlin/changePackage/addExtensionImport/before/source/foo.kt b/idea/testData/refactoring/move/kotlin/changePackage/addExtensionImport/before/source/foo.kt new file mode 100644 index 00000000000..7e8ee08cb26 --- /dev/null +++ b/idea/testData/refactoring/move/kotlin/changePackage/addExtensionImport/before/source/foo.kt @@ -0,0 +1,7 @@ +package target + +class C + +fun test(c: C) { + c.foo() +} \ No newline at end of file diff --git a/idea/testData/refactoring/move/kotlin/moveFile/addExtensionImport/addExtensionImport.test b/idea/testData/refactoring/move/kotlin/moveFile/addExtensionImport/addExtensionImport.test new file mode 100644 index 00000000000..d0143c02c20 --- /dev/null +++ b/idea/testData/refactoring/move/kotlin/moveFile/addExtensionImport/addExtensionImport.test @@ -0,0 +1,5 @@ +{ + "mainFile": "source/foo.kt", + "type": "MOVE_FILES", + "targetPackage": "target" +} \ No newline at end of file diff --git a/idea/testData/refactoring/move/kotlin/moveFile/addExtensionImport/after/source/bar.kt b/idea/testData/refactoring/move/kotlin/moveFile/addExtensionImport/after/source/bar.kt new file mode 100644 index 00000000000..820681ce27a --- /dev/null +++ b/idea/testData/refactoring/move/kotlin/moveFile/addExtensionImport/after/source/bar.kt @@ -0,0 +1,7 @@ +package source + +import target.C + +fun C.foo() { + +} \ No newline at end of file diff --git a/idea/testData/refactoring/move/kotlin/moveFile/addExtensionImport/after/target/foo.kt b/idea/testData/refactoring/move/kotlin/moveFile/addExtensionImport/after/target/foo.kt new file mode 100644 index 00000000000..5f4f7acc617 --- /dev/null +++ b/idea/testData/refactoring/move/kotlin/moveFile/addExtensionImport/after/target/foo.kt @@ -0,0 +1,9 @@ +package target + +import source.foo + +class C + +fun test(c: C) { + c.foo() +} \ No newline at end of file diff --git a/idea/testData/refactoring/move/kotlin/moveFile/addExtensionImport/before/source/bar.kt b/idea/testData/refactoring/move/kotlin/moveFile/addExtensionImport/before/source/bar.kt new file mode 100644 index 00000000000..0bd7a6914be --- /dev/null +++ b/idea/testData/refactoring/move/kotlin/moveFile/addExtensionImport/before/source/bar.kt @@ -0,0 +1,5 @@ +package source + +fun C.foo() { + +} \ No newline at end of file diff --git a/idea/testData/refactoring/move/kotlin/moveFile/addExtensionImport/before/source/foo.kt b/idea/testData/refactoring/move/kotlin/moveFile/addExtensionImport/before/source/foo.kt new file mode 100644 index 00000000000..ec595a5a2f5 --- /dev/null +++ b/idea/testData/refactoring/move/kotlin/moveFile/addExtensionImport/before/source/foo.kt @@ -0,0 +1,7 @@ +package source + +class C + +fun test(c: C) { + c.foo() +} \ No newline at end of file diff --git a/idea/tests/org/jetbrains/kotlin/idea/refactoring/move/JetMoveTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/refactoring/move/JetMoveTestGenerated.java index e202a57b810..45999ad55ec 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/refactoring/move/JetMoveTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/refactoring/move/JetMoveTestGenerated.java @@ -209,6 +209,12 @@ public class JetMoveTestGenerated extends AbstractJetMoveTest { doTest(fileName); } + @TestMetadata("kotlin/changePackage/addExtensionImport/addExtensionImport.test") + public void testKotlin_changePackage_addExtensionImport_AddExtensionImport() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/refactoring/move/kotlin/changePackage/addExtensionImport/addExtensionImport.test"); + doTest(fileName); + } + @TestMetadata("kotlin/changePackage/changeToDefaultPackage/changeToDefaultPackage.test") public void testKotlin_changePackage_changeToDefaultPackage_ChangeToDefaultPackage() throws Exception { String fileName = JetTestUtils.navigationMetadata("idea/testData/refactoring/move/kotlin/changePackage/changeToDefaultPackage/changeToDefaultPackage.test"); @@ -221,6 +227,12 @@ public class JetMoveTestGenerated extends AbstractJetMoveTest { doTest(fileName); } + @TestMetadata("kotlin/moveFile/addExtensionImport/addExtensionImport.test") + public void testKotlin_moveFile_addExtensionImport_AddExtensionImport() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/refactoring/move/kotlin/moveFile/addExtensionImport/addExtensionImport.test"); + doTest(fileName); + } + @TestMetadata("kotlin/moveFile/internalReferences/internalReferences.test") public void testKotlin_moveFile_internalReferences_InternalReferences() throws Exception { String fileName = JetTestUtils.navigationMetadata("idea/testData/refactoring/move/kotlin/moveFile/internalReferences/internalReferences.test");