Forbid moving file to another file
#KT-4069 Fixed
This commit is contained in:
+1
-1
@@ -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 @@
|
|||||||
|
test
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
<test>
|
||||||
|
Test
|
||||||
|
</test>
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
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");
|
||||||
|
|||||||
Reference in New Issue
Block a user