Introduce Parameter: Fix occurrence replacement when parameter name/type is changed by the user

This commit is contained in:
Alexey Sedunov
2015-05-11 21:21:55 +03:00
parent ca54fe0883
commit aed6ed0f9b
2 changed files with 8 additions and 6 deletions
@@ -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)
}
}
}
@@ -69,7 +69,7 @@ public data class IntroduceParameterDescriptor(
val parametersUsages: Map<JetParameter, List<PsiReference>>,
val occurrencesToReplace: List<JetPsiRange>,
val parametersToRemove: List<JetParameter> = 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<PsiElement>): 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) {