JVM IR: do not erase static fields in annotation classes
This commit is contained in:
+4
-2
@@ -46,9 +46,11 @@ class JvmPropertiesLowering(private val context: JvmBackendContext) : IrElementT
|
|||||||
private fun lowerProperty(declaration: IrDeclaration, kind: ClassKind): List<IrDeclaration>? =
|
private fun lowerProperty(declaration: IrDeclaration, kind: ClassKind): List<IrDeclaration>? =
|
||||||
if (declaration is IrProperty)
|
if (declaration is IrProperty)
|
||||||
ArrayList<IrDeclaration>(4).apply {
|
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.
|
// 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) {
|
if ((kind != ClassKind.ANNOTATION_CLASS || field?.isStatic == true) && field?.parent == declaration.parent) {
|
||||||
addIfNotNull(declaration.backingField)
|
addIfNotNull(field)
|
||||||
}
|
}
|
||||||
addIfNotNull(declaration.getter)
|
addIfNotNull(declaration.getter)
|
||||||
addIfNotNull(declaration.setter)
|
addIfNotNull(declaration.setter)
|
||||||
|
|||||||
@@ -2,7 +2,6 @@
|
|||||||
// IGNORE_BACKEND_FIR: JVM_IR
|
// IGNORE_BACKEND_FIR: JVM_IR
|
||||||
// WITH_RUNTIME
|
// WITH_RUNTIME
|
||||||
// TARGET_BACKEND: JVM
|
// TARGET_BACKEND: JVM
|
||||||
// IGNORE_BACKEND: JVM_IR
|
|
||||||
// FILE: Foo.java
|
// FILE: Foo.java
|
||||||
|
|
||||||
@Anno(Anno.CONST)
|
@Anno(Anno.CONST)
|
||||||
@@ -18,4 +17,3 @@ annotation class Anno(val value: Int) {
|
|||||||
|
|
||||||
fun box(): String =
|
fun box(): String =
|
||||||
if ((Foo::class.java.annotations.single() as Anno).value == 42) "OK" else "Fail"
|
if ((Foo::class.java.annotations.single() as Anno).value == 42) "OK" else "Fail"
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user