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"}