JVM IR: do not erase static fields in annotation classes

This commit is contained in:
Alexander Udalov
2020-01-23 18:40:11 +01:00
parent 00de5dae32
commit 19b516cbf4
2 changed files with 4 additions and 4 deletions
@@ -46,9 +46,11 @@ class JvmPropertiesLowering(private val context: JvmBackendContext) : IrElementT
private fun lowerProperty(declaration: IrDeclaration, kind: ClassKind): List<IrDeclaration>? =
if (declaration is IrProperty)
ArrayList<IrDeclaration>(4).apply {
val field = declaration.backingField
// JvmFields in a companion object refer to companion's owners and should not be generated within companion.
if (kind != ClassKind.ANNOTATION_CLASS && declaration.backingField?.parent == declaration.parent) {
addIfNotNull(declaration.backingField)
if ((kind != ClassKind.ANNOTATION_CLASS || field?.isStatic == true) && field?.parent == declaration.parent) {
addIfNotNull(field)
}
addIfNotNull(declaration.getter)
addIfNotNull(declaration.setter)
@@ -2,7 +2,6 @@
// IGNORE_BACKEND_FIR: JVM_IR
// WITH_RUNTIME
// TARGET_BACKEND: JVM
// IGNORE_BACKEND: JVM_IR
// FILE: Foo.java
@Anno(Anno.CONST)
@@ -18,4 +17,3 @@ annotation class Anno(val value: Int) {
fun box(): String =
if ((Foo::class.java.annotations.single() as Anno).value == 42) "OK" else "Fail"