From e399b4cd12e3f9568603832b18774964867eeef3 Mon Sep 17 00:00:00 2001 From: Alexander Udalov Date: Fri, 9 Oct 2020 17:17:34 +0200 Subject: [PATCH] JVM IR: minor, sort ElementType fields as in the old backend In the old backend, targets are generated in the order of their declaration in the ElementType enum, see AnnotationCodegen.java:306 (EnumSet guarantees such iteration ordering). This has no effect other than reducing non-essential differences when comparing ABI of JVM vs JVM_IR. --- .../jvm/lower/AdditionalClassAnnotationLowering.kt | 5 ++++- .../codegen/box/annotations/annotationTargets.kt | 9 +++------ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/AdditionalClassAnnotationLowering.kt b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/AdditionalClassAnnotationLowering.kt index 89e686b53e4..8ac1771d19f 100644 --- a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/AdditionalClassAnnotationLowering.kt +++ b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/AdditionalClassAnnotationLowering.kt @@ -40,6 +40,7 @@ import org.jetbrains.kotlin.ir.util.isAnnotationClass import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.utils.addToStdlib.safeAs +import java.lang.annotation.ElementType internal val additionalClassAnnotationPhase = makeIrFilePhase( ::AdditionalClassAnnotationLowering, @@ -192,7 +193,9 @@ private class AdditionalClassAnnotationLowering(private val context: JvmBackendC ?: throw AssertionError("No annotation target map for JVM target $jvmTarget") val targets = irClass.applicableTargetSet() ?: return - val javaTargets = targets.mapNotNull { annotationTargetMap[it] }.toSet() + val javaTargets = targets.mapNotNullTo(HashSet()) { annotationTargetMap[it] }.sortedBy { + ElementType.valueOf(it.symbol.owner.name.asString()) + } val vararg = IrVarargImpl( UNDEFINED_OFFSET, UNDEFINED_OFFSET, diff --git a/compiler/testData/codegen/box/annotations/annotationTargets.kt b/compiler/testData/codegen/box/annotations/annotationTargets.kt index 0f97278cf21..093fd518ad6 100644 --- a/compiler/testData/codegen/box/annotations/annotationTargets.kt +++ b/compiler/testData/codegen/box/annotations/annotationTargets.kt @@ -11,12 +11,9 @@ public annotation class TestAnn fun box(): String { val testAnnClass = TestAnn::class.java val targetAnn = testAnnClass.getAnnotation(java.lang.annotation.Target::class.java) - val targets = targetAnn.value - if (targets.size != 2) { - return targets.toList().toString() - } - if (targets.toSet() != setOf(java.lang.annotation.ElementType.FIELD, java.lang.annotation.ElementType.METHOD)) { - return targets.toList().toString() + val targets = targetAnn.value.toList() + if (targets != listOf(java.lang.annotation.ElementType.FIELD, java.lang.annotation.ElementType.METHOD)) { + return targets.toString() } return "OK" }