From 07a797cc3a7cf82acc4a29e18aea12d4348d9df7 Mon Sep 17 00:00:00 2001 From: Igor Chevdar Date: Thu, 29 Oct 2020 13:47:04 +0500 Subject: [PATCH] [IR] Fixed bug with type parameters of referenced constructor --- .../backend/common/lower/LocalDeclarationsLowering.kt | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/LocalDeclarationsLowering.kt b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/LocalDeclarationsLowering.kt index d9a850e635c..5ec8868dc3c 100644 --- a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/LocalDeclarationsLowering.kt +++ b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/LocalDeclarationsLowering.kt @@ -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) } }