Forbid moving file to another file

#KT-4069 Fixed
This commit is contained in:
Alexey Sedunov
2014-03-04 14:10:27 +04:00
parent 12310b5bd9
commit 3729966270
8 changed files with 52 additions and 19 deletions
@@ -49,7 +49,7 @@ public class JetMoveFilesOrDirectoriesHandler extends MoveFilesOrDirectoriesHand
return false; return false;
} }
} }
return true; return super.canMove(elements, targetContainer);
} }
@Override @Override
@@ -0,0 +1,3 @@
<test>
Test
</test>
@@ -0,0 +1,3 @@
<test>
Test
</test>
@@ -0,0 +1,6 @@
{
"comment": "Such move is forbidden",
"mainFile": "test.txt",
"type": "MOVE_FILES",
"targetFile": "test.xml"
}
@@ -48,6 +48,7 @@ import com.intellij.refactoring.move.moveClassesOrPackages.MoveClassToInnerProce
import com.intellij.psi.PsiFile import com.intellij.psi.PsiFile
import com.intellij.psi.PsiManager import com.intellij.psi.PsiManager
import com.intellij.refactoring.move.moveFilesOrDirectories.MoveFilesOrDirectoriesProcessor import com.intellij.refactoring.move.moveFilesOrDirectories.MoveFilesOrDirectoriesProcessor
import com.intellij.refactoring.move.MoveHandler
public abstract class AbstractJetMoveTest : MultiFileTestCase() { public abstract class AbstractJetMoveTest : MultiFileTestCase() {
protected fun doTest(path: String) { protected fun doTest(path: String) {
@@ -92,7 +93,7 @@ public abstract class AbstractJetMoveTest : MultiFileTestCase() {
else null else null
try { try {
action.runRefactoring(mainPsiFile, elementAtCaret, config) action.runRefactoring(rootDir, mainPsiFile, elementAtCaret, config)
assert(!conflictFile.exists()) assert(!conflictFile.exists())
} }
@@ -139,7 +140,7 @@ fun JsonObject.getNullableString(name: String): String? = this[name]?.getAsStrin
enum class MoveAction { enum class MoveAction {
MOVE_MEMBERS { 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<PsiMember>())!! val member = elementAtCaret!!.getParentByType(javaClass<PsiMember>())!!
val targetClassName = config.getString("targetClass") val targetClassName = config.getString("targetClass")
val visibility = config.getNullableString("visibility") val visibility = config.getNullableString("visibility")
@@ -154,7 +155,7 @@ enum class MoveAction {
} }
MOVE_TOP_LEVEL_CLASSES { 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<PsiClass>())!! val classToMove = elementAtCaret!!.getParentByType(javaClass<PsiClass>())!!
val targetPackage = config.getString("targetPackage") val targetPackage = config.getString("targetPackage")
@@ -170,7 +171,7 @@ enum class MoveAction {
} }
MOVE_PACKAGES { 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 project = mainFile.getProject()
val sourcePackage = config.getString("sourcePackage") val sourcePackage = config.getString("sourcePackage")
val targetPackage = config.getString("targetPackage") val targetPackage = config.getString("targetPackage")
@@ -187,7 +188,7 @@ enum class MoveAction {
} }
MOVE_TOP_LEVEL_CLASSES_TO_INNER { 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 project = mainFile.getProject()
val classToMove = elementAtCaret!!.getParentByType(javaClass<PsiClass>())!! val classToMove = elementAtCaret!!.getParentByType(javaClass<PsiClass>())!!
@@ -205,7 +206,7 @@ enum class MoveAction {
} }
MOVE_INNER_CLASS { 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 project = mainFile.getProject()
val classToMove = elementAtCaret!!.getParentByType(javaClass<PsiClass>())!! val classToMove = elementAtCaret!!.getParentByType(javaClass<PsiClass>())!!
@@ -225,21 +226,34 @@ enum class MoveAction {
} }
MOVE_FILES { 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 project = mainFile.getProject()
val targetPackage = config.getString("targetPackage")
MoveFilesOrDirectoriesProcessor( val targetPackage = config.getNullableString("targetPackage")
project = project, if (targetPackage != null) {
elements = array(mainFile), MoveFilesOrDirectoriesProcessor(
newParent = JavaPsiFacade.getInstance(project).findPackage(targetPackage)!!.getDirectories()[0], project = project,
searchInComments = false, elements = array(mainFile),
searchInNonJavaFiles = true, newParent = JavaPsiFacade.getInstance(project).findPackage(targetPackage)!!.getDirectories()[0],
moveCallback = null, searchInComments = false,
prepareSuccessfulCallback = null searchInNonJavaFiles = true,
).run() 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)
} }
@@ -171,6 +171,11 @@ public class JetMoveTestGenerated extends AbstractJetMoveTest {
doTest("idea/testData/refactoring/move/java/movePackage/movePackageToAnotherPackage/movePackageToAnotherPackage.test"); 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") @TestMetadata("kotlin/movePackage/movePackage/movePackage.test")
public void testKotlin_movePackage_movePackage_MovePackage() throws Exception { public void testKotlin_movePackage_movePackage_MovePackage() throws Exception {
doTest("idea/testData/refactoring/move/kotlin/movePackage/movePackage/movePackage.test"); doTest("idea/testData/refactoring/move/kotlin/movePackage/movePackage/movePackage.test");