import kotlin.reflect.jvm.* abstract class Itr : Iterator abstract class MItr : MutableIterator abstract class LItr : ListIterator abstract class MLItr : MutableListIterator abstract class It : Iterable abstract class MIt : MutableIterable abstract class C : Collection abstract class MC : MutableCollection abstract class L : List abstract class ML : MutableList abstract class S : Set abstract class MS : MutableSet abstract class M : Map abstract class MM : MutableMap abstract class ME : Map.Entry abstract class MME : MutableMap.MutableEntry abstract class L2 : L() abstract class ML2 : ML() abstract class Weird : Iterator, MutableList fun expectInterfaces(jClass: Class<*>, expectedInterfaceNames: Set) { val actualInterfaceNames = jClass.getInterfaces().mapTo(linkedSetOf()) { it.name } assert(actualInterfaceNames == expectedInterfaceNames) { "${jClass.name}: interfaces: expected: $expectedInterfaceNames; actual: $actualInterfaceNames" } } fun box(): String { expectInterfaces(Itr::class.java, setOf("java.util.Iterator", "kotlin.jvm.internal.markers.KMappedMarker")) expectInterfaces(MItr::class.java, setOf("java.util.Iterator", "kotlin.jvm.internal.markers.KMutableIterator")) expectInterfaces(LItr::class.java, setOf("java.util.ListIterator", "kotlin.jvm.internal.markers.KMappedMarker")) expectInterfaces(MLItr::class.java, setOf("java.util.ListIterator", "kotlin.jvm.internal.markers.KMutableListIterator")) expectInterfaces(It::class.java, setOf("java.lang.Iterable", "kotlin.jvm.internal.markers.KMappedMarker")) expectInterfaces(MIt::class.java, setOf("java.lang.Iterable", "kotlin.jvm.internal.markers.KMutableIterable")) expectInterfaces(C::class.java, setOf("java.util.Collection", "kotlin.jvm.internal.markers.KMappedMarker")) expectInterfaces(MC::class.java, setOf("java.util.Collection", "kotlin.jvm.internal.markers.KMutableCollection")) expectInterfaces(L::class.java, setOf("java.util.List", "kotlin.jvm.internal.markers.KMappedMarker")) expectInterfaces(ML::class.java, setOf("java.util.List", "kotlin.jvm.internal.markers.KMutableList")) expectInterfaces(S::class.java, setOf("java.util.Set", "kotlin.jvm.internal.markers.KMappedMarker")) expectInterfaces(MS::class.java, setOf("java.util.Set", "kotlin.jvm.internal.markers.KMutableSet")) expectInterfaces(M::class.java, setOf("java.util.Map", "kotlin.jvm.internal.markers.KMappedMarker")) expectInterfaces(MM::class.java, setOf("java.util.Map", "kotlin.jvm.internal.markers.KMutableMap")) expectInterfaces(ME::class.java, setOf("java.util.Map\$Entry", "kotlin.jvm.internal.markers.KMappedMarker")) expectInterfaces(MME::class.java, setOf("java.util.Map\$Entry", "kotlin.jvm.internal.markers.KMutableMap\$Entry")) expectInterfaces(L2::class.java, setOf()) expectInterfaces(ML2::class.java, setOf()) expectInterfaces(Weird::class.java, setOf("java.util.Iterator", "kotlin.jvm.internal.markers.KMappedMarker", "java.util.List", "kotlin.jvm.internal.markers.KMutableList")) return "OK" }