diff --git a/idea/src/org/jetbrains/kotlin/idea/intentions/IntroduceVariableIntention.kt b/idea/src/org/jetbrains/kotlin/idea/intentions/IntroduceVariableIntention.kt index 85fdab6c976..03aa0a08aef 100644 --- a/idea/src/org/jetbrains/kotlin/idea/intentions/IntroduceVariableIntention.kt +++ b/idea/src/org/jetbrains/kotlin/idea/intentions/IntroduceVariableIntention.kt @@ -56,6 +56,8 @@ class IntroduceVariableIntention : SelfTargetingRangeIntention( override fun applyTo(element: PsiElement, editor: Editor?) { val expression = getExpressionToProcess(element) ?: return - KotlinIntroduceVariableHandler.doRefactoring(element.project, editor, expression, null, null) + KotlinIntroduceVariableHandler.doRefactoring( + element.project, editor, expression, isVar = false, occurrencesToReplace = null, onNonInteractiveFinish = null + ) } } \ No newline at end of file diff --git a/idea/src/org/jetbrains/kotlin/idea/intentions/branchedTransformations/IfThenUtils.kt b/idea/src/org/jetbrains/kotlin/idea/intentions/branchedTransformations/IfThenUtils.kt index 279572089c8..28baadfc333 100644 --- a/idea/src/org/jetbrains/kotlin/idea/intentions/branchedTransformations/IfThenUtils.kt +++ b/idea/src/org/jetbrains/kotlin/idea/intentions/branchedTransformations/IfThenUtils.kt @@ -99,8 +99,8 @@ fun KtIfExpression.introduceValueForCondition(occurrenceInThenClause: KtExpressi KotlinIntroduceVariableHandler.doRefactoring(project, editor, occurrenceInConditional, - listOf(occurrenceInConditional, occurrenceInThenClause), - null) + false, + listOf(occurrenceInConditional, occurrenceInThenClause), null) } fun KtNameReferenceExpression.inlineIfDeclaredLocallyAndOnlyUsedOnceWithPrompt(editor: Editor?) { diff --git a/idea/src/org/jetbrains/kotlin/idea/refactoring/changeSignature/usages/KotlinFunctionCallUsage.kt b/idea/src/org/jetbrains/kotlin/idea/refactoring/changeSignature/usages/KotlinFunctionCallUsage.kt index ebfb01096a1..7ecc129f705 100644 --- a/idea/src/org/jetbrains/kotlin/idea/refactoring/changeSignature/usages/KotlinFunctionCallUsage.kt +++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/changeSignature/usages/KotlinFunctionCallUsage.kt @@ -203,9 +203,13 @@ class KotlinFunctionCallUsage( KtSuperTypeListEntry::class.java, KtParameter::class.java) == null) { - KotlinIntroduceVariableHandler.doRefactoring(project, null, argumentExpression, listOf(argumentExpression)) { + KotlinIntroduceVariableHandler.doRefactoring( + project, null, argumentExpression, + isVar = false, + occurrencesToReplace = listOf(argumentExpression), + onNonInteractiveFinish = { argumentExpression = psiFactory.createExpression(it.name!!) - } + }) } var expressionToReplace: KtExpression = nameCounterpartMap[ref.element] ?: continue 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 e4810f7645d..8cd45fe570d 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 @@ -130,7 +130,8 @@ object KotlinIntroduceVariableHandler : RefactoringActionHandler { return result } - private fun runRefactoring ( + private fun runRefactoring( + isVar: Boolean, expression: KtExpression, commonContainer: PsiElement, commonParent: PsiElement, @@ -139,16 +140,18 @@ object KotlinIntroduceVariableHandler : RefactoringActionHandler { val initializer = (expression as? KtParenthesizedExpression)?.expression ?: expression val initializerText = if (initializer.mustBeParenthesizedInInitializerPosition()) "(${initializer.text})" else initializer.text + val varOvVal = if (isVar) "var" else "val" + var property: KtDeclaration = if (componentFunctions.isNotEmpty()) { buildString { - componentFunctions.indices.joinTo(this, prefix = "val (", postfix = ")") { nameSuggestions[it].first() } + componentFunctions.indices.joinTo(this, prefix = "$varOvVal (", postfix = ")") { nameSuggestions[it].first() } append(" = ") append(initializerText) }.let { psiFactory.createDestructuringDeclaration(it) } } else { buildString { - append("val ") + append("$varOvVal ") append(nameSuggestions.single().first()) if (noTypeInference) { val typeToRender = expressionType ?: resolutionFacade.moduleDescriptor.builtIns.anyType @@ -281,8 +284,8 @@ object KotlinIntroduceVariableHandler : RefactoringActionHandler { } } - fun runRefactoring() { - if (commonContainer !is KtDeclarationWithBody) return runRefactoring(expression, commonContainer, commonParent, allReplaces) + fun runRefactoring(isVar: Boolean) { + if (commonContainer !is KtDeclarationWithBody) return runRefactoring(isVar, expression, commonContainer, commonParent, allReplaces) commonContainer.bodyExpression.sure { "Original body is not found: " + commonContainer } @@ -306,7 +309,7 @@ object KotlinIntroduceVariableHandler : RefactoringActionHandler { } ?: newReplace } - runRefactoring(newExpression, newCommonContainer, newCommonParent, newAllReplaces) + runRefactoring(isVar, newExpression, newCommonContainer, newCommonParent, newAllReplaces) } } @@ -446,6 +449,7 @@ object KotlinIntroduceVariableHandler : RefactoringActionHandler { occurrenceContainer: KtElement, resolutionFacade: ResolutionFacade, bindingContext: BindingContext, + isVar: Boolean, occurrencesToReplace: List?, onNonInteractiveFinish: ((KtDeclaration) -> Unit)? ) { @@ -555,7 +559,7 @@ object KotlinIntroduceVariableHandler : RefactoringActionHandler { ) project.executeCommand(INTRODUCE_VARIABLE, null) { - runWriteAction { introduceVariableContext.runRefactoring() } + runWriteAction { introduceVariableContext.runRefactoring(isVar) } val property = introduceVariableContext.propertyRef ?: return@executeCommand @@ -582,7 +586,7 @@ object KotlinIntroduceVariableHandler : RefactoringActionHandler { introduceVariableContext.reference, introduceVariableContext.references.toTypedArray(), suggestedNames.single(), - /*todo*/ false, + isVar, /*todo*/ false, expressionType, noTypeInference, @@ -683,6 +687,7 @@ object KotlinIntroduceVariableHandler : RefactoringActionHandler { project: Project, editor: Editor?, expressionToExtract: KtExpression?, + isVar: Boolean, occurrencesToReplace: List?, onNonInteractiveFinish: ((KtDeclaration) -> Unit)? ) { @@ -695,7 +700,10 @@ object KotlinIntroduceVariableHandler : RefactoringActionHandler { val bindingContext = resolutionFacade.analyze(physicalExpression, BodyResolveMode.FULL) fun runWithChosenContainers(container: KtElement, occurrenceContainer: KtElement) { - doRefactoring(project, editor, expression, container, occurrenceContainer, resolutionFacade, bindingContext, occurrencesToReplace, onNonInteractiveFinish) + doRefactoring( + project, editor, expression, container, occurrenceContainer, resolutionFacade, bindingContext, + isVar, occurrencesToReplace, onNonInteractiveFinish + ) } val candidateContainers = expression.getCandidateContainers(resolutionFacade, bindingContext).ifEmpty { @@ -720,7 +728,7 @@ object KotlinIntroduceVariableHandler : RefactoringActionHandler { try { selectElement(editor, file, listOf(CodeInsightUtils.ElementKind.EXPRESSION)) { - doRefactoring(project, editor, it as KtExpression?, null, null) + doRefactoring(project, editor, it as KtExpression?, false, null, null) } } catch (e: IntroduceRefactoringException) {