// WITH_STDLIB import kotlinx.serialization.* // Serializers for classes containing themselves as properties should be cached correctly @Serializable class Plain(val p: Plain? = null) @Serializable sealed class Sealed(val p: Sealed? = null) @Serializable open class Open(val p: Open? = null) @Serializable abstract class Abstract(val p: Abstract? = null) @Serializable class GenericHolder { var value: T? = null } @Serializable sealed class SealedGeneric { var holder = GenericHolder() } @Serializable sealed class SealedListGeneric { var holder = GenericHolder>>() } @Serializable class AccessFromCompanion(@Contextual val category: Any) { companion object { init { serializer().descriptor.getElementDescriptor(0).isNullable } var isNullable = serializer().descriptor.getElementDescriptor(0).isNullable val isNullable2 = serializer().descriptor.getElementDescriptor(0).isNullable } } fun box(): String { // A correctly cached class must be initialized correctly in order to exclude cyclic nesting of caches Plain.serializer() Sealed.serializer() Open.serializer() Abstract.serializer() SealedGeneric.serializer() SealedListGeneric.serializer() AccessFromCompanion("any") return "OK" }