[kotlin] Fix click and drag for class nodes in project view

#KTIJ-31115 Fixed

GitOrigin-RevId: a89221af3bcc6607539f188972d55000f4f146fd
This commit is contained in:
Bart van Helvert
2024-08-27 11:30:04 +00:00
committed by intellij-monorepo-bot
parent 93466ff0c7
commit dd89b7e63d
2 changed files with 14 additions and 7 deletions
@@ -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)
}
@@ -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())
}