diff --git a/idea/src/org/jetbrains/jet/plugin/refactoring/move/JetMoveFilesOrDirectoriesHandler.java b/idea/src/org/jetbrains/jet/plugin/refactoring/move/JetMoveFilesOrDirectoriesHandler.java index 0248df0aef5..1f3a732e9d9 100644 --- a/idea/src/org/jetbrains/jet/plugin/refactoring/move/JetMoveFilesOrDirectoriesHandler.java +++ b/idea/src/org/jetbrains/jet/plugin/refactoring/move/JetMoveFilesOrDirectoriesHandler.java @@ -49,7 +49,7 @@ public class JetMoveFilesOrDirectoriesHandler extends MoveFilesOrDirectoriesHand return false; } } - return true; + return super.canMove(elements, targetContainer); } @Override diff --git a/idea/testData/refactoring/move/kotlin/moveFile/moveFileToFile/after/test.txt b/idea/testData/refactoring/move/kotlin/moveFile/moveFileToFile/after/test.txt new file mode 100644 index 00000000000..30d74d25844 --- /dev/null +++ b/idea/testData/refactoring/move/kotlin/moveFile/moveFileToFile/after/test.txt @@ -0,0 +1 @@ +test \ No newline at end of file diff --git a/idea/testData/refactoring/move/kotlin/moveFile/moveFileToFile/after/test.xml b/idea/testData/refactoring/move/kotlin/moveFile/moveFileToFile/after/test.xml new file mode 100644 index 00000000000..9a3533d6539 --- /dev/null +++ b/idea/testData/refactoring/move/kotlin/moveFile/moveFileToFile/after/test.xml @@ -0,0 +1,3 @@ + + Test + \ No newline at end of file diff --git a/idea/testData/refactoring/move/kotlin/moveFile/moveFileToFile/before/test.txt b/idea/testData/refactoring/move/kotlin/moveFile/moveFileToFile/before/test.txt new file mode 100644 index 00000000000..30d74d25844 --- /dev/null +++ b/idea/testData/refactoring/move/kotlin/moveFile/moveFileToFile/before/test.txt @@ -0,0 +1 @@ +test \ No newline at end of file diff --git a/idea/testData/refactoring/move/kotlin/moveFile/moveFileToFile/before/test.xml b/idea/testData/refactoring/move/kotlin/moveFile/moveFileToFile/before/test.xml new file mode 100644 index 00000000000..9a3533d6539 --- /dev/null +++ b/idea/testData/refactoring/move/kotlin/moveFile/moveFileToFile/before/test.xml @@ -0,0 +1,3 @@ + + Test + \ No newline at end of file diff --git a/idea/testData/refactoring/move/kotlin/moveFile/moveFileToFile/moveFileToFile.test b/idea/testData/refactoring/move/kotlin/moveFile/moveFileToFile/moveFileToFile.test new file mode 100644 index 00000000000..a10576bb32a --- /dev/null +++ b/idea/testData/refactoring/move/kotlin/moveFile/moveFileToFile/moveFileToFile.test @@ -0,0 +1,6 @@ +{ + "comment": "Such move is forbidden", + "mainFile": "test.txt", + "type": "MOVE_FILES", + "targetFile": "test.xml" +} diff --git a/idea/tests/org/jetbrains/jet/plugin/refactoring/move/AbstractJetMoveTest.kt b/idea/tests/org/jetbrains/jet/plugin/refactoring/move/AbstractJetMoveTest.kt index 8f0bbac06f0..b39a46b25a4 100644 --- a/idea/tests/org/jetbrains/jet/plugin/refactoring/move/AbstractJetMoveTest.kt +++ b/idea/tests/org/jetbrains/jet/plugin/refactoring/move/AbstractJetMoveTest.kt @@ -48,6 +48,7 @@ import com.intellij.refactoring.move.moveClassesOrPackages.MoveClassToInnerProce import com.intellij.psi.PsiFile import com.intellij.psi.PsiManager import com.intellij.refactoring.move.moveFilesOrDirectories.MoveFilesOrDirectoriesProcessor +import com.intellij.refactoring.move.MoveHandler public abstract class AbstractJetMoveTest : MultiFileTestCase() { protected fun doTest(path: String) { @@ -92,7 +93,7 @@ public abstract class AbstractJetMoveTest : MultiFileTestCase() { else null try { - action.runRefactoring(mainPsiFile, elementAtCaret, config) + action.runRefactoring(rootDir, mainPsiFile, elementAtCaret, config) assert(!conflictFile.exists()) } @@ -139,7 +140,7 @@ fun JsonObject.getNullableString(name: String): String? = this[name]?.getAsStrin enum class MoveAction { MOVE_MEMBERS { - override fun runRefactoring(mainFile: PsiFile, elementAtCaret: PsiElement?, config: JsonObject) { + override fun runRefactoring(rootDir: VirtualFile, mainFile: PsiFile, elementAtCaret: PsiElement?, config: JsonObject) { val member = elementAtCaret!!.getParentByType(javaClass())!! val targetClassName = config.getString("targetClass") val visibility = config.getNullableString("visibility") @@ -154,7 +155,7 @@ enum class MoveAction { } MOVE_TOP_LEVEL_CLASSES { - override fun runRefactoring(mainFile: PsiFile, elementAtCaret: PsiElement?, config: JsonObject) { + override fun runRefactoring(rootDir: VirtualFile, mainFile: PsiFile, elementAtCaret: PsiElement?, config: JsonObject) { val classToMove = elementAtCaret!!.getParentByType(javaClass())!! val targetPackage = config.getString("targetPackage") @@ -170,7 +171,7 @@ enum class MoveAction { } MOVE_PACKAGES { - override fun runRefactoring(mainFile: PsiFile, elementAtCaret: PsiElement?, config: JsonObject) { + override fun runRefactoring(rootDir: VirtualFile, mainFile: PsiFile, elementAtCaret: PsiElement?, config: JsonObject) { val project = mainFile.getProject() val sourcePackage = config.getString("sourcePackage") val targetPackage = config.getString("targetPackage") @@ -187,7 +188,7 @@ enum class MoveAction { } MOVE_TOP_LEVEL_CLASSES_TO_INNER { - override fun runRefactoring(mainFile: PsiFile, elementAtCaret: PsiElement?, config: JsonObject) { + override fun runRefactoring(rootDir: VirtualFile, mainFile: PsiFile, elementAtCaret: PsiElement?, config: JsonObject) { val project = mainFile.getProject() val classToMove = elementAtCaret!!.getParentByType(javaClass())!! @@ -205,7 +206,7 @@ enum class MoveAction { } MOVE_INNER_CLASS { - override fun runRefactoring(mainFile: PsiFile, elementAtCaret: PsiElement?, config: JsonObject) { + override fun runRefactoring(rootDir: VirtualFile, mainFile: PsiFile, elementAtCaret: PsiElement?, config: JsonObject) { val project = mainFile.getProject() val classToMove = elementAtCaret!!.getParentByType(javaClass())!! @@ -225,21 +226,34 @@ enum class MoveAction { } MOVE_FILES { - override fun runRefactoring(mainFile: PsiFile, elementAtCaret: PsiElement?, config: JsonObject) { + override fun runRefactoring(rootDir: VirtualFile, mainFile: PsiFile, elementAtCaret: PsiElement?, config: JsonObject) { val project = mainFile.getProject() - val targetPackage = config.getString("targetPackage") - MoveFilesOrDirectoriesProcessor( - project = project, - elements = array(mainFile), - newParent = JavaPsiFacade.getInstance(project).findPackage(targetPackage)!!.getDirectories()[0], - searchInComments = false, - searchInNonJavaFiles = true, - moveCallback = null, - prepareSuccessfulCallback = null - ).run() + val targetPackage = config.getNullableString("targetPackage") + if (targetPackage != null) { + MoveFilesOrDirectoriesProcessor( + project = project, + elements = array(mainFile), + newParent = JavaPsiFacade.getInstance(project).findPackage(targetPackage)!!.getDirectories()[0], + searchInComments = false, + searchInNonJavaFiles = true, + moveCallback = null, + prepareSuccessfulCallback = null + ).run() + } + else { + val targetFile = config.getString("targetFile") + + MoveHandler.doMove( + project = project, + elements = array(mainFile), + targetContainer = PsiManager.getInstance(project).findFile(rootDir.findFileByRelativePath(targetFile)!!)!!, + dataContext = null, + callback = null + ) + } } } - abstract fun runRefactoring(mainFile: PsiFile, elementAtCaret: PsiElement?, config: JsonObject) + abstract fun runRefactoring(rootDir: VirtualFile, mainFile: PsiFile, elementAtCaret: PsiElement?, config: JsonObject) } diff --git a/idea/tests/org/jetbrains/jet/plugin/refactoring/move/JetMoveTestGenerated.java b/idea/tests/org/jetbrains/jet/plugin/refactoring/move/JetMoveTestGenerated.java index 086284f5f61..5556a0734a0 100644 --- a/idea/tests/org/jetbrains/jet/plugin/refactoring/move/JetMoveTestGenerated.java +++ b/idea/tests/org/jetbrains/jet/plugin/refactoring/move/JetMoveTestGenerated.java @@ -171,6 +171,11 @@ public class JetMoveTestGenerated extends AbstractJetMoveTest { doTest("idea/testData/refactoring/move/java/movePackage/movePackageToAnotherPackage/movePackageToAnotherPackage.test"); } + @TestMetadata("kotlin/moveFile/moveFileToFile/moveFileToFile.test") + public void testKotlin_moveFile_moveFileToFile_MoveFileToFile() throws Exception { + doTest("idea/testData/refactoring/move/kotlin/moveFile/moveFileToFile/moveFileToFile.test"); + } + @TestMetadata("kotlin/movePackage/movePackage/movePackage.test") public void testKotlin_movePackage_movePackage_MovePackage() throws Exception { doTest("idea/testData/refactoring/move/kotlin/movePackage/movePackage/movePackage.test");