Move: Use MoveFilesWithDeclarationProcessor for files & directories

This commit is contained in:
Alexey Sedunov
2017-04-07 16:30:05 +03:00
parent 22a56a81b9
commit 3007b11973
2 changed files with 19 additions and 37 deletions
@@ -21,6 +21,7 @@ import com.intellij.openapi.util.EmptyRunnable
import com.intellij.openapi.util.Ref
import com.intellij.psi.PsiDirectory
import com.intellij.psi.PsiElement
import com.intellij.psi.PsiFile
import com.intellij.refactoring.move.MoveCallback
import com.intellij.refactoring.move.moveFilesOrDirectories.MoveFilesOrDirectoriesProcessor
import com.intellij.usageView.UsageInfo
@@ -28,11 +29,10 @@ import com.intellij.usageView.UsageViewDescriptor
import com.intellij.usageView.UsageViewUtil
import com.intellij.util.containers.MultiMap
import com.intellij.util.text.UniqueNameGenerator
import org.jetbrains.kotlin.psi.KtFile
class MoveFilesWithDeclarationsProcessor @JvmOverloads constructor (
project: Project,
private val sourceFiles: List<KtFile>,
private val elementsToMove: List<PsiElement>,
private val targetDirectory: PsiDirectory,
private val targetFileName: String?,
searchInComments: Boolean,
@@ -40,7 +40,7 @@ class MoveFilesWithDeclarationsProcessor @JvmOverloads constructor (
moveCallback: MoveCallback?,
prepareSuccessfulCallback: Runnable = EmptyRunnable.INSTANCE
) : MoveFilesOrDirectoriesProcessor(project,
sourceFiles.toTypedArray<PsiElement>(),
elementsToMove.toTypedArray<PsiElement>(),
targetDirectory,
true,
searchInComments,
@@ -48,11 +48,11 @@ class MoveFilesWithDeclarationsProcessor @JvmOverloads constructor (
moveCallback,
prepareSuccessfulCallback) {
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 {
return MoveFilesWithDeclarationsViewDescriptor(sourceFiles.toTypedArray<PsiElement>(), targetDirectory)
return MoveFilesWithDeclarationsViewDescriptor(elementsToMove.toTypedArray<PsiElement>(), targetDirectory)
}
override fun preprocessUsages(refUsages: Ref<Array<UsageInfo>>): Boolean {
@@ -75,7 +75,7 @@ class MoveFilesWithDeclarationsProcessor @JvmOverloads constructor (
private fun renameFileTemporarily() {
if (targetFileName == null || targetDirectory.findFile(targetFileName) == null) return
val sourceFile = sourceFiles.single()
val sourceFile = elementsToMove.single() as PsiFile
val temporaryName = UniqueNameGenerator.generateUniqueName("temp", "", ".kt") {
sourceFile.containingDirectory!!.findFile(it) == null
}
@@ -93,7 +93,7 @@ class MoveFilesWithDeclarationsProcessor @JvmOverloads constructor (
}
finally {
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.move.MoveCallback
import com.intellij.refactoring.move.MoveHandler
import com.intellij.refactoring.move.moveFilesOrDirectories.MoveFilesOrDirectoriesProcessor
import com.intellij.refactoring.move.moveFilesOrDirectories.MoveFilesOrDirectoriesUtil
import com.intellij.refactoring.util.CommonRefactoringUtil
import com.intellij.util.IncorrectOperationException
import org.jetbrains.kotlin.idea.refactoring.isInJavaSourceRoot
import org.jetbrains.kotlin.idea.refactoring.move.moveDeclarations.MoveFilesWithDeclarationsProcessor
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.runWriteAction
import org.jetbrains.kotlin.psi.KtElement
@@ -51,7 +49,7 @@ fun invokeMoveFilesOrDirectoriesRefactoring(
}
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
try {
@@ -72,40 +70,24 @@ fun invokeMoveFilesOrDirectoriesRefactoring(
)
elementsToMove.forEach {
MoveFilesOrDirectoriesUtil.checkMove(it, selectedDir!!)
MoveFilesOrDirectoriesUtil.checkMove(it, selectedDir)
if (it is KtFile && it.isInJavaSourceRoot()) {
it.updatePackageDirective = updatePackageDirective
}
}
val enableSearchReferences = elements.any { ProjectRootsUtil.isInProjectSource(it) }
if (elementsToMove.isNotEmpty()) {
@Suppress("UNCHECKED_CAST")
val processor = if (elementsToMove.all { it is KtFile } && selectedDir != null) {
MoveFilesWithDeclarationsProcessor(
project,
elementsToMove as List<KtFile>,
selectedDir,
null,
false,
false,
moveCallback,
Runnable(::closeDialog)
)
}
else {
MoveFilesOrDirectoriesProcessor(
project,
elementsToMove.toTypedArray(),
selectedDir,
enableSearchReferences,
false,
false,
moveCallback,
Runnable(::closeDialog)
)
}
val processor = MoveFilesWithDeclarationsProcessor(
project,
elementsToMove as List<KtFile>,
selectedDir,
null,
false,
false,
moveCallback,
Runnable(::closeDialog)
)
processor.run()
}
else {