Implement proper contract for generated java.lang.Annotation.hashCode()

#KT-48606 Fixed
This commit is contained in:
Leonid Startsev
2021-09-06 19:29:08 +03:00
committed by Space
parent 94402ba488
commit 6f954462d6
10 changed files with 200 additions and 113 deletions
@@ -0,0 +1,35 @@
// IGNORE_BACKEND_FIR: JVM_IR
// TARGET_BACKEND: JVM_IR
// WITH_RUNTIME
// !LANGUAGE: +InstantiationOfAnnotationClasses
import kotlin.reflect.KClass
import kotlin.test.assertEquals
import kotlin.test.assertTrue as assert
annotation class ZeroArg()
annotation class OneArg(val arg: String)
annotation class ManyArg(val i: Int, val o: OneArg, val z: Boolean, val k: KClass<*>, val e: IntArray)
@ZeroArg
@OneArg("a")
@ManyArg(42, OneArg("b"), true, OneArg::class, intArrayOf(1, 2, 3))
class Target
fun box(): String {
val reflectiveZero = Target::class.java.getAnnotation(ZeroArg::class.java)
val reflectiveOne = Target::class.java.getAnnotation(OneArg::class.java)
val reflectiveMany = Target::class.java.getAnnotation(ManyArg::class.java)
val createdZero = ZeroArg()
val createdOne = OneArg("a")
val createdMany = ManyArg(42, OneArg("b"), true, OneArg::class, intArrayOf(1, 2, 3))
assertEquals(reflectiveZero.hashCode(), createdZero.hashCode(), "zero")
assertEquals(reflectiveOne.hashCode(), createdOne.hashCode(), "one")
assertEquals(reflectiveMany.hashCode(), createdMany.hashCode(), "many")
return "OK"
}