From 9081f5df52b43d65d4bdf7ad7c69555441a5d3c7 Mon Sep 17 00:00:00 2001 From: Alexey Sedunov Date: Thu, 14 Jan 2016 14:17:35 +0300 Subject: [PATCH] Introduce Variable: Move caret to the end of declaration when replacing "statement" expression #KT-10663 Fixed --- .../KotlinIntroduceVariableHandler.kt | 25 +++++++++++-------- .../KotlinVariableInplaceIntroducer.kt | 8 +++++- 2 files changed, 22 insertions(+), 11 deletions(-) diff --git a/idea/src/org/jetbrains/kotlin/idea/refactoring/introduce/introduceVariable/KotlinIntroduceVariableHandler.kt b/idea/src/org/jetbrains/kotlin/idea/refactoring/introduce/introduceVariable/KotlinIntroduceVariableHandler.kt index e80092b9cab..68279aa14b2 100644 --- a/idea/src/org/jetbrains/kotlin/idea/refactoring/introduce/introduceVariable/KotlinIntroduceVariableHandler.kt +++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/introduce/introduceVariable/KotlinIntroduceVariableHandler.kt @@ -500,16 +500,6 @@ object KotlinIntroduceVariableHandler : RefactoringActionHandler { val allOccurrences = occurrencesToReplace ?: expression.findOccurrences(occurrenceContainer) - fun postProcess(declaration: KtDeclaration) { - if (typeArgumentList == null) return - val initializer = when (declaration) { - is KtProperty -> declaration.initializer - is KtDestructuringDeclaration -> declaration.initializer - else -> null - } ?: return - runWriteAction { addTypeArgumentsIfNeeded(initializer, typeArgumentList) } - } - val callback = Pass { replaceChoice -> val allReplaces = when (replaceChoice) { OccurrencesChooser.ReplaceChoice.ALL -> allOccurrences @@ -525,6 +515,21 @@ object KotlinIntroduceVariableHandler : RefactoringActionHandler { commonContainer = container } + fun postProcess(declaration: KtDeclaration) { + if (typeArgumentList != null) { + val initializer = when (declaration) { + is KtProperty -> declaration.initializer + is KtDestructuringDeclaration -> declaration.initializer + else -> null + } ?: return + runWriteAction { addTypeArgumentsIfNeeded(initializer, typeArgumentList) } + } + + if (editor != null && !replaceOccurrence) { + editor.caretModel.moveToOffset(declaration.endOffset) + } + } + physicalExpression.chooseApplicableComponentFunctionsForVariableDeclaration(replaceOccurrence, editor) { componentFunctions -> val validator = NewDeclarationNameValidator( commonContainer, diff --git a/idea/src/org/jetbrains/kotlin/idea/refactoring/introduce/introduceVariable/KotlinVariableInplaceIntroducer.kt b/idea/src/org/jetbrains/kotlin/idea/refactoring/introduce/introduceVariable/KotlinVariableInplaceIntroducer.kt index 2ce80c5aaec..a071a5905c7 100644 --- a/idea/src/org/jetbrains/kotlin/idea/refactoring/introduce/introduceVariable/KotlinVariableInplaceIntroducer.kt +++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/introduce/introduceVariable/KotlinVariableInplaceIntroducer.kt @@ -155,6 +155,12 @@ class KotlinVariableInplaceIntroducer( it.replace(replacement) } } - postProcess(addedVariable) + } + + override fun moveOffsetAfter(success: Boolean) { + super.moveOffsetAfter(success) + if (success) { + postProcess(addedVariable) + } } } \ No newline at end of file