From 8a2e2e93e71248b851bbabb2a3ebfc2a14035759 Mon Sep 17 00:00:00 2001 From: Alexey Sedunov Date: Wed, 9 Sep 2015 12:44:12 +0300 Subject: [PATCH] Pull Up: Apply type substitution to parameters propagated to the target class --- .../kotlin/idea/refactoring/pullUp/KotlinPullUpHelper.kt | 8 +++++++- .../pullUp/k2k/fromClassToClassWithGenerics.kt.after | 2 +- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/idea/src/org/jetbrains/kotlin/idea/refactoring/pullUp/KotlinPullUpHelper.kt b/idea/src/org/jetbrains/kotlin/idea/refactoring/pullUp/KotlinPullUpHelper.kt index 7204f040e91..c0ea5be44c5 100644 --- a/idea/src/org/jetbrains/kotlin/idea/refactoring/pullUp/KotlinPullUpHelper.kt +++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/pullUp/KotlinPullUpHelper.kt @@ -52,6 +52,7 @@ import org.jetbrains.kotlin.resolve.calls.callUtil.getResolvedCall import org.jetbrains.kotlin.resolve.calls.resolvedCallUtil.getExplicitReceiverValue import org.jetbrains.kotlin.resolve.scopes.receivers.ExpressionReceiver import org.jetbrains.kotlin.resolve.source.getPsi +import org.jetbrains.kotlin.types.Variance import java.util.* class KotlinPullUpHelper( @@ -533,7 +534,12 @@ class KotlinPullUpHelper( } with(constructor.getValueParameterList()!!) { - info.usedParameters.forEach { addParameter(it) } + info.usedParameters.forEach { + val newParameter = addParameter(it) + val originalType = data.sourceClassContext[BindingContext.VALUE_PARAMETER, it]!!.type + newParameter.setType(data.sourceToTargetClassSubstitutor.substitute(originalType, Variance.INVARIANT) ?: originalType, false) + newParameter.typeReference!!.addToShorteningWaitSet() + } } targetToSourceConstructors[constructorElement]!!.forEach { val superCall: JetCallElement? = when (it) { diff --git a/idea/testData/refactoring/pullUp/k2k/fromClassToClassWithGenerics.kt.after b/idea/testData/refactoring/pullUp/k2k/fromClassToClassWithGenerics.kt.after index 4e538d0b3ac..81a7e071b75 100644 --- a/idea/testData/refactoring/pullUp/k2k/fromClassToClassWithGenerics.kt.after +++ b/idea/testData/refactoring/pullUp/k2k/fromClassToClassWithGenerics.kt.after @@ -3,7 +3,7 @@ interface I interface Z -abstract class A(x: X, y: Y) { +abstract class A(x: T, y: Any?) { // INFO: {"checked": "true"} val foo1: T // INFO: {"checked": "true"}