[IR] Fixed bug with type parameters of referenced constructor

This commit is contained in:
Igor Chevdar
2020-10-29 13:47:04 +05:00
parent c90546104e
commit 07a797cc3a
@@ -390,18 +390,22 @@ class LocalDeclarationsLowering(
val newCallee = oldCallee.transformed ?: return expression
val newReflectionTarget = expression.reflectionTarget?.run { owner.transformed }
val typeParameters = if (newCallee is IrConstructor)
newCallee.parentAsClass.typeParameters
else
newCallee.typeParameters
return IrFunctionReferenceImpl(
expression.startOffset, expression.endOffset,
expression.type, // TODO functional type for transformed descriptor
newCallee.symbol,
typeArgumentsCount = newCallee.typeParameters.size,
typeArgumentsCount = typeParameters.size,
valueArgumentsCount = newCallee.valueParameters.size,
reflectionTarget = newReflectionTarget?.symbol,
origin = expression.origin
).also {
it.fillArguments2(expression, newCallee)
it.setLocalTypeArguments(oldCallee)
it.copyTypeArgumentsFrom(expression, shift = newCallee.typeParameters.size - expression.typeArgumentsCount)
it.copyTypeArgumentsFrom(expression, shift = typeParameters.size - expression.typeArgumentsCount)
it.copyAttributes(expression)
}
}