From ff831aded48b27a8721e4d802362ea5c9e5cff89 Mon Sep 17 00:00:00 2001 From: Igor Yakovlev Date: Wed, 29 Jan 2020 14:20:43 +0300 Subject: [PATCH] Move refactoring on kts fixes Set file target filenames to kts if moved declarations are from kts Fixed exceptions throwing on script declaration move that could lead to not valid file state (Fixed #KT-36129) --- .../script/configuration/listener/ScriptChangeListener.kt | 1 + .../org/jetbrains/kotlin/idea/refactoring/move/moveUtils.kt | 5 +++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/idea/idea-core/src/org/jetbrains/kotlin/idea/core/script/configuration/listener/ScriptChangeListener.kt b/idea/idea-core/src/org/jetbrains/kotlin/idea/core/script/configuration/listener/ScriptChangeListener.kt index afce27552fd..bb5fa4d1781 100644 --- a/idea/idea-core/src/org/jetbrains/kotlin/idea/core/script/configuration/listener/ScriptChangeListener.kt +++ b/idea/idea-core/src/org/jetbrains/kotlin/idea/core/script/configuration/listener/ScriptChangeListener.kt @@ -29,6 +29,7 @@ abstract class ScriptChangeListener(protected val project: Project) { protected fun getAnalyzableKtFileForScript(vFile: VirtualFile): KtFile? { if (project.isDisposed) return null + if (!vFile.isValid) return null return runReadAction { (PsiManager.getInstance(project).findFile(vFile) as? KtFile)?.takeIf { diff --git a/idea/src/org/jetbrains/kotlin/idea/refactoring/move/moveUtils.kt b/idea/src/org/jetbrains/kotlin/idea/refactoring/move/moveUtils.kt index 10ea58fbc6a..7e162cd4239 100644 --- a/idea/src/org/jetbrains/kotlin/idea/refactoring/move/moveUtils.kt +++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/move/moveUtils.kt @@ -399,8 +399,9 @@ fun guessNewFileName(declarationsToMove: Collection): String if (declarationsToMove.isEmpty()) return null val representative = declarationsToMove.singleOrNull() ?: declarationsToMove.filterIsInstance().singleOrNull() - val newFileName = representative?.run { "$name.${KotlinFileType.EXTENSION}" } - ?: declarationsToMove.first().containingFile.name + val newFileName = representative?.run { + if (containingKtFile.isScript()) "$name.kts" else "$name.${KotlinFileType.EXTENSION}" + } ?: declarationsToMove.first().containingFile.name return newFileName.capitalize() }