diff --git a/plugins/kotlin/refactorings/kotlin.refactorings.move.k2/src/org/jetbrains/kotlin/idea/k2/refactoring/move/ui/K2MoveModel.kt b/plugins/kotlin/refactorings/kotlin.refactorings.move.k2/src/org/jetbrains/kotlin/idea/k2/refactoring/move/ui/K2MoveModel.kt index 145c821db71a..1cb6cb30acd7 100644 --- a/plugins/kotlin/refactorings/kotlin.refactorings.move.k2/src/org/jetbrains/kotlin/idea/k2/refactoring/move/ui/K2MoveModel.kt +++ b/plugins/kotlin/refactorings/kotlin.refactorings.move.k2/src/org/jetbrains/kotlin/idea/k2/refactoring/move/ui/K2MoveModel.kt @@ -287,6 +287,15 @@ sealed class K2MoveModel { } } + fun sourceFileName(): String { + val firstElem = elementsToMove.firstOrNull() as KtElement + return when (firstElem) { + is KtFile -> firstElem.name + is KtNamedDeclaration -> "${firstElem.name}.${KotlinLanguage.INSTANCE.associatedFileType?.defaultExtension}" + else -> error("Element to move should be a file or declaration") + } + } + val inSourceRoot = inSourceRoot(elementsToMove) return when { (elementsToMove.all { it is KtFile } && targetContainer is PsiDirectory) @@ -311,16 +320,14 @@ sealed class K2MoveModel { val targetFile = targetContainer?.containingFile val target = if (targetFile is KtFile) { K2MoveTargetModel.File(targetFile) + } else if (targetContainer is PsiDirectory) { + val pkg = targetContainer.getFqNameWithImplicitPrefixOrRoot() + K2MoveTargetModel.File(sourceFileName(), pkg, targetContainer) } else { // no default target is provided, happens when invoking refactoring via keyboard instead of drag-and-drop val firstElem = elementsToMove.firstOrNull() as KtElement - val fileName = when (firstElem) { - is KtFile -> firstElem.name - is KtNamedDeclaration -> "${firstElem.name}.${KotlinLanguage.INSTANCE.associatedFileType?.defaultExtension}" - else -> error("Element to move should be a file or declaration") - } val containingFile = firstElem.containingKtFile val psiDirectory = containingFile.containingDirectory ?: error("No directory found") - K2MoveTargetModel.File(fileName, containingFile.packageFqName, psiDirectory) + K2MoveTargetModel.File(sourceFileName(), containingFile.packageFqName, psiDirectory) } Declarations(project, source, target, inSourceRoot, moveCallBack) } diff --git a/plugins/kotlin/refactorings/kotlin.refactorings.move.k2/test/org/jetbrains/kotlin/idea/k2/refactoring/move/K2MoveModelTest.kt b/plugins/kotlin/refactorings/kotlin.refactorings.move.k2/test/org/jetbrains/kotlin/idea/k2/refactoring/move/K2MoveModelTest.kt index 8b3ef8ad9be3..fbbc4dfa9b60 100644 --- a/plugins/kotlin/refactorings/kotlin.refactorings.move.k2/test/org/jetbrains/kotlin/idea/k2/refactoring/move/K2MoveModelTest.kt +++ b/plugins/kotlin/refactorings/kotlin.refactorings.move.k2/test/org/jetbrains/kotlin/idea/k2/refactoring/move/K2MoveModelTest.kt @@ -319,7 +319,7 @@ class K2MoveModelTest : KotlinLightCodeInsightFixtureTestCase() { val sourceElement = moveDeclarationsModel.source.elements.firstOrNull() assert(sourceElement is KtClass && sourceElement.name == "Bar") val targetElement = moveDeclarationsModel.target.pkgName - assertEquals("a", targetElement.asString()) + assertEquals("b", targetElement.asString()) }