diff --git a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/InnerClassesLowering.kt b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/InnerClassesLowering.kt index 807d6beb197..45e340e5d53 100644 --- a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/InnerClassesLowering.kt +++ b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/InnerClassesLowering.kt @@ -5,18 +5,12 @@ package org.jetbrains.kotlin.backend.common.lower -import org.jetbrains.kotlin.backend.common.BackendContext -import org.jetbrains.kotlin.backend.common.BodyLoweringPass -import org.jetbrains.kotlin.backend.common.ClassLoweringPass -import org.jetbrains.kotlin.backend.common.IrElementTransformerVoidWithContext +import org.jetbrains.kotlin.backend.common.* import org.jetbrains.kotlin.backend.common.phaser.makeIrFilePhase import org.jetbrains.kotlin.ir.IrStatement import org.jetbrains.kotlin.ir.builders.irGet import org.jetbrains.kotlin.ir.builders.irSetField -import org.jetbrains.kotlin.ir.declarations.IrClass -import org.jetbrains.kotlin.ir.declarations.IrConstructor -import org.jetbrains.kotlin.ir.declarations.IrFunction -import org.jetbrains.kotlin.ir.declarations.IrValueParameter +import org.jetbrains.kotlin.ir.declarations.* import org.jetbrains.kotlin.ir.expressions.* import org.jetbrains.kotlin.ir.expressions.impl.* import org.jetbrains.kotlin.ir.symbols.IrConstructorSymbol @@ -122,9 +116,9 @@ val innerClassConstructorCallsPhase = makeIrFilePhase( description = "Handle constructor calls for inner classes" ) -class InnerClassConstructorCallsLowering(val context: BackendContext) : BodyLoweringPass { - override fun lower(irBody: IrBody) { - irBody.transformChildrenVoid(object : IrElementTransformerVoid() { +class InnerClassConstructorCallsLowering(val context: BackendContext) : FileLoweringPass { + override fun lower(irFile: IrFile) { + irFile.transformChildrenVoid(object : IrElementTransformerVoid() { override fun visitConstructorCall(expression: IrConstructorCall): IrExpression { expression.transformChildrenVoid(this) @@ -190,12 +184,11 @@ class InnerClassConstructorCallsLowering(val context: BackendContext) : BodyLowe } newReference.let { + it.copyTypeArgumentsFrom(expression) + // TODO: This is wrong, since we moved all parameters into value parameters, + // but changing it breaks JS IR in CallableReferenceLowering. it.dispatchReceiver = expression.dispatchReceiver it.extensionReceiver = expression.extensionReceiver - for (t in 0 until expression.typeArgumentsCount) { - it.putTypeArgument(t, expression.getTypeArgument(t)) - } - for (v in 0 until expression.valueArgumentsCount) { it.putValueArgument(v, expression.getValueArgument(v)) }