AnnotationConstructorLowering
This commit is contained in:
committed by
Anton Bannykh
parent
d76bfdf860
commit
6e501e5f9b
+14
-8
@@ -5,26 +5,32 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.ir.backend.js.lower
|
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.CommonBackendContext
|
||||||
|
import org.jetbrains.kotlin.backend.common.DeclarationTransformer
|
||||||
import org.jetbrains.kotlin.descriptors.ClassKind
|
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.IrConstructor
|
||||||
|
import org.jetbrains.kotlin.ir.declarations.IrDeclaration
|
||||||
import org.jetbrains.kotlin.ir.expressions.impl.IrBlockBodyImpl
|
import org.jetbrains.kotlin.ir.expressions.impl.IrBlockBodyImpl
|
||||||
import org.jetbrains.kotlin.ir.expressions.impl.IrInstanceInitializerCallImpl
|
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
|
private val unitType = context.irBuiltIns.unitType
|
||||||
|
|
||||||
override fun lower(irClass: IrClass) {
|
override fun transformFlat(declaration: IrDeclaration): List<IrDeclaration>? {
|
||||||
if (irClass.kind != ClassKind.ANNOTATION_CLASS) return
|
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<IrConstructor>().single()
|
|
||||||
assert(constructor.isPrimary)
|
|
||||||
// put empty body to make sure proper initializer is generated
|
// 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)
|
statements += IrInstanceInitializerCallImpl(startOffset, endOffset, irClass.symbol, unitType)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return null
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user