// WITH_REFLECT // TARGET_BACKEND: JVM // IGNORE_BACKEND: JVM // WORKS_WHEN_VALUE_CLASS // LANGUAGE: +ValueClasses package test import kotlin.reflect.KClass OPTIONAL_JVM_INLINE_ANNOTATION value class ICInt(val i: Int) OPTIONAL_JVM_INLINE_ANNOTATION value class ICIntArray(val i: IntArray) OPTIONAL_JVM_INLINE_ANNOTATION value class ICIntN(val i: Int?) OPTIONAL_JVM_INLINE_ANNOTATION value class ICIntNArray(val i: Array) OPTIONAL_JVM_INLINE_ANNOTATION value class ICAny(val a: Any) OPTIONAL_JVM_INLINE_ANNOTATION value class ICAnyArray(val a: Array) OPTIONAL_JVM_INLINE_ANNOTATION value class ICAnyNArray(val a: Array) annotation class Ann(val c: KClass<*>) annotation class AnnArray(val c: Array>) @Ann(ICInt::class) @AnnArray([ICInt::class]) class CInt @Ann(ICIntArray::class) @AnnArray([ICIntArray::class]) class CIntArray @Ann(ICIntN::class) @AnnArray([ICIntN::class]) class CIntN @Ann(ICIntNArray::class) @AnnArray([ICIntNArray::class]) class CIntNArray @Ann(ICAny::class) @AnnArray([ICAny::class]) class CAny @Ann(ICAnyArray::class) @AnnArray([ICAnyArray::class]) class CAnyArray @Ann(Result::class) @AnnArray([Result::class]) class CResult @Ann(ICAnyNArray::class) @AnnArray([ICAnyNArray::class]) class CAnyNArray fun box(): String { var klass = (CInt::class.annotations.first() as Ann).c.toString() if (klass != "class test.ICInt") return "Expected class test.ICInt, got $klass" klass = (CIntArray::class.annotations.first() as Ann).c.toString() if (klass != "class test.ICIntArray") return "Expected class test.ICIntArray, got $klass" klass = (CIntN::class.annotations.first() as Ann).c.toString() if (klass != "class test.ICIntN") return "Expected class test.ICIntN, got $klass" klass = (CIntNArray::class.annotations.first() as Ann).c.toString() if (klass != "class test.ICIntNArray") return "Expected class test.ICIntNArray, got $klass" klass = (CAny::class.annotations.first() as Ann).c.toString() if (klass != "class test.ICAny") return "Expected class test.ICAny, got $klass" klass = (CAnyArray::class.annotations.first() as Ann).c.toString() if (klass != "class test.ICAnyArray") return "Expected class test.ICAnyArray, got $klass" klass = (CResult::class.annotations.first() as Ann).c.toString() if (klass != "class kotlin.Result") return "Expected class kotlin.Result, got $klass" klass = (CAnyNArray::class.annotations.first() as Ann).c.toString() if (klass != "class test.ICAnyNArray") return "Expected class test.ICAnyNArray, got $klass" klass = (CInt::class.annotations.last() as AnnArray).c[0].toString() if (klass != "class test.ICInt") return "Expected class test.ICInt, got $klass" klass = (CIntArray::class.annotations.last() as AnnArray).c[0].toString() if (klass != "class test.ICIntArray") return "Expected class test.ICIntArray, got $klass" klass = (CIntN::class.annotations.last() as AnnArray).c[0].toString() if (klass != "class test.ICIntN") return "Expected class test.ICIntN, got $klass" klass = (CIntNArray::class.annotations.last() as AnnArray).c[0].toString() if (klass != "class test.ICIntNArray") return "Expected class test.ICIntNArray, got $klass" klass = (CAny::class.annotations.last() as AnnArray).c[0].toString() if (klass != "class test.ICAny") return "Expected class test.ICAny, got $klass" klass = (CAnyArray::class.annotations.last() as AnnArray).c[0].toString() if (klass != "class test.ICAnyArray") return "Expected class test.ICAnyArray, got $klass" klass = (CResult::class.annotations.last() as AnnArray).c[0].toString() if (klass != "class kotlin.Result") return "Expected class kotlin.Result, got $klass" klass = (CAnyNArray::class.annotations.last() as AnnArray).c[0].toString() if (klass != "class test.ICAnyNArray") return "Expected class test.ICAnyNArray, got $klass" return "OK" }