From 968f823b721fb3640be15dd968f4d984f0729b01 Mon Sep 17 00:00:00 2001 From: Dmitriy Novozhilov Date: Mon, 12 Jul 2021 17:20:06 +0300 Subject: [PATCH] [JVM IR]Fix detecting annotation retention --- .../kotlin/backend/jvm/codegen/AnnotationCodegen.kt | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/codegen/AnnotationCodegen.kt b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/codegen/AnnotationCodegen.kt index f244f94b518..07f605c1d1c 100644 --- a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/codegen/AnnotationCodegen.kt +++ b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/codegen/AnnotationCodegen.kt @@ -36,6 +36,7 @@ import org.jetbrains.kotlin.descriptors.annotations.KotlinRetention import org.jetbrains.kotlin.descriptors.annotations.KotlinTarget import org.jetbrains.kotlin.ir.declarations.* import org.jetbrains.kotlin.ir.expressions.* +import org.jetbrains.kotlin.ir.symbols.IrEnumEntrySymbol import org.jetbrains.kotlin.ir.types.* import org.jetbrains.kotlin.ir.util.* import org.jetbrains.kotlin.load.java.JvmAnnotationNames @@ -377,10 +378,14 @@ abstract class AnnotationCodegen( } irClass.getAnnotation(FqName(java.lang.annotation.Retention::class.java.name))?.let { retentionAnnotation -> val value = retentionAnnotation.getValueArgument(0) - if (value is IrEnumEntry) { - val enumClassFqName = value.parentAsClass.fqNameWhenAvailable - if (RetentionPolicy::class.java.name == enumClassFqName?.asString()) { - return RetentionPolicy.valueOf(value.name.asString()) + if (value is IrDeclarationReference) { + val symbol = value.symbol + if (symbol is IrEnumEntrySymbol) { + val entry = symbol.owner + val enumClassFqName = entry.parentAsClass.fqNameWhenAvailable + if (RetentionPolicy::class.java.name == enumClassFqName?.asString()) { + return RetentionPolicy.valueOf(entry.name.asString()) + } } } }