// IGNORE_BACKEND_FIR: JVM_IR // KJS_WITH_FULL_RUNTIME // WITH_RUNTIME class Itr : Iterator by ArrayList().iterator() class MItr : MutableIterator by ArrayList().iterator() class LItr : ListIterator by ArrayList().listIterator() class MLItr : MutableListIterator by ArrayList().listIterator() class It : Iterable by ArrayList() class MIt : MutableIterable by ArrayList() class C : Collection by ArrayList() class MC : MutableCollection by ArrayList() class L : List by ArrayList() class ML : MutableList by ArrayList() class S : Set by HashSet() class MS : MutableSet by HashSet() class M : Map by HashMap() class MM : MutableMap by HashMap() class ME : Map.Entry { override val key: String get() = throw UnsupportedOperationException() override val value: String get() = throw UnsupportedOperationException() } class MME : MutableMap.MutableEntry { override val key: String get() = throw UnsupportedOperationException() override val value: String get() = throw UnsupportedOperationException() override fun setValue(value: String): String = throw UnsupportedOperationException() } inline fun reifiedSafeAsReturnsNonNull(x: Any?, operation: String) { val y = try { x as? T } catch (e: Throwable) { throw AssertionError("$operation: should not throw exceptions, got $e") } if (y == null) { throw AssertionError("$operation: should return non-null, got null") } } inline fun reifiedSafeAsReturnsNull(x: Any?, operation: String) { val y = try { x as? T } catch (e: Throwable) { throw AssertionError("$operation: should not throw exceptions, got $e") } if (y != null) { throw AssertionError("$operation: should return null, got $y") } } fun box(): String { val itr = Itr() as Any val mitr = MItr() reifiedSafeAsReturnsNull>(itr, "reifiedSafeAs>(itr)") reifiedSafeAsReturnsNonNull>(mitr, "reifiedSafeAs>(mitr)") val litr = LItr() as Any val mlitr = MLItr() reifiedSafeAsReturnsNull>(litr, "reifiedSafeAs>(litr)") reifiedSafeAsReturnsNull>(litr, "reifiedSafeAs>(litr)") reifiedSafeAsReturnsNonNull>(mlitr, "reifiedSafeAs>(mlitr)") val it = It() as Any val mit = MIt() val arrayList = ArrayList() reifiedSafeAsReturnsNull>(it, "reifiedSafeAs>(it)") reifiedSafeAsReturnsNonNull>(mit, "reifiedSafeAs>(mit)") reifiedSafeAsReturnsNonNull>(arrayList, "reifiedSafeAs>(arrayList)") val coll = C() as Any val mcoll = MC() reifiedSafeAsReturnsNull>(coll, "reifiedSafeAs>(coll)") reifiedSafeAsReturnsNull>(coll, "reifiedSafeAs>(coll)") reifiedSafeAsReturnsNonNull>(mcoll, "reifiedSafeAs>(mcoll)") reifiedSafeAsReturnsNonNull>(mcoll, "reifiedSafeAs>(mcoll)") reifiedSafeAsReturnsNonNull>(arrayList, "reifiedSafeAs>(arrayList)") val list = L() as Any val mlist = ML() reifiedSafeAsReturnsNull>(list, "reifiedSafeAs>(list)") reifiedSafeAsReturnsNull>(list, "reifiedSafeAs>(list)") reifiedSafeAsReturnsNull>(list, "reifiedSafeAs>(list)") reifiedSafeAsReturnsNonNull>(mlist, "reifiedSafeAs>(mlist)") reifiedSafeAsReturnsNonNull>(mlist, "reifiedSafeAs>(mlist)") reifiedSafeAsReturnsNonNull>(mlist, "reifiedSafeAs>(mlist)") reifiedSafeAsReturnsNonNull>(arrayList, "reifiedSafeAs>(arrayList)") val set = S() as Any val mset = MS() val hashSet = HashSet() reifiedSafeAsReturnsNull>(set, "reifiedSafeAs>(set)") reifiedSafeAsReturnsNull>(set, "reifiedSafeAs>(set)") reifiedSafeAsReturnsNull>(set, "reifiedSafeAs>(set)") reifiedSafeAsReturnsNonNull>(mset, "reifiedSafeAs>(mset)") reifiedSafeAsReturnsNonNull>(mset, "reifiedSafeAs>(mset)") reifiedSafeAsReturnsNonNull>(mset, "reifiedSafeAs>(mset)") reifiedSafeAsReturnsNonNull>(hashSet, "reifiedSafeAs>(hashSet)") reifiedSafeAsReturnsNonNull>(hashSet, "reifiedSafeAs>(hashSet)") reifiedSafeAsReturnsNonNull>(hashSet, "reifiedSafeAs>(hashSet)") val map = M() as Any val mmap = MM() val hashMap = HashMap() reifiedSafeAsReturnsNull>(map, "reifiedSafeAs>(map)") reifiedSafeAsReturnsNonNull>(mmap, "reifiedSafeAs>(mmap)") reifiedSafeAsReturnsNonNull>(hashMap, "reifiedSafeAs>(hashMap)") val entry = ME() as Any val mentry = MME() hashMap[""] = "" val hashMapEntry = hashMap.entries.first() reifiedSafeAsReturnsNull>(entry, "reifiedSafeAs>(entry)") reifiedSafeAsReturnsNonNull>(mentry, "reifiedSafeAs>(mentry)") reifiedSafeAsReturnsNonNull>(hashMapEntry, "reifiedSafeAs>(hashMapEntry)") reifiedSafeAsReturnsNull>(null, "reifiedSafeAs>(null)") reifiedSafeAsReturnsNull>(null, "reifiedSafeAs>(null)") reifiedSafeAsReturnsNull>(null, "reifiedSafeAs>(null)") reifiedSafeAsReturnsNull>(null, "reifiedSafeAs>(null)") reifiedSafeAsReturnsNull>(null, "reifiedSafeAs>(null)") reifiedSafeAsReturnsNull>(null, "reifiedSafeAs>(null)") reifiedSafeAsReturnsNull>(null, "reifiedSafeAs>(null)") reifiedSafeAsReturnsNull>(null, "reifiedSafeAs>(null)") return "OK" }