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 true;
return super.canMove(elements, targetContainer);
}
@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.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<PsiMember>())!!
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<PsiClass>())!!
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<PsiClass>())!!
@@ -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<PsiClass>())!!
@@ -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)
}
@@ -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");