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");