Allow IrConstTransformer to visit annotations of all declarations

This commit is contained in:
Ivan Kylchik
2020-06-26 18:04:40 +03:00
parent c87b12ec2f
commit 6fa03297f9
2 changed files with 9 additions and 4 deletions
@@ -36,6 +36,8 @@ class IrConstTransformer(irModuleFragment: IrModuleFragment) : IrElementTransfor
}
override fun visitField(declaration: IrField): IrStatement {
transformAnnotations(declaration)
val initializer = declaration.initializer
val expression = initializer?.expression ?: return declaration
if (expression is IrConst<*>) return declaration
@@ -47,8 +49,13 @@ class IrConstTransformer(irModuleFragment: IrModuleFragment) : IrElementTransfor
return declaration
}
override fun visitClass(declaration: IrClass): IrStatement {
declaration.annotations.forEach {
override fun visitDeclaration(declaration: IrDeclaration): IrStatement {
transformAnnotations(declaration)
return super.visitDeclaration(declaration)
}
private fun transformAnnotations(annotationContainer: IrAnnotationContainer) {
annotationContainer.annotations.forEach {
for (i in 0 until it.valueArgumentsCount) {
val arg = it.getValueArgument(i) ?: continue
if (arg.accept(IrCompileTimeChecker(mode = EvaluationMode.ONLY_BUILTINS), null)) {
@@ -57,7 +64,6 @@ class IrConstTransformer(irModuleFragment: IrModuleFragment) : IrElementTransfor
}
}
}
return super.visitClass(declaration)
}
private fun IrExpression.convertToConstIfPossible(type: IrType): IrExpression {
@@ -1,4 +1,3 @@
// IGNORE_BACKEND_FIR: JVM_IR
// IGNORE_BACKEND: JS_IR
// IGNORE_BACKEND: JS_IR_ES6
// TODO: muted automatically, investigate should it be ran for JS or not