Move: Allow choosing source root in "Move file to directory" intention

#KT-11512 Fixed
This commit is contained in:
Alexey Sedunov
2016-04-25 14:10:40 +03:00
parent aaa873f227
commit 332fe29e94
2 changed files with 19 additions and 5 deletions
+1
View File
@@ -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-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-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-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 #### Debugger
@@ -18,7 +18,11 @@ package org.jetbrains.kotlin.idea.refactoring.move.changePackage
import com.intellij.CommonBundle import com.intellij.CommonBundle
import com.intellij.openapi.editor.Editor import com.intellij.openapi.editor.Editor
import com.intellij.openapi.roots.JavaProjectRootsUtil
import com.intellij.openapi.ui.Messages 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.moveClassesOrPackages.MoveClassesOrPackagesUtil
import com.intellij.refactoring.move.moveFilesOrDirectories.MoveFilesOrDirectoriesUtil import com.intellij.refactoring.move.moveFilesOrDirectories.MoveFilesOrDirectoriesUtil
import com.intellij.refactoring.util.RefactoringMessageUtil import com.intellij.refactoring.util.RefactoringMessageUtil
@@ -41,11 +45,20 @@ class MoveFileToPackageMatchingDirectoryIntention : SelfTargetingOffsetIndepende
override fun applyTo(element: KtPackageDirective, editor: Editor?) { override fun applyTo(element: KtPackageDirective, editor: Editor?) {
val file = element.getContainingKtFile() val file = element.getContainingKtFile()
val project = file.project val project = file.project
val targetDirectory = MoveClassesOrPackagesUtil.chooseDestinationPackage(
project, val sourceRoots = JavaProjectRootsUtil.getSuitableDestinationSourceRoots(project)
element.qualifiedName, val packageWrapper = PackageWrapper(PsiManager.getInstance(project), element.qualifiedName)
file.containingDirectory val fileToMove = element.containingFile
) ?: return 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 { RefactoringMessageUtil.checkCanCreateFile(targetDirectory, file.name)?.let {
Messages.showMessageDialog(project, it, CommonBundle.getErrorTitle(), Messages.getErrorIcon()) Messages.showMessageDialog(project, it, CommonBundle.getErrorTitle(), Messages.getErrorIcon())