[JVM IR]Fix detecting annotation retention
This commit is contained in:
committed by
teamcityserver
parent
47b0071560
commit
968f823b72
+9
-4
@@ -36,6 +36,7 @@ import org.jetbrains.kotlin.descriptors.annotations.KotlinRetention
|
|||||||
import org.jetbrains.kotlin.descriptors.annotations.KotlinTarget
|
import org.jetbrains.kotlin.descriptors.annotations.KotlinTarget
|
||||||
import org.jetbrains.kotlin.ir.declarations.*
|
import org.jetbrains.kotlin.ir.declarations.*
|
||||||
import org.jetbrains.kotlin.ir.expressions.*
|
import org.jetbrains.kotlin.ir.expressions.*
|
||||||
|
import org.jetbrains.kotlin.ir.symbols.IrEnumEntrySymbol
|
||||||
import org.jetbrains.kotlin.ir.types.*
|
import org.jetbrains.kotlin.ir.types.*
|
||||||
import org.jetbrains.kotlin.ir.util.*
|
import org.jetbrains.kotlin.ir.util.*
|
||||||
import org.jetbrains.kotlin.load.java.JvmAnnotationNames
|
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 ->
|
irClass.getAnnotation(FqName(java.lang.annotation.Retention::class.java.name))?.let { retentionAnnotation ->
|
||||||
val value = retentionAnnotation.getValueArgument(0)
|
val value = retentionAnnotation.getValueArgument(0)
|
||||||
if (value is IrEnumEntry) {
|
if (value is IrDeclarationReference) {
|
||||||
val enumClassFqName = value.parentAsClass.fqNameWhenAvailable
|
val symbol = value.symbol
|
||||||
if (RetentionPolicy::class.java.name == enumClassFqName?.asString()) {
|
if (symbol is IrEnumEntrySymbol) {
|
||||||
return RetentionPolicy.valueOf(value.name.asString())
|
val entry = symbol.owner
|
||||||
|
val enumClassFqName = entry.parentAsClass.fqNameWhenAvailable
|
||||||
|
if (RetentionPolicy::class.java.name == enumClassFqName?.asString()) {
|
||||||
|
return RetentionPolicy.valueOf(entry.name.asString())
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user