From 6e501e5f9bc6adae616c3774866460d1a9b86204 Mon Sep 17 00:00:00 2001 From: Anton Bannykh Date: Fri, 3 Jan 2020 16:08:42 +0300 Subject: [PATCH] AnnotationConstructorLowering --- .../js/lower/AnnotationConstructorLowering.kt | 22 ++++++++++++------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/AnnotationConstructorLowering.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/AnnotationConstructorLowering.kt index d0d735afcc6..afcb0209b7a 100644 --- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/AnnotationConstructorLowering.kt +++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/AnnotationConstructorLowering.kt @@ -5,26 +5,32 @@ package org.jetbrains.kotlin.ir.backend.js.lower -import org.jetbrains.kotlin.backend.common.ClassLoweringPass import org.jetbrains.kotlin.backend.common.CommonBackendContext +import org.jetbrains.kotlin.backend.common.DeclarationTransformer import org.jetbrains.kotlin.descriptors.ClassKind -import org.jetbrains.kotlin.ir.declarations.IrClass import org.jetbrains.kotlin.ir.declarations.IrConstructor +import org.jetbrains.kotlin.ir.declarations.IrDeclaration import org.jetbrains.kotlin.ir.expressions.impl.IrBlockBodyImpl import org.jetbrains.kotlin.ir.expressions.impl.IrInstanceInitializerCallImpl +import org.jetbrains.kotlin.ir.util.parentAsClass -class AnnotationConstructorLowering(context: CommonBackendContext) : ClassLoweringPass { +class AnnotationConstructorLowering(context: CommonBackendContext) : DeclarationTransformer { private val unitType = context.irBuiltIns.unitType - override fun lower(irClass: IrClass) { - if (irClass.kind != ClassKind.ANNOTATION_CLASS) return + override fun transformFlat(declaration: IrDeclaration): List? { + if (declaration !is IrConstructor || !declaration.isPrimary) return null + + val irClass = declaration.parentAsClass + + if (irClass.kind != ClassKind.ANNOTATION_CLASS) return null - val constructor = irClass.declarations.filterIsInstance().single() - assert(constructor.isPrimary) // put empty body to make sure proper initializer is generated - constructor.body = IrBlockBodyImpl(constructor.startOffset, constructor.endOffset).apply { + // TODO what about its previous body? + declaration.body = IrBlockBodyImpl(declaration.startOffset, declaration.endOffset) { statements += IrInstanceInitializerCallImpl(startOffset, endOffset, irClass.symbol, unitType) } + + return null } } \ No newline at end of file