[IR] Fixed bug with type parameters of referenced constructor
This commit is contained in:
+6
-2
@@ -390,18 +390,22 @@ class LocalDeclarationsLowering(
|
|||||||
val newCallee = oldCallee.transformed ?: return expression
|
val newCallee = oldCallee.transformed ?: return expression
|
||||||
val newReflectionTarget = expression.reflectionTarget?.run { owner.transformed }
|
val newReflectionTarget = expression.reflectionTarget?.run { owner.transformed }
|
||||||
|
|
||||||
|
val typeParameters = if (newCallee is IrConstructor)
|
||||||
|
newCallee.parentAsClass.typeParameters
|
||||||
|
else
|
||||||
|
newCallee.typeParameters
|
||||||
return IrFunctionReferenceImpl(
|
return IrFunctionReferenceImpl(
|
||||||
expression.startOffset, expression.endOffset,
|
expression.startOffset, expression.endOffset,
|
||||||
expression.type, // TODO functional type for transformed descriptor
|
expression.type, // TODO functional type for transformed descriptor
|
||||||
newCallee.symbol,
|
newCallee.symbol,
|
||||||
typeArgumentsCount = newCallee.typeParameters.size,
|
typeArgumentsCount = typeParameters.size,
|
||||||
valueArgumentsCount = newCallee.valueParameters.size,
|
valueArgumentsCount = newCallee.valueParameters.size,
|
||||||
reflectionTarget = newReflectionTarget?.symbol,
|
reflectionTarget = newReflectionTarget?.symbol,
|
||||||
origin = expression.origin
|
origin = expression.origin
|
||||||
).also {
|
).also {
|
||||||
it.fillArguments2(expression, newCallee)
|
it.fillArguments2(expression, newCallee)
|
||||||
it.setLocalTypeArguments(oldCallee)
|
it.setLocalTypeArguments(oldCallee)
|
||||||
it.copyTypeArgumentsFrom(expression, shift = newCallee.typeParameters.size - expression.typeArgumentsCount)
|
it.copyTypeArgumentsFrom(expression, shift = typeParameters.size - expression.typeArgumentsCount)
|
||||||
it.copyAttributes(expression)
|
it.copyAttributes(expression)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user