[Serialization] Reorganize module structure
This commit is contained in:
@@ -0,0 +1,144 @@
|
||||
FILE: abstractAndSealed.kt
|
||||
@R|kotlinx/serialization/Serializable|() public sealed interface I : R|kotlin/Any| {
|
||||
public final companion object Companion : R|kotlin/Any| {
|
||||
public final fun serializer(): R|kotlinx/serialization/KSerializer<I>|
|
||||
|
||||
private constructor(): R|I.Companion|
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@R|kotlinx/serialization/Serializable|() public sealed class X : R|I| {
|
||||
protected constructor(): R|X| {
|
||||
super<R|kotlin/Any|>()
|
||||
}
|
||||
|
||||
private final var x: R|kotlin/String| = String(X)
|
||||
private get(): R|kotlin/String|
|
||||
private set(value: R|kotlin/String|): R|kotlin/Unit|
|
||||
|
||||
public final fun exposeX(): R|kotlin/String| {
|
||||
^exposeX this@R|/X|.R|/X.x|
|
||||
}
|
||||
|
||||
public final companion object Companion : R|kotlin/Any| {
|
||||
public final fun serializer(): R|kotlinx/serialization/KSerializer<X>|
|
||||
|
||||
private constructor(): R|X.Companion|
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@R|kotlinx/serialization/Serializable|() public abstract class Y : R|X| {
|
||||
public constructor(): R|Y| {
|
||||
super<R|X|>()
|
||||
}
|
||||
|
||||
private final var y: R|kotlin/String| = String(Y)
|
||||
private get(): R|kotlin/String|
|
||||
private set(value: R|kotlin/String|): R|kotlin/Unit|
|
||||
|
||||
public final fun exposeY(): R|kotlin/String| {
|
||||
^exposeY this@R|/Y|.R|/Y.y|
|
||||
}
|
||||
|
||||
public final companion object Companion : R|kotlin/Any| {
|
||||
public final fun serializer(): R|kotlinx/serialization/KSerializer<Y>|
|
||||
|
||||
private constructor(): R|Y.Companion|
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@R|kotlinx/serialization/Serializable|() public final class Bottom : R|Y| {
|
||||
public constructor(): R|Bottom| {
|
||||
super<R|Y|>()
|
||||
}
|
||||
|
||||
public final companion object Companion : R|kotlin/Any| {
|
||||
public final fun serializer(): R|kotlinx/serialization/KSerializer<Bottom>|
|
||||
|
||||
private constructor(): R|Bottom.Companion|
|
||||
|
||||
}
|
||||
|
||||
public final object $serializer : R|kotlinx/serialization/internal/GeneratedSerializer<Bottom>| {
|
||||
public final fun serialize(encoder: R|kotlinx/serialization/encoding/Encoder|, value: R|Bottom|): R|kotlin/Unit|
|
||||
|
||||
public final fun deserialize(decoder: R|kotlinx/serialization/encoding/Decoder|): R|Bottom|
|
||||
|
||||
public final val descriptor: R|kotlinx/serialization/descriptors/SerialDescriptor|
|
||||
public get(): R|kotlinx/serialization/descriptors/SerialDescriptor|
|
||||
|
||||
public final fun childSerializers(): R|kotlin/Array<kotlinx/serialization/KSerializer<*>>|
|
||||
|
||||
private constructor(): R|Bottom.$serializer|
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
public final fun testData(results: R|kotlin/String|): R|kotlin/String| {
|
||||
when () {
|
||||
!=(R|<local>/results|, String(OK)) -> {
|
||||
^testData R|<local>/results|
|
||||
}
|
||||
}
|
||||
|
||||
lval serial: R|kotlinx/serialization/KSerializer<Bottom>| = Q|Bottom|.R|/Bottom.Companion.serializer|()
|
||||
lval j: R|kotlinx/serialization/json/Json| = R|kotlinx/serialization/json/Json|(<L> = Json@fun R|kotlinx/serialization/json/JsonBuilder|.<anonymous>(): R|kotlin/Unit| <inline=NoInline> {
|
||||
this@R|special/anonymous|.R|kotlinx/serialization/json/JsonBuilder.encodeDefaults| = Boolean(true)
|
||||
}
|
||||
)
|
||||
lval s: R|kotlin/String| = R|<local>/j|.R|kotlinx/serialization/json/Json.encodeToString|<R|Bottom|>(R|<local>/serial|, R|/Bottom.Bottom|())
|
||||
when () {
|
||||
!=(R|<local>/s|, String({"x":"X","y":"Y"})) -> {
|
||||
^testData <strcat>(String(Incorrect encoding: ), R|<local>/s|)
|
||||
}
|
||||
}
|
||||
|
||||
lval decoded: R|Bottom| = R|<local>/j|.R|kotlinx/serialization/json/Json.decodeFromString|<R|Bottom|>(R|<local>/serial|, String({"x":"1","y":"2"}))
|
||||
when () {
|
||||
!=(R|<local>/decoded|.R|/X.exposeX|(), String(1)) -> {
|
||||
^testData String(Incorrect X)
|
||||
}
|
||||
}
|
||||
|
||||
when () {
|
||||
!=(R|<local>/decoded|.R|/Y.exposeY|(), String(2)) -> {
|
||||
^testData String(Incorrect Y)
|
||||
}
|
||||
}
|
||||
|
||||
^testData String(OK)
|
||||
}
|
||||
@R|kotlin/OptIn|(markerClass = vararg(<getClass>(Q|kotlinx/serialization/ExperimentalSerializationApi|))) public final fun testKinds(): R|kotlin/String| {
|
||||
when () {
|
||||
!=(Q|I|.R|/I.Companion.serializer|().R|SubstitutionOverride<kotlinx/serialization/KSerializer.descriptor: R|kotlinx/serialization/descriptors/SerialDescriptor|>|.R|kotlinx/serialization/descriptors/SerialDescriptor.kind|, Q|kotlinx/serialization/descriptors/PolymorphicKind.SEALED|) -> {
|
||||
^testKinds String(Not sealed: I)
|
||||
}
|
||||
}
|
||||
|
||||
when () {
|
||||
!=(Q|X|.R|/X.Companion.serializer|().R|SubstitutionOverride<kotlinx/serialization/KSerializer.descriptor: R|kotlinx/serialization/descriptors/SerialDescriptor|>|.R|kotlinx/serialization/descriptors/SerialDescriptor.kind|, Q|kotlinx/serialization/descriptors/PolymorphicKind.SEALED|) -> {
|
||||
^testKinds String(Not sealed: X)
|
||||
}
|
||||
}
|
||||
|
||||
when () {
|
||||
!=(Q|Y|.R|/Y.Companion.serializer|().R|SubstitutionOverride<kotlinx/serialization/KSerializer.descriptor: R|kotlinx/serialization/descriptors/SerialDescriptor|>|.R|kotlinx/serialization/descriptors/SerialDescriptor.kind|, Q|kotlinx/serialization/descriptors/PolymorphicKind.OPEN|) -> {
|
||||
^testKinds String(Not polymorphic: Y)
|
||||
}
|
||||
}
|
||||
|
||||
lval serial: R|kotlinx/serialization/KSerializer<Bottom>| = Q|Bottom|.R|/Bottom.Companion.serializer|()
|
||||
when () {
|
||||
!=(R|<local>/serial|.R|SubstitutionOverride<kotlinx/serialization/KSerializer.descriptor: R|kotlinx/serialization/descriptors/SerialDescriptor|>|.R|kotlinx/serialization/descriptors/SerialDescriptor.kind|, Q|kotlinx/serialization/descriptors/StructureKind.CLASS|) -> {
|
||||
^testKinds String(Not class: Bottom)
|
||||
}
|
||||
}
|
||||
|
||||
^testKinds String(OK)
|
||||
}
|
||||
public final fun box(): R|kotlin/String| {
|
||||
^box R|/testData|(R|/testKinds|())
|
||||
}
|
||||
@@ -0,0 +1,51 @@
|
||||
// WITH_STDLIB
|
||||
|
||||
import kotlinx.serialization.*
|
||||
import kotlinx.serialization.descriptors.*
|
||||
import kotlinx.serialization.json.*
|
||||
|
||||
@Serializable
|
||||
sealed interface I
|
||||
|
||||
@Serializable
|
||||
sealed class X: I {
|
||||
private var x = "X"
|
||||
|
||||
fun exposeX() = x
|
||||
}
|
||||
|
||||
@Serializable
|
||||
abstract class Y: X() {
|
||||
private var y = "Y"
|
||||
|
||||
fun exposeY() = y
|
||||
}
|
||||
|
||||
@Serializable
|
||||
class Bottom: Y()
|
||||
|
||||
fun testData(results: String): String {
|
||||
if (results != "OK") return results
|
||||
val serial = Bottom.serializer()
|
||||
val j = Json { encodeDefaults = true }
|
||||
val s = j.encodeToString(serial, Bottom())
|
||||
if (s != """{"x":"X","y":"Y"}""") return "Incorrect encoding: $s"
|
||||
val decoded = j.decodeFromString(serial, """{"x":"1","y":"2"}""")
|
||||
if (decoded.exposeX() != "1") return "Incorrect X"
|
||||
if (decoded.exposeY() != "2") return "Incorrect Y"
|
||||
return "OK"
|
||||
}
|
||||
|
||||
@OptIn(ExperimentalSerializationApi::class)
|
||||
fun testKinds(): String {
|
||||
if (I.serializer().descriptor.kind != PolymorphicKind.SEALED) return "Not sealed: I"
|
||||
if (X.serializer().descriptor.kind != PolymorphicKind.SEALED) return "Not sealed: X"
|
||||
if (Y.serializer().descriptor.kind != PolymorphicKind.OPEN) return "Not polymorphic: Y"
|
||||
val serial = Bottom.serializer()
|
||||
if (serial.descriptor.kind != StructureKind.CLASS) return "Not class: Bottom"
|
||||
return "OK"
|
||||
}
|
||||
|
||||
fun box(): String {
|
||||
return testData(testKinds())
|
||||
}
|
||||
+58
@@ -0,0 +1,58 @@
|
||||
FILE: classWithCompanionObject.kt
|
||||
@R|kotlinx/serialization/Serializable|() public final class SomeClass : R|kotlin/Any| {
|
||||
public constructor(i: R|kotlin/Int|): R|SomeClass| {
|
||||
super<R|kotlin/Any|>()
|
||||
}
|
||||
|
||||
public final val i: R|kotlin/Int| = R|<local>/i|
|
||||
public get(): R|kotlin/Int|
|
||||
|
||||
public final companion object Companion : R|kotlin/Any| {
|
||||
public final fun serializer(): R|kotlinx/serialization/KSerializer<SomeClass>|
|
||||
|
||||
private constructor(): R|SomeClass.Companion|
|
||||
|
||||
}
|
||||
|
||||
public final object $serializer : R|kotlinx/serialization/internal/GeneratedSerializer<SomeClass>| {
|
||||
public final fun serialize(encoder: R|kotlinx/serialization/encoding/Encoder|, value: R|SomeClass|): R|kotlin/Unit|
|
||||
|
||||
public final fun deserialize(decoder: R|kotlinx/serialization/encoding/Decoder|): R|SomeClass|
|
||||
|
||||
public final val descriptor: R|kotlinx/serialization/descriptors/SerialDescriptor|
|
||||
public get(): R|kotlinx/serialization/descriptors/SerialDescriptor|
|
||||
|
||||
public final fun childSerializers(): R|kotlin/Array<kotlinx/serialization/KSerializer<*>>|
|
||||
|
||||
private constructor(): R|SomeClass.$serializer|
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
public final fun box(): R|kotlin/String| {
|
||||
lval targetString: R|kotlin/String| = String({"i":42})
|
||||
lval serializer: R|kotlinx/serialization/KSerializer<SomeClass>| = Q|SomeClass.Companion|.R|/SomeClass.Companion.serializer|()
|
||||
lval descriptor: R|kotlinx/serialization/descriptors/SerialDescriptor| = R|<local>/serializer|.R|SubstitutionOverride<kotlinx/serialization/KSerializer.descriptor: R|kotlinx/serialization/descriptors/SerialDescriptor|>|
|
||||
when () {
|
||||
!=(R|<local>/descriptor|.R|kotlin/Any.toString|(), String(SomeClass(i: kotlin.Int))) -> {
|
||||
^box <strcat>(String(Incorrect SerialDescriptor.toString(): ), R|<local>/descriptor|)
|
||||
}
|
||||
}
|
||||
|
||||
lval instance: R|SomeClass| = R|/SomeClass.SomeClass|(Int(42))
|
||||
lval string: R|kotlin/String| = Q|kotlinx/serialization/json/Json|.R|kotlinx/serialization/json/Json.encodeToString|<R|SomeClass|>(R|<local>/serializer|, R|<local>/instance|)
|
||||
when () {
|
||||
!=(R|<local>/string|, R|<local>/targetString|) -> {
|
||||
^box <strcat>(String(Incorrect serialization result: expected ), R|<local>/targetString|, String(, got ), R|<local>/string|)
|
||||
}
|
||||
}
|
||||
|
||||
lval instance2: R|SomeClass| = Q|kotlinx/serialization/json/Json|.R|kotlinx/serialization/json/Json.decodeFromString|<R|SomeClass|>(R|<local>/serializer|, R|<local>/string|)
|
||||
when () {
|
||||
!=(R|<local>/instance2|.R|/SomeClass.i|, R|<local>/instance|.R|/SomeClass.i|) -> {
|
||||
^box <strcat>(String(Incorrect deserialization result: expected ), R|<local>/instance|.R|/SomeClass.i|, String(, got ), R|<local>/instance2|.R|/SomeClass.i|)
|
||||
}
|
||||
}
|
||||
|
||||
^box String(OK)
|
||||
}
|
||||
+22
@@ -0,0 +1,22 @@
|
||||
// WITH_STDLIB
|
||||
|
||||
import kotlinx.serialization.*
|
||||
import kotlinx.serialization.json.*
|
||||
|
||||
@Serializable
|
||||
class SomeClass(val i: Int)
|
||||
|
||||
fun box(): String {
|
||||
val targetString = """{"i":42}"""
|
||||
val serializer = SomeClass.Companion.serializer()
|
||||
val descriptor = serializer.descriptor
|
||||
if (descriptor.toString() != "SomeClass(i: kotlin.Int)") return "Incorrect SerialDescriptor.toString(): $descriptor"
|
||||
val instance = SomeClass(42)
|
||||
val string = Json.encodeToString(serializer, instance)
|
||||
if (string != targetString) return "Incorrect serialization result: expected $targetString, got $string"
|
||||
val instance2 = Json.decodeFromString(serializer, string)
|
||||
if (instance2.i != instance.i) return "Incorrect deserialization result: expected ${instance.i}, got ${instance2.i}"
|
||||
return "OK"
|
||||
}
|
||||
|
||||
|
||||
+61
@@ -0,0 +1,61 @@
|
||||
FILE: classWithGenericParameters.kt
|
||||
@R|kotlinx/serialization/Serializable|() public final class GenericBox<T, V> : R|kotlin/Any| {
|
||||
public constructor<T, V>(i: R|kotlin/Int|, t: R|T|, vs: R|kotlin/collections/List<V>|): R|GenericBox<T, V>| {
|
||||
super<R|kotlin/Any|>()
|
||||
}
|
||||
|
||||
public final val i: R|kotlin/Int| = R|<local>/i|
|
||||
public get(): R|kotlin/Int|
|
||||
|
||||
public final val t: R|T| = R|<local>/t|
|
||||
public get(): R|T|
|
||||
|
||||
public final val vs: R|kotlin/collections/List<V>| = R|<local>/vs|
|
||||
public get(): R|kotlin/collections/List<V>|
|
||||
|
||||
public final companion object Companion : R|kotlin/Any| {
|
||||
public final fun <T, V> serializer(typeSerial0: R|kotlinx/serialization/KSerializer<T>|, typeSerial1: R|kotlinx/serialization/KSerializer<V>|): R|kotlinx/serialization/KSerializer<GenericBox<T, V>>|
|
||||
|
||||
private constructor(): R|GenericBox.Companion|
|
||||
|
||||
}
|
||||
|
||||
public final class $serializer<T, V> : R|kotlinx/serialization/internal/GeneratedSerializer<GenericBox<T, V>>| {
|
||||
public final fun serialize(encoder: R|kotlinx/serialization/encoding/Encoder|, value: R|GenericBox<T, V>|): R|kotlin/Unit|
|
||||
|
||||
public final fun deserialize(decoder: R|kotlinx/serialization/encoding/Decoder|): R|GenericBox<T, V>|
|
||||
|
||||
public final val descriptor: R|kotlinx/serialization/descriptors/SerialDescriptor|
|
||||
public get(): R|kotlinx/serialization/descriptors/SerialDescriptor|
|
||||
|
||||
public final fun childSerializers(): R|kotlin/Array<kotlinx/serialization/KSerializer<*>>|
|
||||
|
||||
public final fun typeParametersSerializers(): R|kotlin/Array<kotlinx/serialization/KSerializer<*>>|
|
||||
|
||||
private constructor(): R|GenericBox.$serializer<T, V>|
|
||||
|
||||
private constructor(typeSerial0: R|kotlinx/serialization/KSerializer<T>|, typeSerial1: R|kotlinx/serialization/KSerializer<V>|): R|GenericBox.$serializer<T, V>|
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
public final fun box(): R|kotlin/String| {
|
||||
lval box: R|GenericBox<kotlin/String, kotlin/Boolean>| = R|/GenericBox.GenericBox|<R|kotlin/String|, R|kotlin/Boolean|>(Int(42), String(foo), R|kotlin/collections/listOf|<R|kotlin/Boolean|>(vararg(Boolean(true), Boolean(false))))
|
||||
lval serial: R|kotlinx/serialization/KSerializer<GenericBox<kotlin/String, kotlin/Boolean>>| = Q|GenericBox|.R|/GenericBox.Companion.serializer|<R|kotlin/String|, R|kotlin/Boolean|>(Q|kotlin/String|.R|kotlinx/serialization/builtins/serializer|(), Q|kotlin/Boolean|.R|kotlinx/serialization/builtins/serializer|())
|
||||
lval target: R|kotlin/String| = String({"i":42,"t":"foo","vs":[true,false]})
|
||||
lval s: R|kotlin/String| = Q|kotlinx/serialization/json/Json|.R|kotlinx/serialization/json/Json.encodeToString|<R|GenericBox<kotlin/String, kotlin/Boolean>|>(R|<local>/serial|, R|<local>/box|)
|
||||
when () {
|
||||
!=(R|<local>/target|, R|<local>/s|) -> {
|
||||
^box <strcat>(String(Incorrect serialization: ), R|<local>/s|)
|
||||
}
|
||||
}
|
||||
|
||||
lval decoded: R|GenericBox<kotlin/String, kotlin/Boolean>| = Q|kotlinx/serialization/json/Json|.R|kotlinx/serialization/json/Json.decodeFromString|<R|GenericBox<kotlin/String, kotlin/Boolean>|>(R|<local>/serial|, R|<local>/s|)
|
||||
when () {
|
||||
!=(R|<local>/box|.R|SubstitutionOverride</GenericBox.t: R|kotlin/String|>|, R|<local>/decoded|.R|SubstitutionOverride</GenericBox.t: R|kotlin/String|>|) || !=(R|<local>/box|.R|SubstitutionOverride</GenericBox.vs: R|kotlin/collections/List<kotlin/Boolean>|>|, R|<local>/decoded|.R|SubstitutionOverride</GenericBox.vs: R|kotlin/collections/List<kotlin/Boolean>|>|) -> {
|
||||
^box String(Incorrect deserialization)
|
||||
}
|
||||
}
|
||||
|
||||
^box String(OK)
|
||||
}
|
||||
+23
@@ -0,0 +1,23 @@
|
||||
// WITH_STDLIB
|
||||
|
||||
import kotlinx.serialization.*
|
||||
import kotlinx.serialization.json.*
|
||||
import kotlinx.serialization.builtins.*
|
||||
|
||||
@Serializable
|
||||
class GenericBox<T, V>(
|
||||
val i: Int,
|
||||
val t: T,
|
||||
val vs: List<V>
|
||||
)
|
||||
|
||||
fun box(): String {
|
||||
val box = GenericBox(42, "foo", listOf(true, false))
|
||||
val serial = GenericBox.serializer(String.serializer(), Boolean.serializer())
|
||||
val target = """{"i":42,"t":"foo","vs":[true,false]}"""
|
||||
val s = Json.encodeToString(serial, box)
|
||||
if (target != s) return "Incorrect serialization: $s"
|
||||
val decoded = Json.decodeFromString(serial, s)
|
||||
if (box.t != decoded.t || box.vs != decoded.vs) return "Incorrect deserialization"
|
||||
return "OK"
|
||||
}
|
||||
@@ -0,0 +1,94 @@
|
||||
FILE: defaultProperties.kt
|
||||
@R|kotlinx/serialization/Serializable|() public final data class SomeClass : R|kotlin/Any| {
|
||||
public constructor(ctor: R|kotlin/Int| = Int(42), ctorDependent: R|kotlin/Int| = R|<local>/ctor|.R|kotlin/Int.plus|(Int(1))): R|SomeClass| {
|
||||
super<R|kotlin/Any|>()
|
||||
}
|
||||
|
||||
public final val ctor: R|kotlin/Int| = R|<local>/ctor|
|
||||
public get(): R|kotlin/Int|
|
||||
|
||||
public final val ctorDependent: R|kotlin/Int| = R|<local>/ctorDependent|
|
||||
public get(): R|kotlin/Int|
|
||||
|
||||
public final var body: R|kotlin/String| = String()
|
||||
public get(): R|kotlin/String|
|
||||
public set(value: R|kotlin/String|): R|kotlin/Unit|
|
||||
|
||||
public final var bodyDependent: R|kotlin/Int| = this@R|/SomeClass|.R|/SomeClass.ctor|.R|kotlin/Int.plus|(Int(2))
|
||||
public get(): R|kotlin/Int|
|
||||
public set(value: R|kotlin/Int|): R|kotlin/Unit|
|
||||
|
||||
public final operator fun component1(): R|kotlin/Int|
|
||||
|
||||
public final operator fun component2(): R|kotlin/Int|
|
||||
|
||||
public final fun copy(ctor: R|kotlin/Int| = this@R|/SomeClass|.R|/SomeClass.ctor|, ctorDependent: R|kotlin/Int| = this@R|/SomeClass|.R|/SomeClass.ctorDependent|): R|SomeClass|
|
||||
|
||||
public final companion object Companion : R|kotlin/Any| {
|
||||
public final fun serializer(): R|kotlinx/serialization/KSerializer<SomeClass>|
|
||||
|
||||
private constructor(): R|SomeClass.Companion|
|
||||
|
||||
}
|
||||
|
||||
public final object $serializer : R|kotlinx/serialization/internal/GeneratedSerializer<SomeClass>| {
|
||||
public final fun serialize(encoder: R|kotlinx/serialization/encoding/Encoder|, value: R|SomeClass|): R|kotlin/Unit|
|
||||
|
||||
public final fun deserialize(decoder: R|kotlinx/serialization/encoding/Decoder|): R|SomeClass|
|
||||
|
||||
public final val descriptor: R|kotlinx/serialization/descriptors/SerialDescriptor|
|
||||
public get(): R|kotlinx/serialization/descriptors/SerialDescriptor|
|
||||
|
||||
public final fun childSerializers(): R|kotlin/Array<kotlinx/serialization/KSerializer<*>>|
|
||||
|
||||
private constructor(): R|SomeClass.$serializer|
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
public final fun test(targetString: R|kotlin/String|): R|kotlin/String| {
|
||||
lval json: R|kotlinx/serialization/json/Json| = R|kotlinx/serialization/json/Json|(<L> = Json@fun R|kotlinx/serialization/json/JsonBuilder|.<anonymous>(): R|kotlin/Unit| <inline=NoInline> {
|
||||
this@R|special/anonymous|.R|kotlinx/serialization/json/JsonBuilder.encodeDefaults| = Boolean(true)
|
||||
}
|
||||
)
|
||||
lval c: R|SomeClass| = R|/SomeClass.SomeClass|(Int(1)).R|kotlin/apply|<R|SomeClass|>(<L> = apply@fun R|SomeClass|.<anonymous>(): R|kotlin/Unit| <inline=Inline, kind=EXACTLY_ONCE> {
|
||||
this@R|special/anonymous|.R|/SomeClass.body| = String(x)
|
||||
}
|
||||
)
|
||||
lval s: R|kotlin/String| = R|<local>/json|.R|kotlinx/serialization/json/Json.encodeToString|<R|SomeClass|>(Q|SomeClass|.R|/SomeClass.Companion.serializer|(), R|<local>/c|)
|
||||
when () {
|
||||
!=(R|<local>/s|, R|<local>/targetString|) -> {
|
||||
^test R|<local>/s|
|
||||
}
|
||||
}
|
||||
|
||||
lval i2: R|SomeClass| = R|<local>/json|.R|kotlinx/serialization/json/Json.decodeFromString|<R|SomeClass|>(Q|SomeClass|.R|/SomeClass.Companion.serializer|(), String({}))
|
||||
when () {
|
||||
!=(R|<local>/i2|.R|/SomeClass.ctor|, Int(42)) -> {
|
||||
^test String(Incorrect default ctor)
|
||||
}
|
||||
}
|
||||
|
||||
when () {
|
||||
!=(R|<local>/i2|.R|/SomeClass.ctorDependent|, Int(43)) -> {
|
||||
^test String(Incorrect default ctorDependent)
|
||||
}
|
||||
}
|
||||
|
||||
when () {
|
||||
!=(R|<local>/i2|.R|/SomeClass.body|, String()) -> {
|
||||
^test String(Incorrect default body)
|
||||
}
|
||||
}
|
||||
|
||||
when () {
|
||||
!=(R|<local>/i2|.R|/SomeClass.bodyDependent|, Int(44)) -> {
|
||||
^test String(Incorrect default bodyDependent)
|
||||
}
|
||||
}
|
||||
|
||||
^test String(OK)
|
||||
}
|
||||
public final fun box(): R|kotlin/String| {
|
||||
^box R|/test|(String({"ctor":1,"ctorDependent":2,"body":"x","bodyDependent":3}))
|
||||
}
|
||||
@@ -0,0 +1,28 @@
|
||||
// WITH_STDLIB
|
||||
|
||||
import kotlinx.serialization.*
|
||||
import kotlinx.serialization.json.*
|
||||
|
||||
@Serializable
|
||||
data class SomeClass(val ctor: Int = 42, val ctorDependent: Int = ctor + 1) {
|
||||
var body: String = ""
|
||||
|
||||
var bodyDependent = ctor + 2
|
||||
}
|
||||
|
||||
fun test(targetString: String): String {
|
||||
val json = Json { encodeDefaults = true }
|
||||
val c = SomeClass(1).apply { body = "x" }
|
||||
val s = json.encodeToString(SomeClass.serializer(), c)
|
||||
if (s != targetString) return s
|
||||
val i2 = json.decodeFromString(SomeClass.serializer(), "{}")
|
||||
if (i2.ctor != 42) return "Incorrect default ctor"
|
||||
if (i2.ctorDependent != 43) return "Incorrect default ctorDependent"
|
||||
if (i2.body != "") return "Incorrect default body"
|
||||
if (i2.bodyDependent != 44) return "Incorrect default bodyDependent"
|
||||
return "OK"
|
||||
}
|
||||
|
||||
fun box(): String {
|
||||
return test("""{"ctor":1,"ctorDependent":2,"body":"x","bodyDependent":3}""")
|
||||
}
|
||||
@@ -0,0 +1,132 @@
|
||||
FILE: enums.kt
|
||||
public final enum class Plain : R|kotlin/Enum<Plain>| {
|
||||
private constructor(): R|Plain| {
|
||||
super<R|kotlin/Enum<Plain>|>()
|
||||
}
|
||||
|
||||
public final static enum entry A: R|Plain|
|
||||
public final static enum entry B: R|Plain|
|
||||
public final static fun values(): R|kotlin/Array<Plain>| {
|
||||
}
|
||||
|
||||
public final static fun valueOf(value: R|kotlin/String|): R|Plain| {
|
||||
}
|
||||
|
||||
public final static val entries: R|kotlin/enums/EnumEntries<Plain>|
|
||||
public get(): R|kotlin/enums/EnumEntries<Plain>|
|
||||
|
||||
}
|
||||
@R|kotlinx/serialization/Serializable|() public final enum class WithNames : R|kotlin/Enum<WithNames>| {
|
||||
private constructor(): R|WithNames| {
|
||||
super<R|kotlin/Enum<WithNames>|>()
|
||||
}
|
||||
|
||||
@R|kotlinx/serialization/SerialName|(value = String(A)) public final static enum entry ENTRY1: R|WithNames| = object : R|WithNames| {
|
||||
private constructor(): R|<anonymous>| {
|
||||
super<R|WithNames|>()
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@R|kotlinx/serialization/SerialName|(value = String(B)) public final static enum entry ENTRY2: R|WithNames| = object : R|WithNames| {
|
||||
private constructor(): R|<anonymous>| {
|
||||
super<R|WithNames|>()
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public final static fun values(): R|kotlin/Array<WithNames>| {
|
||||
}
|
||||
|
||||
public final static fun valueOf(value: R|kotlin/String|): R|WithNames| {
|
||||
}
|
||||
|
||||
public final static val entries: R|kotlin/enums/EnumEntries<WithNames>|
|
||||
public get(): R|kotlin/enums/EnumEntries<WithNames>|
|
||||
|
||||
public final companion object Companion : R|kotlin/Any| {
|
||||
public final fun serializer(): R|kotlinx/serialization/KSerializer<WithNames>|
|
||||
|
||||
private constructor(): R|WithNames.Companion|
|
||||
|
||||
}
|
||||
|
||||
public final object $serializer : R|kotlinx/serialization/internal/GeneratedSerializer<WithNames>| {
|
||||
public final fun serialize(encoder: R|kotlinx/serialization/encoding/Encoder|, value: R|WithNames|): R|kotlin/Unit|
|
||||
|
||||
public final fun deserialize(decoder: R|kotlinx/serialization/encoding/Decoder|): R|WithNames|
|
||||
|
||||
public final val descriptor: R|kotlinx/serialization/descriptors/SerialDescriptor|
|
||||
public get(): R|kotlinx/serialization/descriptors/SerialDescriptor|
|
||||
|
||||
public final fun childSerializers(): R|kotlin/Array<kotlinx/serialization/KSerializer<*>>|
|
||||
|
||||
private constructor(): R|WithNames.$serializer|
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@R|kotlinx/serialization/Serializable|() public final class Holder : R|kotlin/Any| {
|
||||
public constructor(p: R|Plain|, w: R|WithNames|): R|Holder| {
|
||||
super<R|kotlin/Any|>()
|
||||
}
|
||||
|
||||
public final val p: R|Plain| = R|<local>/p|
|
||||
public get(): R|Plain|
|
||||
|
||||
public final val w: R|WithNames| = R|<local>/w|
|
||||
public get(): R|WithNames|
|
||||
|
||||
public final companion object Companion : R|kotlin/Any| {
|
||||
public final fun serializer(): R|kotlinx/serialization/KSerializer<Holder>|
|
||||
|
||||
private constructor(): R|Holder.Companion|
|
||||
|
||||
}
|
||||
|
||||
public final object $serializer : R|kotlinx/serialization/internal/GeneratedSerializer<Holder>| {
|
||||
public final fun serialize(encoder: R|kotlinx/serialization/encoding/Encoder|, value: R|Holder|): R|kotlin/Unit|
|
||||
|
||||
public final fun deserialize(decoder: R|kotlinx/serialization/encoding/Decoder|): R|Holder|
|
||||
|
||||
public final val descriptor: R|kotlinx/serialization/descriptors/SerialDescriptor|
|
||||
public get(): R|kotlinx/serialization/descriptors/SerialDescriptor|
|
||||
|
||||
public final fun childSerializers(): R|kotlin/Array<kotlinx/serialization/KSerializer<*>>|
|
||||
|
||||
private constructor(): R|Holder.$serializer|
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@R|kotlin/OptIn|(markerClass = vararg(<getClass>(Q|kotlinx/serialization/InternalSerializationApi|))) public final fun testSerializers(): R|kotlin/String| {
|
||||
lval cs: R|kotlin/Array<kotlinx/serialization/KSerializer<*>>| = (Q|Holder|.R|/Holder.Companion.serializer|() as R|kotlinx/serialization/internal/GeneratedSerializer<*>|).R|SubstitutionOverride<kotlinx/serialization/internal/GeneratedSerializer.childSerializers: R|kotlin/Array<kotlinx/serialization/KSerializer<*>>|>|()
|
||||
lval str1: R|kotlin/String| = R|<local>/cs|.R|SubstitutionOverride<kotlin/Array.get: R|kotlinx/serialization/KSerializer<*>|>|(Int(0)).R|kotlin/Any.toString|()
|
||||
when () {
|
||||
R|<local>/str1|.R|kotlin/text/contains|(String(kotlinx.serialization.internal.EnumSerializer)).R|kotlin/Boolean.not|() -> {
|
||||
^testSerializers R|<local>/str1|
|
||||
}
|
||||
}
|
||||
|
||||
^testSerializers String(OK)
|
||||
}
|
||||
public final fun testSerialization(previous: R|kotlin/String|): R|kotlin/String| {
|
||||
when () {
|
||||
!=(R|<local>/previous|, String(OK)) -> {
|
||||
^testSerialization R|<local>/previous|
|
||||
}
|
||||
}
|
||||
|
||||
lval h: R|Holder| = R|/Holder.Holder|(Q|Plain|.R|/Plain.B|, Q|WithNames|.R|/WithNames.ENTRY1|)
|
||||
lval s: R|kotlin/String| = Q|kotlinx/serialization/json/Json|.R|kotlinx/serialization/json/Json.encodeToString|<R|Holder|>(Q|Holder|.R|/Holder.Companion.serializer|(), R|<local>/h|)
|
||||
when () {
|
||||
!=(R|<local>/s|, String({"p":"B","w":"A"})) -> {
|
||||
^testSerialization R|<local>/s|
|
||||
}
|
||||
}
|
||||
|
||||
^testSerialization String(OK)
|
||||
}
|
||||
public final fun box(): R|kotlin/String| {
|
||||
^box R|/testSerialization|(R|/testSerializers|())
|
||||
}
|
||||
@@ -0,0 +1,45 @@
|
||||
|
||||
// WITH_STDLIB
|
||||
|
||||
import kotlinx.serialization.*
|
||||
import kotlinx.serialization.json.*
|
||||
import kotlinx.serialization.internal.*
|
||||
|
||||
enum class Plain {
|
||||
A, B
|
||||
}
|
||||
|
||||
@Serializable enum class WithNames {
|
||||
@SerialName("A") ENTRY1,
|
||||
@SerialName("B") ENTRY2
|
||||
}
|
||||
|
||||
@Serializable
|
||||
class Holder(val p: Plain, val w: WithNames)
|
||||
|
||||
@OptIn(InternalSerializationApi::class)
|
||||
fun testSerializers(): String {
|
||||
val cs = (Holder.serializer() as GeneratedSerializer<*>).childSerializers()
|
||||
val str1 = cs[0].toString()
|
||||
if (!str1.contains("kotlinx.serialization.internal.EnumSerializer")) return str1
|
||||
|
||||
/**
|
||||
* Serialization 1.4.1+ have runtime factories to create EnumSerializer instead of synthetic $serializer, saving bytecode
|
||||
* and bringing consistency. After updating the version, uncomment this block.
|
||||
*/
|
||||
// val str2 = cs[1].toString()
|
||||
// if (!str2.contains("kotlinx.serialization.internal.EnumSerializer")) return str2
|
||||
return "OK"
|
||||
}
|
||||
|
||||
fun testSerialization(previous: String): String {
|
||||
if (previous != "OK") return previous
|
||||
val h = Holder(Plain.B, WithNames.ENTRY1)
|
||||
val s = Json.encodeToString(Holder.serializer(), h)
|
||||
if (s != """{"p":"B","w":"A"}""") return s
|
||||
return "OK"
|
||||
}
|
||||
|
||||
fun box(): String {
|
||||
return testSerialization(testSerializers())
|
||||
}
|
||||
@@ -0,0 +1,77 @@
|
||||
FILE: inlineClasses.kt
|
||||
@R|kotlinx/serialization/Serializable|() @R|kotlin/jvm/JvmInline|() public final inline class Foo : R|kotlin/Any| {
|
||||
public constructor(i: R|kotlin/Int|): R|Foo| {
|
||||
super<R|kotlin/Any|>()
|
||||
}
|
||||
|
||||
public final val i: R|kotlin/Int| = R|<local>/i|
|
||||
public get(): R|kotlin/Int|
|
||||
|
||||
public final companion object Companion : R|kotlin/Any| {
|
||||
public final fun serializer(): R|kotlinx/serialization/KSerializer<Foo>|
|
||||
|
||||
private constructor(): R|Foo.Companion|
|
||||
|
||||
}
|
||||
|
||||
public final object $serializer : R|kotlinx/serialization/internal/GeneratedSerializer<Foo>| {
|
||||
public final fun serialize(encoder: R|kotlinx/serialization/encoding/Encoder|, value: R|Foo|): R|kotlin/Unit|
|
||||
|
||||
public final fun deserialize(decoder: R|kotlinx/serialization/encoding/Decoder|): R|Foo|
|
||||
|
||||
public final val descriptor: R|kotlinx/serialization/descriptors/SerialDescriptor|
|
||||
public get(): R|kotlinx/serialization/descriptors/SerialDescriptor|
|
||||
|
||||
public final fun childSerializers(): R|kotlin/Array<kotlinx/serialization/KSerializer<*>>|
|
||||
|
||||
private constructor(): R|Foo.$serializer|
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@R|kotlinx/serialization/Serializable|() public final class Holder : R|kotlin/Any| {
|
||||
public constructor(f: R|Foo|): R|Holder| {
|
||||
super<R|kotlin/Any|>()
|
||||
}
|
||||
|
||||
public final val f: R|Foo| = R|<local>/f|
|
||||
public get(): R|Foo|
|
||||
|
||||
public final companion object Companion : R|kotlin/Any| {
|
||||
public final fun serializer(): R|kotlinx/serialization/KSerializer<Holder>|
|
||||
|
||||
private constructor(): R|Holder.Companion|
|
||||
|
||||
}
|
||||
|
||||
public final object $serializer : R|kotlinx/serialization/internal/GeneratedSerializer<Holder>| {
|
||||
public final fun serialize(encoder: R|kotlinx/serialization/encoding/Encoder|, value: R|Holder|): R|kotlin/Unit|
|
||||
|
||||
public final fun deserialize(decoder: R|kotlinx/serialization/encoding/Decoder|): R|Holder|
|
||||
|
||||
public final val descriptor: R|kotlinx/serialization/descriptors/SerialDescriptor|
|
||||
public get(): R|kotlinx/serialization/descriptors/SerialDescriptor|
|
||||
|
||||
public final fun childSerializers(): R|kotlin/Array<kotlinx/serialization/KSerializer<*>>|
|
||||
|
||||
private constructor(): R|Holder.$serializer|
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
public final fun box(): R|kotlin/String| {
|
||||
when () {
|
||||
Q|Foo|.R|/Foo.Companion.serializer|().R|SubstitutionOverride<kotlinx/serialization/KSerializer.descriptor: R|kotlinx/serialization/descriptors/SerialDescriptor|>|.R|kotlinx/serialization/descriptors/SerialDescriptor.isInline|.R|kotlin/Boolean.not|() -> {
|
||||
^box String(Incorrect descriptor)
|
||||
}
|
||||
}
|
||||
|
||||
lval s: R|kotlin/String| = Q|kotlinx/serialization/json/Json|.R|kotlinx/serialization/json/Json.encodeToString|<R|Holder|>(Q|Holder|.R|/Holder.Companion.serializer|(), R|/Holder.Holder|(R|/Foo.Foo|(Int(42))))
|
||||
when () {
|
||||
!=(R|<local>/s|, String({"f":42})) -> {
|
||||
^box R|<local>/s|
|
||||
}
|
||||
}
|
||||
|
||||
^box String(OK)
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
// WITH_STDLIB
|
||||
|
||||
import kotlinx.serialization.*
|
||||
import kotlinx.serialization.json.*
|
||||
import kotlinx.serialization.internal.*
|
||||
|
||||
@Serializable
|
||||
@JvmInline
|
||||
value class Foo(val i: Int)
|
||||
|
||||
@Serializable
|
||||
class Holder(val f: Foo)
|
||||
|
||||
fun box(): String {
|
||||
if(!Foo.serializer().descriptor.isInline) return "Incorrect descriptor"
|
||||
val s = Json.encodeToString(Holder.serializer(), Holder(Foo(42)))
|
||||
if (s != """{"f":42}""") return s
|
||||
return "OK"
|
||||
}
|
||||
@@ -0,0 +1,70 @@
|
||||
FILE: multipleProperties.kt
|
||||
@R|kotlinx/serialization/Serializable|() public final class SomeClass : R|kotlin/Any| {
|
||||
public constructor(ctor: R|kotlin/Int|): R|SomeClass| {
|
||||
super<R|kotlin/Any|>()
|
||||
}
|
||||
|
||||
public final val ctor: R|kotlin/Int| = R|<local>/ctor|
|
||||
public get(): R|kotlin/Int|
|
||||
|
||||
public final var body: R|kotlin/String| = String()
|
||||
public get(): R|kotlin/String|
|
||||
public set(value: R|kotlin/String|): R|kotlin/Unit|
|
||||
|
||||
public final val getter: R|kotlin/Int|
|
||||
public get(): R|kotlin/Int| {
|
||||
^ Int(42)
|
||||
}
|
||||
|
||||
public final companion object Companion : R|kotlin/Any| {
|
||||
public final fun serializer(): R|kotlinx/serialization/KSerializer<SomeClass>|
|
||||
|
||||
private constructor(): R|SomeClass.Companion|
|
||||
|
||||
}
|
||||
|
||||
public final object $serializer : R|kotlinx/serialization/internal/GeneratedSerializer<SomeClass>| {
|
||||
public final fun serialize(encoder: R|kotlinx/serialization/encoding/Encoder|, value: R|SomeClass|): R|kotlin/Unit|
|
||||
|
||||
public final fun deserialize(decoder: R|kotlinx/serialization/encoding/Decoder|): R|SomeClass|
|
||||
|
||||
public final val descriptor: R|kotlinx/serialization/descriptors/SerialDescriptor|
|
||||
public get(): R|kotlinx/serialization/descriptors/SerialDescriptor|
|
||||
|
||||
public final fun childSerializers(): R|kotlin/Array<kotlinx/serialization/KSerializer<*>>|
|
||||
|
||||
private constructor(): R|SomeClass.$serializer|
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
public final fun test(targetString: R|kotlin/String|): R|kotlin/String| {
|
||||
lval c: R|SomeClass| = R|/SomeClass.SomeClass|(Int(1)).R|kotlin/apply|<R|SomeClass|>(<L> = apply@fun R|SomeClass|.<anonymous>(): R|kotlin/Unit| <inline=Inline, kind=EXACTLY_ONCE> {
|
||||
this@R|special/anonymous|.R|/SomeClass.body| = String(x)
|
||||
}
|
||||
)
|
||||
lval s: R|kotlin/String| = Q|kotlinx/serialization/json/Json|.R|kotlinx/serialization/json/Json.encodeToString|<R|SomeClass|>(Q|SomeClass|.R|/SomeClass.Companion.serializer|(), R|<local>/c|)
|
||||
when () {
|
||||
!=(R|<local>/s|, R|<local>/targetString|) -> {
|
||||
^test R|<local>/s|
|
||||
}
|
||||
}
|
||||
|
||||
lval i: R|SomeClass| = Q|kotlinx/serialization/json/Json|.R|kotlinx/serialization/json/Json.decodeFromString|<R|SomeClass|>(Q|SomeClass|.R|/SomeClass.Companion.serializer|(), R|<local>/s|)
|
||||
when () {
|
||||
!=(R|<local>/i|.R|/SomeClass.ctor|, R|<local>/c|.R|/SomeClass.ctor|) -> {
|
||||
^test String(Incorrect ctor)
|
||||
}
|
||||
}
|
||||
|
||||
when () {
|
||||
!=(R|<local>/i|.R|/SomeClass.body|, R|<local>/c|.R|/SomeClass.body|) -> {
|
||||
^test String(Incorrect body)
|
||||
}
|
||||
}
|
||||
|
||||
^test String(OK)
|
||||
}
|
||||
public final fun box(): R|kotlin/String| {
|
||||
^box R|/test|(String({"ctor":1,"body":"x"}))
|
||||
}
|
||||
@@ -0,0 +1,26 @@
|
||||
// WITH_STDLIB
|
||||
|
||||
import kotlinx.serialization.*
|
||||
import kotlinx.serialization.json.*
|
||||
|
||||
@Serializable
|
||||
class SomeClass(val ctor: Int) {
|
||||
var body: String = ""
|
||||
|
||||
// Not serializable: no backing field
|
||||
val getter: Int get() = 42
|
||||
}
|
||||
|
||||
fun test(targetString: String): String {
|
||||
val c = SomeClass(1).apply { body = "x" }
|
||||
val s = Json.encodeToString(SomeClass.serializer(), c)
|
||||
if (s != targetString) return s
|
||||
val i = Json.decodeFromString(SomeClass.serializer(), s)
|
||||
if (i.ctor != c.ctor) return "Incorrect ctor"
|
||||
if (i.body != c.body) return "Incorrect body"
|
||||
return "OK"
|
||||
}
|
||||
|
||||
fun box(): String {
|
||||
return test("""{"ctor":1,"body":"x"}""")
|
||||
}
|
||||
+98
@@ -0,0 +1,98 @@
|
||||
FILE: privatePropertiesSerialization.kt
|
||||
@R|kotlinx/serialization/Serializable|() public open class Parent : R|kotlin/Any| {
|
||||
public constructor(ctor: R|kotlin/Int|): R|Parent| {
|
||||
super<R|kotlin/Any|>()
|
||||
}
|
||||
|
||||
private final val ctor: R|kotlin/Int| = R|<local>/ctor|
|
||||
private get(): R|kotlin/Int|
|
||||
|
||||
private final var body: R|kotlin/String| = String(42)
|
||||
private get(): R|kotlin/String|
|
||||
private set(value: R|kotlin/String|): R|kotlin/Unit|
|
||||
|
||||
public final fun checkDeser(c: R|kotlin/Int|, b: R|kotlin/String|): R|kotlin/String| {
|
||||
when () {
|
||||
!=(this@R|/Parent|.R|/Parent.ctor|, R|<local>/c|) -> {
|
||||
^checkDeser <strcat>(String(Ctor : ), this@R|/Parent|.R|/Parent.ctor|)
|
||||
}
|
||||
}
|
||||
|
||||
when () {
|
||||
!=(this@R|/Parent|.R|/Parent.body|, R|<local>/b|) -> {
|
||||
^checkDeser <strcat>(String(Body : ), this@R|/Parent|.R|/Parent.body|)
|
||||
}
|
||||
}
|
||||
|
||||
^checkDeser String(OK)
|
||||
}
|
||||
|
||||
public final companion object Companion : R|kotlin/Any| {
|
||||
public final fun serializer(): R|kotlinx/serialization/KSerializer<Parent>|
|
||||
|
||||
private constructor(): R|Parent.Companion|
|
||||
|
||||
}
|
||||
|
||||
public final object $serializer : R|kotlinx/serialization/internal/GeneratedSerializer<Parent>| {
|
||||
public final fun serialize(encoder: R|kotlinx/serialization/encoding/Encoder|, value: R|Parent|): R|kotlin/Unit|
|
||||
|
||||
public final fun deserialize(decoder: R|kotlinx/serialization/encoding/Decoder|): R|Parent|
|
||||
|
||||
public final val descriptor: R|kotlinx/serialization/descriptors/SerialDescriptor|
|
||||
public get(): R|kotlinx/serialization/descriptors/SerialDescriptor|
|
||||
|
||||
public final fun childSerializers(): R|kotlin/Array<kotlinx/serialization/KSerializer<*>>|
|
||||
|
||||
private constructor(): R|Parent.$serializer|
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@R|kotlinx/serialization/Serializable|() public final class Derived : R|Parent| {
|
||||
public constructor(): R|Derived| {
|
||||
super<R|Parent|>(Int(42))
|
||||
}
|
||||
|
||||
public final companion object Companion : R|kotlin/Any| {
|
||||
public final fun serializer(): R|kotlinx/serialization/KSerializer<Derived>|
|
||||
|
||||
private constructor(): R|Derived.Companion|
|
||||
|
||||
}
|
||||
|
||||
public final object $serializer : R|kotlinx/serialization/internal/GeneratedSerializer<Derived>| {
|
||||
public final fun serialize(encoder: R|kotlinx/serialization/encoding/Encoder|, value: R|Derived|): R|kotlin/Unit|
|
||||
|
||||
public final fun deserialize(decoder: R|kotlinx/serialization/encoding/Decoder|): R|Derived|
|
||||
|
||||
public final val descriptor: R|kotlinx/serialization/descriptors/SerialDescriptor|
|
||||
public get(): R|kotlinx/serialization/descriptors/SerialDescriptor|
|
||||
|
||||
public final fun childSerializers(): R|kotlin/Array<kotlinx/serialization/KSerializer<*>>|
|
||||
|
||||
private constructor(): R|Derived.$serializer|
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
public final fun test(targetString: R|kotlin/String|): R|kotlin/String| {
|
||||
lval c: R|Derived| = R|/Derived.Derived|()
|
||||
lval j: R|kotlinx/serialization/json/Json| = R|kotlinx/serialization/json/Json|(<L> = Json@fun R|kotlinx/serialization/json/JsonBuilder|.<anonymous>(): R|kotlin/Unit| <inline=NoInline> {
|
||||
this@R|special/anonymous|.R|kotlinx/serialization/json/JsonBuilder.encodeDefaults| = Boolean(true)
|
||||
}
|
||||
)
|
||||
lval s: R|kotlin/String| = R|<local>/j|.R|kotlinx/serialization/json/Json.encodeToString|<R|Derived|>(Q|Derived|.R|/Derived.Companion.serializer|(), R|<local>/c|)
|
||||
when () {
|
||||
!=(R|<local>/s|, R|<local>/targetString|) -> {
|
||||
^test R|<local>/s|
|
||||
}
|
||||
}
|
||||
|
||||
lval d: R|Derived| = R|<local>/j|.R|kotlinx/serialization/json/Json.decodeFromString|<R|Derived|>(Q|Derived|.R|/Derived.Companion.serializer|(), String({"ctor":43,"body":"43"}))
|
||||
^test R|<local>/d|.R|/Parent.checkDeser|(Int(43), String(43))
|
||||
^test String(OK)
|
||||
}
|
||||
public final fun box(): R|kotlin/String| {
|
||||
^box R|/test|(String({"ctor":42,"body":"42"}))
|
||||
}
|
||||
+37
@@ -0,0 +1,37 @@
|
||||
// WITH_STDLIB
|
||||
|
||||
/**
|
||||
* write$Self and synthetic constructor are required for correct serialization and deserialization of private fields,
|
||||
* otherwise inaccessible from e.g. Derived.$serializer.serialize().
|
||||
* This test verifies that.
|
||||
*/
|
||||
import kotlinx.serialization.*
|
||||
import kotlinx.serialization.json.*
|
||||
|
||||
@Serializable
|
||||
open class Parent(private val ctor: Int) {
|
||||
private var body: String = "42"
|
||||
|
||||
fun checkDeser(c: Int, b: String): String {
|
||||
if (this.ctor != c) return "Ctor : ${this.ctor}"
|
||||
if (this.body != b) return "Body : ${this.body}"
|
||||
return "OK"
|
||||
}
|
||||
}
|
||||
|
||||
@Serializable
|
||||
class Derived: Parent(42)
|
||||
|
||||
fun test(targetString: String): String {
|
||||
val c = Derived()
|
||||
val j = Json { encodeDefaults = true }
|
||||
val s = j.encodeToString(Derived.serializer(), c)
|
||||
if (s != targetString) return s
|
||||
val d = j.decodeFromString(Derived.serializer(), """{"ctor":43,"body":"43"}""")
|
||||
return d.checkDeser(43, "43")
|
||||
return "OK"
|
||||
}
|
||||
|
||||
fun box(): String {
|
||||
return test("""{"ctor":42,"body":"42"}""")
|
||||
}
|
||||
@@ -0,0 +1,26 @@
|
||||
FILE: serializableObject.kt
|
||||
@R|kotlinx/serialization/Serializable|() public final object FooBar : R|kotlin/Any| {
|
||||
private constructor(): R|FooBar| {
|
||||
super<R|kotlin/Any|>()
|
||||
}
|
||||
|
||||
public final fun serializer(): R|kotlinx/serialization/KSerializer<FooBar>|
|
||||
|
||||
}
|
||||
public final fun box(): R|kotlin/String| {
|
||||
lval encoded: R|kotlin/String| = Q|kotlinx/serialization/json/Json|.R|kotlinx/serialization/json/Json.encodeToString|<R|FooBar|>(Q|FooBar|.R|/FooBar.serializer|(), Q|FooBar|)
|
||||
when () {
|
||||
!=(R|<local>/encoded|, String({})) -> {
|
||||
^box R|<local>/encoded|
|
||||
}
|
||||
}
|
||||
|
||||
lval decoded: R|FooBar| = Q|kotlinx/serialization/json/Json|.R|kotlinx/serialization/json/Json.decodeFromString|<R|FooBar|>(Q|FooBar|.R|/FooBar.serializer|(), R|<local>/encoded|)
|
||||
when () {
|
||||
!==(R|<local>/decoded|, Q|FooBar|) -> {
|
||||
^box String(Incorrect object instance)
|
||||
}
|
||||
}
|
||||
|
||||
^box String(OK)
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
// WITH_STDLIB
|
||||
|
||||
import kotlinx.serialization.*
|
||||
import kotlinx.serialization.json.*
|
||||
|
||||
@Serializable
|
||||
object FooBar
|
||||
|
||||
fun box(): String {
|
||||
val encoded = Json.encodeToString(FooBar.serializer(), FooBar)
|
||||
if (encoded != "{}") return encoded
|
||||
val decoded = Json.decodeFromString(FooBar.serializer(), encoded)
|
||||
if (decoded !== FooBar) return "Incorrect object instance"
|
||||
return "OK"
|
||||
}
|
||||
Reference in New Issue
Block a user