From aed6ed0f9b1883ebf1c74036097f08f74a4667cb Mon Sep 17 00:00:00 2001 From: Alexey Sedunov Date: Mon, 11 May 2015 21:21:55 +0300 Subject: [PATCH] Introduce Parameter: Fix occurrence replacement when parameter name/type is changed by the user --- .../KotlinInplaceParameterIntroducer.kt | 2 ++ .../KotlinIntroduceParameterHandler.kt | 12 ++++++------ 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/idea/src/org/jetbrains/kotlin/idea/refactoring/introduce/introduceParameter/KotlinInplaceParameterIntroducer.kt b/idea/src/org/jetbrains/kotlin/idea/refactoring/introduce/introduceParameter/KotlinInplaceParameterIntroducer.kt index f48e235215e..54a8024b5ad 100644 --- a/idea/src/org/jetbrains/kotlin/idea/refactoring/introduce/introduceParameter/KotlinInplaceParameterIntroducer.kt +++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/introduce/introduceParameter/KotlinInplaceParameterIntroducer.kt @@ -265,6 +265,8 @@ public class KotlinInplaceParameterIntroducer( val name = templateState.getVariableValue(KotlinInplaceVariableIntroducer.PRIMARY_VARIABLE_NAME)?.getText() val typeRefText = templateState.getVariableValue(KotlinInplaceVariableIntroducer.TYPE_REFERENCE_VARIABLE_NAME)?.getText() updatePreview(name, typeRefText) + descriptor = descriptor.copy(newParameterName = name ?: descriptor.newParameterName, + newParameterTypeText = typeRefText ?: descriptor.newParameterTypeText) } } } diff --git a/idea/src/org/jetbrains/kotlin/idea/refactoring/introduce/introduceParameter/KotlinIntroduceParameterHandler.kt b/idea/src/org/jetbrains/kotlin/idea/refactoring/introduce/introduceParameter/KotlinIntroduceParameterHandler.kt index e11a03d9e71..983b5ca8760 100644 --- a/idea/src/org/jetbrains/kotlin/idea/refactoring/introduce/introduceParameter/KotlinIntroduceParameterHandler.kt +++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/introduce/introduceParameter/KotlinIntroduceParameterHandler.kt @@ -69,7 +69,7 @@ public data class IntroduceParameterDescriptor( val parametersUsages: Map>, val occurrencesToReplace: List, val parametersToRemove: List = getParametersToRemove(withDefaultValue, parametersUsages, occurrencesToReplace), - val occurrenceReplacer: (JetPsiRange) -> Unit = {} + val occurrenceReplacer: IntroduceParameterDescriptor.(JetPsiRange) -> Unit = {} ) { val originalOccurrence: JetPsiRange get() = occurrencesToReplace.first { it.getTextRange().intersects(originalRange.getTextRange()) } @@ -137,7 +137,7 @@ fun IntroduceParameterDescriptor.performRefactoring() { override fun performSilently(affectedFunctions: Collection): Boolean = true } if (runChangeSignature(callable.getProject(), callableDescriptor, config, callable.analyze(), callable, INTRODUCE_PARAMETER)) { - occurrencesToReplace.forEach(occurrenceReplacer) + occurrencesToReplace.forEach { occurrenceReplacer(it) } } } } @@ -275,21 +275,21 @@ public open class KotlinIntroduceParameterHandler( else newParameter val originalExpression = JetPsiUtil.safeDeparenthesize(expression) - val newParameterName = addedParameter.getName()!! - val replacement = psiFactory.createExpression(newParameterName) val introduceParameterDescriptor = helper.configure( IntroduceParameterDescriptor( originalRange = originalExpression.toRange(), callable = targetParent, callableDescriptor = functionDescriptor, - newParameterName = newParameterName, + newParameterName = addedParameter.getName()!!, newParameterTypeText = renderedType, newArgumentValue = originalExpression, withDefaultValue = false, parametersUsages = parametersUsages, occurrencesToReplace = occurrencesToReplace, - occurrenceReplacer = { it.elements.single().replace(replacement) } + occurrenceReplacer = { + it.elements.single().replace(psiFactory.createExpression(newParameterName)) + } ) ) if (isTestMode) {