Move: Use MoveFilesWithDeclarationProcessor for files & directories
This commit is contained in:
+7
-7
@@ -21,6 +21,7 @@ import com.intellij.openapi.util.EmptyRunnable
|
|||||||
import com.intellij.openapi.util.Ref
|
import com.intellij.openapi.util.Ref
|
||||||
import com.intellij.psi.PsiDirectory
|
import com.intellij.psi.PsiDirectory
|
||||||
import com.intellij.psi.PsiElement
|
import com.intellij.psi.PsiElement
|
||||||
|
import com.intellij.psi.PsiFile
|
||||||
import com.intellij.refactoring.move.MoveCallback
|
import com.intellij.refactoring.move.MoveCallback
|
||||||
import com.intellij.refactoring.move.moveFilesOrDirectories.MoveFilesOrDirectoriesProcessor
|
import com.intellij.refactoring.move.moveFilesOrDirectories.MoveFilesOrDirectoriesProcessor
|
||||||
import com.intellij.usageView.UsageInfo
|
import com.intellij.usageView.UsageInfo
|
||||||
@@ -28,11 +29,10 @@ import com.intellij.usageView.UsageViewDescriptor
|
|||||||
import com.intellij.usageView.UsageViewUtil
|
import com.intellij.usageView.UsageViewUtil
|
||||||
import com.intellij.util.containers.MultiMap
|
import com.intellij.util.containers.MultiMap
|
||||||
import com.intellij.util.text.UniqueNameGenerator
|
import com.intellij.util.text.UniqueNameGenerator
|
||||||
import org.jetbrains.kotlin.psi.KtFile
|
|
||||||
|
|
||||||
class MoveFilesWithDeclarationsProcessor @JvmOverloads constructor (
|
class MoveFilesWithDeclarationsProcessor @JvmOverloads constructor (
|
||||||
project: Project,
|
project: Project,
|
||||||
private val sourceFiles: List<KtFile>,
|
private val elementsToMove: List<PsiElement>,
|
||||||
private val targetDirectory: PsiDirectory,
|
private val targetDirectory: PsiDirectory,
|
||||||
private val targetFileName: String?,
|
private val targetFileName: String?,
|
||||||
searchInComments: Boolean,
|
searchInComments: Boolean,
|
||||||
@@ -40,7 +40,7 @@ class MoveFilesWithDeclarationsProcessor @JvmOverloads constructor (
|
|||||||
moveCallback: MoveCallback?,
|
moveCallback: MoveCallback?,
|
||||||
prepareSuccessfulCallback: Runnable = EmptyRunnable.INSTANCE
|
prepareSuccessfulCallback: Runnable = EmptyRunnable.INSTANCE
|
||||||
) : MoveFilesOrDirectoriesProcessor(project,
|
) : MoveFilesOrDirectoriesProcessor(project,
|
||||||
sourceFiles.toTypedArray<PsiElement>(),
|
elementsToMove.toTypedArray<PsiElement>(),
|
||||||
targetDirectory,
|
targetDirectory,
|
||||||
true,
|
true,
|
||||||
searchInComments,
|
searchInComments,
|
||||||
@@ -48,11 +48,11 @@ class MoveFilesWithDeclarationsProcessor @JvmOverloads constructor (
|
|||||||
moveCallback,
|
moveCallback,
|
||||||
prepareSuccessfulCallback) {
|
prepareSuccessfulCallback) {
|
||||||
override fun getCommandName(): String {
|
override fun getCommandName(): String {
|
||||||
return if (targetFileName != null) "Move " + sourceFiles.single().name else "Move"
|
return if (targetFileName != null) "Move " + (elementsToMove.single() as PsiFile).name else "Move"
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun createUsageViewDescriptor(usages: Array<out UsageInfo>): UsageViewDescriptor {
|
override fun createUsageViewDescriptor(usages: Array<out UsageInfo>): UsageViewDescriptor {
|
||||||
return MoveFilesWithDeclarationsViewDescriptor(sourceFiles.toTypedArray<PsiElement>(), targetDirectory)
|
return MoveFilesWithDeclarationsViewDescriptor(elementsToMove.toTypedArray<PsiElement>(), targetDirectory)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun preprocessUsages(refUsages: Ref<Array<UsageInfo>>): Boolean {
|
override fun preprocessUsages(refUsages: Ref<Array<UsageInfo>>): Boolean {
|
||||||
@@ -75,7 +75,7 @@ class MoveFilesWithDeclarationsProcessor @JvmOverloads constructor (
|
|||||||
private fun renameFileTemporarily() {
|
private fun renameFileTemporarily() {
|
||||||
if (targetFileName == null || targetDirectory.findFile(targetFileName) == null) return
|
if (targetFileName == null || targetDirectory.findFile(targetFileName) == null) return
|
||||||
|
|
||||||
val sourceFile = sourceFiles.single()
|
val sourceFile = elementsToMove.single() as PsiFile
|
||||||
val temporaryName = UniqueNameGenerator.generateUniqueName("temp", "", ".kt") {
|
val temporaryName = UniqueNameGenerator.generateUniqueName("temp", "", ".kt") {
|
||||||
sourceFile.containingDirectory!!.findFile(it) == null
|
sourceFile.containingDirectory!!.findFile(it) == null
|
||||||
}
|
}
|
||||||
@@ -93,7 +93,7 @@ class MoveFilesWithDeclarationsProcessor @JvmOverloads constructor (
|
|||||||
}
|
}
|
||||||
finally {
|
finally {
|
||||||
if (needTemporaryRename) {
|
if (needTemporaryRename) {
|
||||||
sourceFiles.single().name = targetFileName!!
|
(elementsToMove.single() as PsiFile).name = targetFileName!!
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -26,14 +26,12 @@ import com.intellij.refactoring.RefactoringBundle
|
|||||||
import com.intellij.refactoring.copy.CopyFilesOrDirectoriesHandler
|
import com.intellij.refactoring.copy.CopyFilesOrDirectoriesHandler
|
||||||
import com.intellij.refactoring.move.MoveCallback
|
import com.intellij.refactoring.move.MoveCallback
|
||||||
import com.intellij.refactoring.move.MoveHandler
|
import com.intellij.refactoring.move.MoveHandler
|
||||||
import com.intellij.refactoring.move.moveFilesOrDirectories.MoveFilesOrDirectoriesProcessor
|
|
||||||
import com.intellij.refactoring.move.moveFilesOrDirectories.MoveFilesOrDirectoriesUtil
|
import com.intellij.refactoring.move.moveFilesOrDirectories.MoveFilesOrDirectoriesUtil
|
||||||
import com.intellij.refactoring.util.CommonRefactoringUtil
|
import com.intellij.refactoring.util.CommonRefactoringUtil
|
||||||
import com.intellij.util.IncorrectOperationException
|
import com.intellij.util.IncorrectOperationException
|
||||||
import org.jetbrains.kotlin.idea.refactoring.isInJavaSourceRoot
|
import org.jetbrains.kotlin.idea.refactoring.isInJavaSourceRoot
|
||||||
import org.jetbrains.kotlin.idea.refactoring.move.moveDeclarations.MoveFilesWithDeclarationsProcessor
|
import org.jetbrains.kotlin.idea.refactoring.move.moveDeclarations.MoveFilesWithDeclarationsProcessor
|
||||||
import org.jetbrains.kotlin.idea.refactoring.move.moveDeclarations.ui.KotlinAwareMoveFilesOrDirectoriesDialog
|
import org.jetbrains.kotlin.idea.refactoring.move.moveDeclarations.ui.KotlinAwareMoveFilesOrDirectoriesDialog
|
||||||
import org.jetbrains.kotlin.idea.util.ProjectRootsUtil
|
|
||||||
import org.jetbrains.kotlin.idea.util.application.executeCommand
|
import org.jetbrains.kotlin.idea.util.application.executeCommand
|
||||||
import org.jetbrains.kotlin.idea.util.application.runWriteAction
|
import org.jetbrains.kotlin.idea.util.application.runWriteAction
|
||||||
import org.jetbrains.kotlin.psi.KtElement
|
import org.jetbrains.kotlin.psi.KtElement
|
||||||
@@ -51,7 +49,7 @@ fun invokeMoveFilesOrDirectoriesRefactoring(
|
|||||||
}
|
}
|
||||||
|
|
||||||
project.executeCommand(MoveHandler.REFACTORING_NAME) {
|
project.executeCommand(MoveHandler.REFACTORING_NAME) {
|
||||||
val selectedDir = if (moveDialog != null) moveDialog.targetDirectory else initialTargetDirectory
|
val selectedDir = (if (moveDialog != null) moveDialog.targetDirectory else initialTargetDirectory) ?: return@executeCommand
|
||||||
val updatePackageDirective = (moveDialog as? KotlinAwareMoveFilesOrDirectoriesDialog)?.updatePackageDirective
|
val updatePackageDirective = (moveDialog as? KotlinAwareMoveFilesOrDirectoriesDialog)?.updatePackageDirective
|
||||||
|
|
||||||
try {
|
try {
|
||||||
@@ -72,40 +70,24 @@ fun invokeMoveFilesOrDirectoriesRefactoring(
|
|||||||
)
|
)
|
||||||
|
|
||||||
elementsToMove.forEach {
|
elementsToMove.forEach {
|
||||||
MoveFilesOrDirectoriesUtil.checkMove(it, selectedDir!!)
|
MoveFilesOrDirectoriesUtil.checkMove(it, selectedDir)
|
||||||
if (it is KtFile && it.isInJavaSourceRoot()) {
|
if (it is KtFile && it.isInJavaSourceRoot()) {
|
||||||
it.updatePackageDirective = updatePackageDirective
|
it.updatePackageDirective = updatePackageDirective
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
val enableSearchReferences = elements.any { ProjectRootsUtil.isInProjectSource(it) }
|
|
||||||
|
|
||||||
if (elementsToMove.isNotEmpty()) {
|
if (elementsToMove.isNotEmpty()) {
|
||||||
@Suppress("UNCHECKED_CAST")
|
@Suppress("UNCHECKED_CAST")
|
||||||
val processor = if (elementsToMove.all { it is KtFile } && selectedDir != null) {
|
val processor = MoveFilesWithDeclarationsProcessor(
|
||||||
MoveFilesWithDeclarationsProcessor(
|
project,
|
||||||
project,
|
elementsToMove as List<KtFile>,
|
||||||
elementsToMove as List<KtFile>,
|
selectedDir,
|
||||||
selectedDir,
|
null,
|
||||||
null,
|
false,
|
||||||
false,
|
false,
|
||||||
false,
|
moveCallback,
|
||||||
moveCallback,
|
Runnable(::closeDialog)
|
||||||
Runnable(::closeDialog)
|
)
|
||||||
)
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
MoveFilesOrDirectoriesProcessor(
|
|
||||||
project,
|
|
||||||
elementsToMove.toTypedArray(),
|
|
||||||
selectedDir,
|
|
||||||
enableSearchReferences,
|
|
||||||
false,
|
|
||||||
false,
|
|
||||||
moveCallback,
|
|
||||||
Runnable(::closeDialog)
|
|
||||||
)
|
|
||||||
}
|
|
||||||
processor.run()
|
processor.run()
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
|||||||
Reference in New Issue
Block a user