// TARGET_BACKEND: JVM_IR // WITH_STDLIB import kotlinx.serialization.* import kotlinx.serialization.json.* import kotlinx.serialization.internal.* import kotlinx.serialization.descriptors.* import kotlinx.serialization.modules.* @Serializable class Simple(val firstName: String, val lastName: String) @Serializable data class Box(val boxed: T) @Serializable object SerializableObject {} val module = SerializersModule {} inline fun getSer(module: SerializersModule): KSerializer { return module.serializer() } inline fun getBoxSer(module: SerializersModule): KSerializer> { return module.serializer>() } inline fun listSer(module: SerializersModule): KSerializer> { return module.serializer>() } fun SerialDescriptor.recursiveToString(): String { return (0 until elementsCount).joinToString(", ", "$serialName(", ")") { i -> getElementName(i) + ": " + getElementDescriptor(i).recursiveToString() } } fun assertHasSerializers(kSerializer: KSerializer<*>, list: List) { var str = kSerializer.descriptor.recursiveToString() for (name in list) { if (name !in str) error("Not found $name in $str") str = str.replaceBefore(name, "") str = str.removePrefix(name) } } fun box(): String { assertHasSerializers(serializer(), listOf("Simple")) assertHasSerializers(getSer(module), listOf("Simple")) assertHasSerializers(getSer>(module), listOf("Box", "Simple")) assertHasSerializers(getBoxSer(module), listOf("Box", "Simple")) assertHasSerializers(listSer(module), listOf("ArrayList", "Simple")) assertHasSerializers(serializer>>(), listOf("Box", "ArrayList", "Simple")) assertHasSerializers(listSer>>(module), listOf("ArrayList", "Box", "ArrayList", "Simple")) assertHasSerializers(serializer(), listOf("Int")) assertHasSerializers(serializer(), listOf("SerializableObject")) assertHasSerializers(listSer>>(module), listOf("ArrayList", "ArrayList", "Box", "Int")) return "OK" }