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 0bf63f8071d..a88f854314c 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 @@ -132,7 +132,10 @@ class MoveKotlinFileHandler : MoveFileHandler() { val moveContext = MoveContext(file, moveProcessor) oldToNewMap[moveContext] = moveContext val packageNameInfo = file.getPackageNameInfo(moveDestination, true) ?: return - file.packageDirective?.fqName = packageNameInfo.newContainer.fqName!!.quoteIfNeeded() + val newFqName = packageNameInfo.newContainer.fqName + if (newFqName != null) { + file.packageDirective?.fqName = newFqName.quoteIfNeeded() + } } override fun updateMovedFile(file: PsiFile) { diff --git a/idea/testData/refactoring/moveMultiModule/moveFileToNonSrc/after/A/A.iml b/idea/testData/refactoring/moveMultiModule/moveFileToNonSrc/after/A/A.iml new file mode 100644 index 00000000000..245d3429faa --- /dev/null +++ b/idea/testData/refactoring/moveMultiModule/moveFileToNonSrc/after/A/A.iml @@ -0,0 +1,12 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/idea/testData/refactoring/moveMultiModule/moveFileToNonSrc/after/A/notSrc/dummy.txt b/idea/testData/refactoring/moveMultiModule/moveFileToNonSrc/after/A/notSrc/dummy.txt new file mode 100644 index 00000000000..e69de29bb2d diff --git a/idea/testData/refactoring/moveMultiModule/moveFileToNonSrc/after/A/notSrc/foo.kt b/idea/testData/refactoring/moveMultiModule/moveFileToNonSrc/after/A/notSrc/foo.kt new file mode 100644 index 00000000000..8db7f19bc92 --- /dev/null +++ b/idea/testData/refactoring/moveMultiModule/moveFileToNonSrc/after/A/notSrc/foo.kt @@ -0,0 +1,5 @@ +package test + +fun foo() { + +} \ No newline at end of file diff --git a/idea/testData/refactoring/moveMultiModule/moveFileToNonSrc/after/A/src/test/dummy.txt b/idea/testData/refactoring/moveMultiModule/moveFileToNonSrc/after/A/src/test/dummy.txt new file mode 100644 index 00000000000..e69de29bb2d diff --git a/idea/testData/refactoring/moveMultiModule/moveFileToNonSrc/before/A/A.iml b/idea/testData/refactoring/moveMultiModule/moveFileToNonSrc/before/A/A.iml new file mode 100644 index 00000000000..245d3429faa --- /dev/null +++ b/idea/testData/refactoring/moveMultiModule/moveFileToNonSrc/before/A/A.iml @@ -0,0 +1,12 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/idea/testData/refactoring/moveMultiModule/moveFileToNonSrc/before/A/notSrc/dummy.txt b/idea/testData/refactoring/moveMultiModule/moveFileToNonSrc/before/A/notSrc/dummy.txt new file mode 100644 index 00000000000..e69de29bb2d diff --git a/idea/testData/refactoring/moveMultiModule/moveFileToNonSrc/before/A/src/test/dummy.txt b/idea/testData/refactoring/moveMultiModule/moveFileToNonSrc/before/A/src/test/dummy.txt new file mode 100644 index 00000000000..e69de29bb2d diff --git a/idea/testData/refactoring/moveMultiModule/moveFileToNonSrc/before/A/src/test/foo.kt b/idea/testData/refactoring/moveMultiModule/moveFileToNonSrc/before/A/src/test/foo.kt new file mode 100644 index 00000000000..8db7f19bc92 --- /dev/null +++ b/idea/testData/refactoring/moveMultiModule/moveFileToNonSrc/before/A/src/test/foo.kt @@ -0,0 +1,5 @@ +package test + +fun foo() { + +} \ No newline at end of file diff --git a/idea/testData/refactoring/moveMultiModule/moveFileToNonSrc/moveFileToNonSrc.test b/idea/testData/refactoring/moveMultiModule/moveFileToNonSrc/moveFileToNonSrc.test new file mode 100644 index 00000000000..22752136f05 --- /dev/null +++ b/idea/testData/refactoring/moveMultiModule/moveFileToNonSrc/moveFileToNonSrc.test @@ -0,0 +1,5 @@ +{ + "mainFile": "A/src/test/foo.kt", + "type": "MOVE_FILES", + "targetDirectory": "A/notSrc" +} \ No newline at end of file diff --git a/idea/tests/org/jetbrains/kotlin/idea/refactoring/move/AbstractMoveTest.kt b/idea/tests/org/jetbrains/kotlin/idea/refactoring/move/AbstractMoveTest.kt index d5f46cb3666..ee20a47dae7 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/refactoring/move/AbstractMoveTest.kt +++ b/idea/tests/org/jetbrains/kotlin/idea/refactoring/move/AbstractMoveTest.kt @@ -261,12 +261,19 @@ enum class MoveAction { val project = mainFile.project val targetPackage = config.getNullableString("targetPackage") - if (targetPackage != null) { - ActionRunner.runInsideWriteAction { VfsUtil.createDirectoryIfMissing(rootDir, targetPackage.replace('.', '/')) } + val targetDirPath = targetPackage?.replace('.', '/') ?: config.getNullableString("targetDirectory") + if (targetDirPath != null) { + ActionRunner.runInsideWriteAction { VfsUtil.createDirectoryIfMissing(rootDir, targetDirPath) } + val newParent = if (targetPackage != null) { + JavaPsiFacade.getInstance(project).findPackage(targetPackage)!!.directories[0] + } + else { + rootDir.findFileByRelativePath(targetDirPath)!!.toPsiDirectory(project)!! + } MoveFilesOrDirectoriesProcessor( project, arrayOf(mainFile), - JavaPsiFacade.getInstance(project).findPackage(targetPackage)!!.directories[0], + newParent, /* searchInComments = */ false, /* searchInNonJavaFiles = */ true, /* moveCallback = */ null, diff --git a/idea/tests/org/jetbrains/kotlin/idea/refactoring/move/MultiModuleMoveTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/refactoring/move/MultiModuleMoveTestGenerated.java index 42215e7042c..7be9f39ada8 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/refactoring/move/MultiModuleMoveTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/refactoring/move/MultiModuleMoveTestGenerated.java @@ -48,6 +48,12 @@ public class MultiModuleMoveTestGenerated extends AbstractMultiModuleMoveTest { doTest(fileName); } + @TestMetadata("moveFileToNonSrc/moveFileToNonSrc.test") + public void testMoveFileToNonSrc_MoveFileToNonSrc() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/refactoring/moveMultiModule/moveFileToNonSrc/moveFileToNonSrc.test"); + doTest(fileName); + } + @TestMetadata("moveFileWithDeclarationsToUnrelatedModuleConflict/moveFileWithDeclarationsToUnrelatedModuleConflict.test") public void testMoveFileWithDeclarationsToUnrelatedModuleConflict_MoveFileWithDeclarationsToUnrelatedModuleConflict() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("idea/testData/refactoring/moveMultiModule/moveFileWithDeclarationsToUnrelatedModuleConflict/moveFileWithDeclarationsToUnrelatedModuleConflict.test");