From 332fe29e940bb1e8fe5ffeb3ab8b0792ccddc9f8 Mon Sep 17 00:00:00 2001 From: Alexey Sedunov Date: Mon, 25 Apr 2016 14:10:40 +0300 Subject: [PATCH] Move: Allow choosing source root in "Move file to directory" intention #KT-11512 Fixed --- ChangeLog.md | 1 + ...FileToPackageMatchingDirectoryIntention.kt | 23 +++++++++++++++---- 2 files changed, 19 insertions(+), 5 deletions(-) diff --git a/ChangeLog.md b/ChangeLog.md index 74129f37cb1..c237c0136ac 100644 --- a/ChangeLog.md +++ b/ChangeLog.md @@ -39,6 +39,7 @@ Issues fixed: - [KT-11967](https://youtrack.jetbrains.com/issue/KT-11967) Fix Find Usages/Rename for parameter references in XML files - [KT-11482](https://youtrack.jetbrains.com/issue/KT-11482) Fixed exception in "Move to companion object" intention - [KT-11483](https://youtrack.jetbrains.com/issue/KT-11483) Pass implicit receiver as argument when moving member function to companion object +- [KT-11512](https://youtrack.jetbrains.com/issue/KT-11512) Allow choosing any source root in "Move file to directory" intention #### Debugger diff --git a/idea/src/org/jetbrains/kotlin/idea/refactoring/move/changePackage/MoveFileToPackageMatchingDirectoryIntention.kt b/idea/src/org/jetbrains/kotlin/idea/refactoring/move/changePackage/MoveFileToPackageMatchingDirectoryIntention.kt index 95b2d7c3555..a53090b0eb6 100644 --- a/idea/src/org/jetbrains/kotlin/idea/refactoring/move/changePackage/MoveFileToPackageMatchingDirectoryIntention.kt +++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/move/changePackage/MoveFileToPackageMatchingDirectoryIntention.kt @@ -18,7 +18,11 @@ package org.jetbrains.kotlin.idea.refactoring.move.changePackage import com.intellij.CommonBundle import com.intellij.openapi.editor.Editor +import com.intellij.openapi.roots.JavaProjectRootsUtil import com.intellij.openapi.ui.Messages +import com.intellij.psi.PsiManager +import com.intellij.refactoring.PackageWrapper +import com.intellij.refactoring.move.moveClassesOrPackages.AutocreatingSingleSourceRootMoveDestination import com.intellij.refactoring.move.moveClassesOrPackages.MoveClassesOrPackagesUtil import com.intellij.refactoring.move.moveFilesOrDirectories.MoveFilesOrDirectoriesUtil import com.intellij.refactoring.util.RefactoringMessageUtil @@ -41,11 +45,20 @@ class MoveFileToPackageMatchingDirectoryIntention : SelfTargetingOffsetIndepende override fun applyTo(element: KtPackageDirective, editor: Editor?) { val file = element.getContainingKtFile() val project = file.project - val targetDirectory = MoveClassesOrPackagesUtil.chooseDestinationPackage( - project, - element.qualifiedName, - file.containingDirectory - ) ?: return + + val sourceRoots = JavaProjectRootsUtil.getSuitableDestinationSourceRoots(project) + val packageWrapper = PackageWrapper(PsiManager.getInstance(project), element.qualifiedName) + val fileToMove = element.containingFile + val chosenRoot = + sourceRoots.singleOrNull() + ?: MoveClassesOrPackagesUtil.chooseSourceRoot(packageWrapper, sourceRoots, fileToMove.containingDirectory) + ?: return + val targetDirFactory = AutocreatingSingleSourceRootMoveDestination(packageWrapper, chosenRoot) + targetDirFactory.verify(fileToMove)?.let { + Messages.showMessageDialog(project, it, CommonBundle.getErrorTitle(), Messages.getErrorIcon()) + return + } + val targetDirectory = targetDirFactory.getTargetDirectory(fileToMove) ?: return RefactoringMessageUtil.checkCanCreateFile(targetDirectory, file.name)?.let { Messages.showMessageDialog(project, it, CommonBundle.getErrorTitle(), Messages.getErrorIcon())