| // WITH_REFLECT | |
| // TARGET_BACKEND: JVM | |
| // WORKS_WHEN_VALUE_CLASS | |
| 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<Int?>) | |
| OPTIONAL_JVM_INLINE_ANNOTATION | |
| value class ICAny(val a: Any) | |
| OPTIONAL_JVM_INLINE_ANNOTATION | |
| value class ICAnyArray(val a: Array<Any>) | |
| OPTIONAL_JVM_INLINE_ANNOTATION | |
| value class ICAnyNArray(val a: Array<Any?>) | |
| annotation class Ann(val c: KClass<*>) | |
| annotation class AnnArray(val c: Array<KClass<*>>) | |
| @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 | |
| inline fun <reified T> List<*>.firstIsInstance(): T { | |
| for (element in this) if (element is T) return element | |
| throw NoSuchElementException("No element of given type found") | |
| } | |
| fun box(): String { | |
| var klass = (CInt::class.annotations.firstIsInstance<Ann>()).c.toString() | |
| if (klass != "class test.ICInt") return "Expected class test.ICInt, got $klass" | |
| klass = (CIntArray::class.annotations.firstIsInstance<Ann>()).c.toString() | |
| if (klass != "class test.ICIntArray") return "Expected class test.ICIntArray, got $klass" | |
| klass = (CIntN::class.annotations.firstIsInstance<Ann>()).c.toString() | |
| if (klass != "class test.ICIntN") return "Expected class test.ICIntN, got $klass" | |
| klass = (CIntNArray::class.annotations.firstIsInstance<Ann>()).c.toString() | |
| if (klass != "class test.ICIntNArray") return "Expected class test.ICIntNArray, got $klass" | |
| klass = (CAny::class.annotations.firstIsInstance<Ann>()).c.toString() | |
| if (klass != "class test.ICAny") return "Expected class test.ICAny, got $klass" | |
| klass = (CAnyArray::class.annotations.firstIsInstance<Ann>()).c.toString() | |
| if (klass != "class test.ICAnyArray") return "Expected class test.ICAnyArray, got $klass" | |
| klass = (CResult::class.annotations.firstIsInstance<Ann>()).c.toString() | |
| if (klass != "class kotlin.Result") return "Expected class kotlin.Result, got $klass" | |
| klass = (CAnyNArray::class.annotations.firstIsInstance<Ann>()).c.toString() | |
| if (klass != "class test.ICAnyNArray") return "Expected class test.ICAnyNArray, got $klass" | |
| klass = (CInt::class.annotations.firstIsInstance<AnnArray>()).c[0].toString() | |
| if (klass != "class test.ICInt") return "Expected class test.ICInt, got $klass" | |
| klass = (CIntArray::class.annotations.firstIsInstance<AnnArray>()).c[0].toString() | |
| if (klass != "class test.ICIntArray") return "Expected class test.ICIntArray, got $klass" | |
| klass = (CIntN::class.annotations.firstIsInstance<AnnArray>()).c[0].toString() | |
| if (klass != "class test.ICIntN") return "Expected class test.ICIntN, got $klass" | |
| klass = (CIntNArray::class.annotations.firstIsInstance<AnnArray>()).c[0].toString() | |
| if (klass != "class test.ICIntNArray") return "Expected class test.ICIntNArray, got $klass" | |
| klass = (CAny::class.annotations.firstIsInstance<AnnArray>()).c[0].toString() | |
| if (klass != "class test.ICAny") return "Expected class test.ICAny, got $klass" | |
| klass = (CAnyArray::class.annotations.firstIsInstance<AnnArray>()).c[0].toString() | |
| if (klass != "class test.ICAnyArray") return "Expected class test.ICAnyArray, got $klass" | |
| klass = (CResult::class.annotations.firstIsInstance<AnnArray>()).c[0].toString() | |
| if (klass != "class kotlin.Result") return "Expected class kotlin.Result, got $klass" | |
| klass = (CAnyNArray::class.annotations.firstIsInstance<AnnArray>()).c[0].toString() | |
| if (klass != "class test.ICAnyNArray") return "Expected class test.ICAnyNArray, got $klass" | |
| return "OK" | |
| } |