Added support of MetaSerializable to the FIR
This commit is contained in:
committed by
Space Team
parent
28340459b0
commit
503f4d924d
@@ -0,0 +1,468 @@
|
||||
FILE: metaSerializable.kt
|
||||
@R|kotlinx/serialization/MetaSerializable|() @R|kotlin/annotation/Target|(allowedTargets = vararg(Q|kotlin/annotation/AnnotationTarget|.R|kotlin/annotation/AnnotationTarget.CLASS|, Q|kotlin/annotation/AnnotationTarget|.R|kotlin/annotation/AnnotationTarget.PROPERTY|)) public final annotation class MySerializable : R|kotlin/Annotation| {
|
||||
public constructor(): R|MySerializable| {
|
||||
super<R|kotlin/Any|>()
|
||||
}
|
||||
|
||||
}
|
||||
@R|kotlinx/serialization/MetaSerializable|() @R|kotlin/annotation/Target|(allowedTargets = vararg(Q|kotlin/annotation/AnnotationTarget|.R|kotlin/annotation/AnnotationTarget.CLASS|, Q|kotlin/annotation/AnnotationTarget|.R|kotlin/annotation/AnnotationTarget.PROPERTY|)) public final annotation class MySerializableWithInfo : R|kotlin/Annotation| {
|
||||
public constructor(value: R|kotlin/Int|, kclass: R|kotlin/reflect/KClass<*>|): R|MySerializableWithInfo| {
|
||||
super<R|kotlin/Any|>()
|
||||
}
|
||||
|
||||
public final val value: R|kotlin/Int| = R|<local>/value|
|
||||
public get(): R|kotlin/Int|
|
||||
|
||||
public final val kclass: R|kotlin/reflect/KClass<*>| = R|<local>/kclass|
|
||||
public get(): R|kotlin/reflect/KClass<*>|
|
||||
|
||||
}
|
||||
@R|MySerializable|() public final class Project1 : R|kotlin/Any| {
|
||||
public constructor(name: R|kotlin/String|, language: R|kotlin/String|): R|Project1| {
|
||||
super<R|kotlin/Any|>()
|
||||
}
|
||||
|
||||
public final val name: R|kotlin/String| = R|<local>/name|
|
||||
public get(): R|kotlin/String|
|
||||
|
||||
public final val language: R|kotlin/String| = R|<local>/language|
|
||||
public get(): R|kotlin/String|
|
||||
|
||||
public final companion object Companion : R|kotlin/Any| {
|
||||
public final fun serializer(): R|kotlinx/serialization/KSerializer<Project1>|
|
||||
|
||||
private constructor(): R|Project1.Companion|
|
||||
|
||||
}
|
||||
|
||||
public final object $serializer : R|kotlinx/serialization/internal/GeneratedSerializer<Project1>| {
|
||||
public final fun serialize(encoder: R|kotlinx/serialization/encoding/Encoder|, value: R|Project1|): R|kotlin/Unit|
|
||||
|
||||
public final fun deserialize(decoder: R|kotlinx/serialization/encoding/Decoder|): R|Project1|
|
||||
|
||||
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|Project1.$serializer|
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@R|MySerializableWithInfo|(value = Int(123), kclass = <getClass>(Q|kotlin/String|)) public final class Project2 : R|kotlin/Any| {
|
||||
public constructor(name: R|kotlin/String|, language: R|kotlin/String|): R|Project2| {
|
||||
super<R|kotlin/Any|>()
|
||||
}
|
||||
|
||||
public final val name: R|kotlin/String| = R|<local>/name|
|
||||
public get(): R|kotlin/String|
|
||||
|
||||
public final val language: R|kotlin/String| = R|<local>/language|
|
||||
public get(): R|kotlin/String|
|
||||
|
||||
public final companion object Companion : R|kotlin/Any| {
|
||||
public final fun serializer(): R|kotlinx/serialization/KSerializer<Project2>|
|
||||
|
||||
private constructor(): R|Project2.Companion|
|
||||
|
||||
}
|
||||
|
||||
public final object $serializer : R|kotlinx/serialization/internal/GeneratedSerializer<Project2>| {
|
||||
public final fun serialize(encoder: R|kotlinx/serialization/encoding/Encoder|, value: R|Project2|): R|kotlin/Unit|
|
||||
|
||||
public final fun deserialize(decoder: R|kotlinx/serialization/encoding/Decoder|): R|Project2|
|
||||
|
||||
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|Project2.$serializer|
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@R|kotlinx/serialization/Serializable|() public final class Wrapper : R|kotlin/Any| {
|
||||
public constructor(@R|MySerializableWithInfo|(value = Int(234), kclass = <getClass>(Q|kotlin/Int|)) project: R|Project2|): R|Wrapper| {
|
||||
super<R|kotlin/Any|>()
|
||||
}
|
||||
|
||||
@R|MySerializableWithInfo|(value = Int(234), kclass = <getClass>(Q|kotlin/Int|)) public final val project: R|Project2| = R|<local>/project|
|
||||
public get(): R|Project2|
|
||||
|
||||
public final companion object Companion : R|kotlin/Any| {
|
||||
public final fun serializer(): R|kotlinx/serialization/KSerializer<Wrapper>|
|
||||
|
||||
private constructor(): R|Wrapper.Companion|
|
||||
|
||||
}
|
||||
|
||||
public final object $serializer : R|kotlinx/serialization/internal/GeneratedSerializer<Wrapper>| {
|
||||
public final fun serialize(encoder: R|kotlinx/serialization/encoding/Encoder|, value: R|Wrapper|): R|kotlin/Unit|
|
||||
|
||||
public final fun deserialize(decoder: R|kotlinx/serialization/encoding/Decoder|): R|Wrapper|
|
||||
|
||||
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|Wrapper.$serializer|
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@R|kotlinx/serialization/Serializable|() @R|MySerializableWithInfo|(value = Int(123), kclass = <getClass>(Q|kotlin/String|)) public final class Project3 : R|kotlin/Any| {
|
||||
public constructor(name: R|kotlin/String|, language: R|kotlin/String|): R|Project3| {
|
||||
super<R|kotlin/Any|>()
|
||||
}
|
||||
|
||||
public final val name: R|kotlin/String| = R|<local>/name|
|
||||
public get(): R|kotlin/String|
|
||||
|
||||
public final val language: R|kotlin/String| = R|<local>/language|
|
||||
public get(): R|kotlin/String|
|
||||
|
||||
public final companion object Companion : R|kotlin/Any| {
|
||||
public final fun serializer(): R|kotlinx/serialization/KSerializer<Project3>|
|
||||
|
||||
private constructor(): R|Project3.Companion|
|
||||
|
||||
}
|
||||
|
||||
public final object $serializer : R|kotlinx/serialization/internal/GeneratedSerializer<Project3>| {
|
||||
public final fun serialize(encoder: R|kotlinx/serialization/encoding/Encoder|, value: R|Project3|): R|kotlin/Unit|
|
||||
|
||||
public final fun deserialize(decoder: R|kotlinx/serialization/encoding/Decoder|): R|Project3|
|
||||
|
||||
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|Project3.$serializer|
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@R|kotlinx/serialization/Serializable|(with = <getClass>(Q|MySerializer|)) @R|MySerializableWithInfo|(value = Int(123), kclass = <getClass>(Q|kotlin/String|)) public final class Project4 : R|kotlin/Any| {
|
||||
public constructor(name: R|kotlin/String|, language: R|kotlin/String|): R|Project4| {
|
||||
super<R|kotlin/Any|>()
|
||||
}
|
||||
|
||||
public final val name: R|kotlin/String| = R|<local>/name|
|
||||
public get(): R|kotlin/String|
|
||||
|
||||
public final val language: R|kotlin/String| = R|<local>/language|
|
||||
public get(): R|kotlin/String|
|
||||
|
||||
public final companion object Companion : R|kotlin/Any| {
|
||||
public final fun serializer(): R|kotlinx/serialization/KSerializer<Project4>|
|
||||
|
||||
private constructor(): R|Project4.Companion|
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@R|MySerializableWithInfo|(value = Int(123), kclass = <getClass>(Q|kotlin/String|)) public sealed class TestSealed : R|kotlin/Any| {
|
||||
protected constructor(): R|TestSealed| {
|
||||
super<R|kotlin/Any|>()
|
||||
}
|
||||
|
||||
@R|MySerializableWithInfo|(value = Int(123), kclass = <getClass>(Q|kotlin/String|)) public final class A : R|TestSealed| {
|
||||
public constructor(value1: R|kotlin/String|): R|TestSealed.A| {
|
||||
super<R|TestSealed|>()
|
||||
}
|
||||
|
||||
public final val value1: R|kotlin/String| = R|<local>/value1|
|
||||
public get(): R|kotlin/String|
|
||||
|
||||
public final companion object Companion : R|kotlin/Any| {
|
||||
public final fun serializer(): R|kotlinx/serialization/KSerializer<TestSealed.A>|
|
||||
|
||||
private constructor(): R|TestSealed.A.Companion|
|
||||
|
||||
}
|
||||
|
||||
public final object $serializer : R|kotlinx/serialization/internal/GeneratedSerializer<TestSealed.A>| {
|
||||
public final fun serialize(encoder: R|kotlinx/serialization/encoding/Encoder|, value: R|TestSealed.A|): R|kotlin/Unit|
|
||||
|
||||
public final fun deserialize(decoder: R|kotlinx/serialization/encoding/Decoder|): R|TestSealed.A|
|
||||
|
||||
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|TestSealed.A.$serializer|
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@R|MySerializableWithInfo|(value = Int(123), kclass = <getClass>(Q|kotlin/String|)) public final class B : R|TestSealed| {
|
||||
public constructor(value2: R|kotlin/String|): R|TestSealed.B| {
|
||||
super<R|TestSealed|>()
|
||||
}
|
||||
|
||||
public final val value2: R|kotlin/String| = R|<local>/value2|
|
||||
public get(): R|kotlin/String|
|
||||
|
||||
public final companion object Companion : R|kotlin/Any| {
|
||||
public final fun serializer(): R|kotlinx/serialization/KSerializer<TestSealed.B>|
|
||||
|
||||
private constructor(): R|TestSealed.B.Companion|
|
||||
|
||||
}
|
||||
|
||||
public final object $serializer : R|kotlinx/serialization/internal/GeneratedSerializer<TestSealed.B>| {
|
||||
public final fun serialize(encoder: R|kotlinx/serialization/encoding/Encoder|, value: R|TestSealed.B|): R|kotlin/Unit|
|
||||
|
||||
public final fun deserialize(decoder: R|kotlinx/serialization/encoding/Decoder|): R|TestSealed.B|
|
||||
|
||||
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|TestSealed.B.$serializer|
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public final companion object Companion : R|kotlin/Any| {
|
||||
public final fun serializer(): R|kotlinx/serialization/KSerializer<TestSealed>|
|
||||
|
||||
private constructor(): R|TestSealed.Companion|
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@R|MySerializable|() public abstract class TestAbstract : R|kotlin/Any| {
|
||||
public constructor(): R|TestAbstract| {
|
||||
super<R|kotlin/Any|>()
|
||||
}
|
||||
|
||||
@R|MySerializableWithInfo|(value = Int(123), kclass = <getClass>(Q|kotlin/String|)) public final class A : R|TestSealed| {
|
||||
public constructor(value1: R|kotlin/String|): R|TestAbstract.A| {
|
||||
super<R|TestSealed|>()
|
||||
}
|
||||
|
||||
public final val value1: R|kotlin/String| = R|<local>/value1|
|
||||
public get(): R|kotlin/String|
|
||||
|
||||
public final companion object Companion : R|kotlin/Any| {
|
||||
public final fun serializer(): R|kotlinx/serialization/KSerializer<TestAbstract.A>|
|
||||
|
||||
private constructor(): R|TestAbstract.A.Companion|
|
||||
|
||||
}
|
||||
|
||||
public final object $serializer : R|kotlinx/serialization/internal/GeneratedSerializer<TestAbstract.A>| {
|
||||
public final fun serialize(encoder: R|kotlinx/serialization/encoding/Encoder|, value: R|TestAbstract.A|): R|kotlin/Unit|
|
||||
|
||||
public final fun deserialize(decoder: R|kotlinx/serialization/encoding/Decoder|): R|TestAbstract.A|
|
||||
|
||||
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|TestAbstract.A.$serializer|
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@R|MySerializableWithInfo|(value = Int(123), kclass = <getClass>(Q|kotlin/String|)) public final class B : R|TestSealed| {
|
||||
public constructor(value2: R|kotlin/String|): R|TestAbstract.B| {
|
||||
super<R|TestSealed|>()
|
||||
}
|
||||
|
||||
public final val value2: R|kotlin/String| = R|<local>/value2|
|
||||
public get(): R|kotlin/String|
|
||||
|
||||
public final companion object Companion : R|kotlin/Any| {
|
||||
public final fun serializer(): R|kotlinx/serialization/KSerializer<TestAbstract.B>|
|
||||
|
||||
private constructor(): R|TestAbstract.B.Companion|
|
||||
|
||||
}
|
||||
|
||||
public final object $serializer : R|kotlinx/serialization/internal/GeneratedSerializer<TestAbstract.B>| {
|
||||
public final fun serialize(encoder: R|kotlinx/serialization/encoding/Encoder|, value: R|TestAbstract.B|): R|kotlin/Unit|
|
||||
|
||||
public final fun deserialize(decoder: R|kotlinx/serialization/encoding/Decoder|): R|TestAbstract.B|
|
||||
|
||||
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|TestAbstract.B.$serializer|
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public final companion object Companion : R|kotlin/Any| {
|
||||
public final fun serializer(): R|kotlinx/serialization/KSerializer<TestAbstract>|
|
||||
|
||||
private constructor(): R|TestAbstract.Companion|
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@R|MySerializableWithInfo|(value = Int(123), kclass = <getClass>(Q|kotlin/String|)) public final enum class TestEnum : R|kotlin/Enum<TestEnum>| {
|
||||
private constructor(): R|TestEnum| {
|
||||
super<R|kotlin/Enum<TestEnum>|>()
|
||||
}
|
||||
|
||||
public final static enum entry Value1: R|TestEnum|
|
||||
public final static enum entry Value2: R|TestEnum|
|
||||
public final static fun values(): R|kotlin/Array<TestEnum>| {
|
||||
}
|
||||
|
||||
public final static fun valueOf(value: R|kotlin/String|): R|TestEnum| {
|
||||
}
|
||||
|
||||
public final static val entries: R|kotlin/enums/EnumEntries<TestEnum>|
|
||||
public get(): R|kotlin/enums/EnumEntries<TestEnum>|
|
||||
|
||||
public final companion object Companion : R|kotlin/Any| {
|
||||
public final fun serializer(): R|kotlinx/serialization/KSerializer<TestEnum>|
|
||||
|
||||
private constructor(): R|TestEnum.Companion|
|
||||
|
||||
}
|
||||
|
||||
public final object $serializer : R|kotlinx/serialization/internal/GeneratedSerializer<TestEnum>| {
|
||||
public final fun serialize(encoder: R|kotlinx/serialization/encoding/Encoder|, value: R|TestEnum|): R|kotlin/Unit|
|
||||
|
||||
public final fun deserialize(decoder: R|kotlinx/serialization/encoding/Decoder|): R|TestEnum|
|
||||
|
||||
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|TestEnum.$serializer|
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@R|MySerializableWithInfo|(value = Int(123), kclass = <getClass>(Q|kotlin/String|)) public final object TestObject : R|kotlin/Any| {
|
||||
private constructor(): R|TestObject| {
|
||||
super<R|kotlin/Any|>()
|
||||
}
|
||||
|
||||
public final fun serializer(): R|kotlinx/serialization/KSerializer<TestObject>|
|
||||
|
||||
}
|
||||
public final object MySerializer : R|kotlinx/serialization/KSerializer<Project4>| {
|
||||
private constructor(): R|MySerializer| {
|
||||
super<R|kotlin/Any|>()
|
||||
}
|
||||
|
||||
public final override val descriptor: R|kotlinx/serialization/descriptors/SerialDescriptor| = R|kotlinx/serialization/descriptors/PrimitiveSerialDescriptor|(String(Project4), Q|kotlinx/serialization/descriptors/PrimitiveKind.STRING|)
|
||||
public get(): R|kotlinx/serialization/descriptors/SerialDescriptor|
|
||||
|
||||
public final override fun serialize(encoder: R|kotlinx/serialization/encoding/Encoder|, value: R|Project4|): R|kotlin/Unit| {
|
||||
^serialize R|<local>/encoder|.R|kotlinx/serialization/encoding/Encoder.encodeString|(<strcat>(R|<local>/value|.R|/Project4.name|, String(:), R|<local>/value|.R|/Project4.language|))
|
||||
}
|
||||
|
||||
public final override fun deserialize(decoder: R|kotlinx/serialization/encoding/Decoder|): R|Project4| {
|
||||
lval params: R|kotlin/collections/List<kotlin/String>| = R|<local>/decoder|.R|kotlinx/serialization/encoding/Decoder.decodeString|().R|kotlin/text/split|(vararg(Char(:)))
|
||||
^deserialize R|/Project4.Project4|(R|<local>/params|.R|SubstitutionOverride<kotlin/collections/List.get: R|kotlin/String|>|(Int(0)), R|<local>/params|.R|SubstitutionOverride<kotlin/collections/List.get: R|kotlin/String|>|(Int(1)))
|
||||
}
|
||||
|
||||
}
|
||||
public final fun testMetaSerializable(): R|kotlin/Unit| {
|
||||
lval string: R|kotlin/String| = Q|kotlinx/serialization/json/Json|.R|kotlinx/serialization/json/Json.encodeToString|<R|Project1|>(Q|Project1|.R|/Project1.Companion.serializer|(), R|/Project1.Project1|(String(name), String(lang)))
|
||||
R|kotlin/test/assertEquals|<R|kotlin/String|>(String({"name":"name","language":"lang"}), R|<local>/string|)
|
||||
lval reconstructed: R|Project1| = Q|kotlinx/serialization/json/Json|.R|kotlinx/serialization/json/Json.decodeFromString|<R|Project1|>(Q|Project1|.R|/Project1.Companion.serializer|(), R|<local>/string|)
|
||||
R|kotlin/test/assertEquals|<R|kotlin/String|>(String(name), R|<local>/reconstructed|.R|/Project1.name|)
|
||||
R|kotlin/test/assertEquals|<R|kotlin/String|>(String(lang), R|<local>/reconstructed|.R|/Project1.language|)
|
||||
}
|
||||
public final fun testMetaSerializableWithInfo(): R|kotlin/Unit| {
|
||||
lval string: R|kotlin/String| = Q|kotlinx/serialization/json/Json|.R|kotlinx/serialization/json/Json.encodeToString|<R|Project2|>(Q|Project2|.R|/Project2.Companion.serializer|(), R|/Project2.Project2|(String(name), String(lang)))
|
||||
R|kotlin/test/assertEquals|<R|kotlin/String|>(String({"name":"name","language":"lang"}), R|<local>/string|)
|
||||
lval reconstructed: R|Project2| = Q|kotlinx/serialization/json/Json|.R|kotlinx/serialization/json/Json.decodeFromString|<R|Project2|>(Q|Project2|.R|/Project2.Companion.serializer|(), R|<local>/string|)
|
||||
R|kotlin/test/assertEquals|<R|kotlin/String|>(String(name), R|<local>/reconstructed|.R|/Project2.name|)
|
||||
R|kotlin/test/assertEquals|<R|kotlin/String|>(String(lang), R|<local>/reconstructed|.R|/Project2.language|)
|
||||
lval info: R|MySerializableWithInfo| = Q|Project2|.R|/Project2.Companion.serializer|().R|SubstitutionOverride<kotlinx/serialization/KSerializer.descriptor: R|kotlinx/serialization/descriptors/SerialDescriptor|>|.R|kotlinx/serialization/descriptors/SerialDescriptor.annotations|.R|kotlin/collections/filterIsInstance|<R|MySerializableWithInfo|>().R|kotlin/collections/first|<R|MySerializableWithInfo|>()
|
||||
R|kotlin/test/assertEquals|<R|kotlin/Int|>(Int(123), R|<local>/info|.R|/MySerializableWithInfo.value|)
|
||||
R|kotlin/test/assertEquals|<R|kotlin/reflect/KClass<out kotlin/Any>|>(<getClass>(Q|kotlin/String|), R|<local>/info|.R|/MySerializableWithInfo.kclass|)
|
||||
}
|
||||
public final fun testMetaSerializableOnProperty(): R|kotlin/Unit| {
|
||||
lval info: R|MySerializableWithInfo| = Q|Wrapper|.R|/Wrapper.Companion.serializer|().R|SubstitutionOverride<kotlinx/serialization/KSerializer.descriptor: R|kotlinx/serialization/descriptors/SerialDescriptor|>|.R|kotlinx/serialization/descriptors/SerialDescriptor.getElementAnnotations|(Int(0)).R|kotlin/collections/filterIsInstance|<R|MySerializableWithInfo|>().R|kotlin/collections/first|<R|MySerializableWithInfo|>()
|
||||
R|kotlin/test/assertEquals|<R|kotlin/Int|>(Int(234), R|<local>/info|.R|/MySerializableWithInfo.value|)
|
||||
R|kotlin/test/assertEquals|<R|kotlin/reflect/KClass<out kotlin/Any>|>(<getClass>(Q|kotlin/Int|), R|<local>/info|.R|/MySerializableWithInfo.kclass|)
|
||||
}
|
||||
public final fun testSerializableAndMetaAnnotation(): R|kotlin/Unit| {
|
||||
lval string: R|kotlin/String| = Q|kotlinx/serialization/json/Json|.R|kotlinx/serialization/json/Json.encodeToString|<R|Project3|>(Q|Project3|.R|/Project3.Companion.serializer|(), R|/Project3.Project3|(String(name), String(lang)))
|
||||
R|kotlin/test/assertEquals|<R|kotlin/String|>(String({"name":"name","language":"lang"}), R|<local>/string|)
|
||||
lval reconstructed: R|Project3| = Q|kotlinx/serialization/json/Json|.R|kotlinx/serialization/json/Json.decodeFromString|<R|Project3|>(Q|Project3|.R|/Project3.Companion.serializer|(), R|<local>/string|)
|
||||
R|kotlin/test/assertEquals|<R|kotlin/String|>(String(name), R|<local>/reconstructed|.R|/Project3.name|)
|
||||
R|kotlin/test/assertEquals|<R|kotlin/String|>(String(lang), R|<local>/reconstructed|.R|/Project3.language|)
|
||||
lval info: R|MySerializableWithInfo| = Q|Project3|.R|/Project3.Companion.serializer|().R|SubstitutionOverride<kotlinx/serialization/KSerializer.descriptor: R|kotlinx/serialization/descriptors/SerialDescriptor|>|.R|kotlinx/serialization/descriptors/SerialDescriptor.annotations|.R|kotlin/collections/filterIsInstance|<R|MySerializableWithInfo|>().R|kotlin/collections/first|<R|MySerializableWithInfo|>()
|
||||
R|kotlin/test/assertEquals|<R|kotlin/Int|>(Int(123), R|<local>/info|.R|/MySerializableWithInfo.value|)
|
||||
R|kotlin/test/assertEquals|<R|kotlin/reflect/KClass<out kotlin/Any>|>(<getClass>(Q|kotlin/String|), R|<local>/info|.R|/MySerializableWithInfo.kclass|)
|
||||
}
|
||||
public final fun testCustomSerializerAndMetaAnnotation(): R|kotlin/Unit| {
|
||||
lval string: R|kotlin/String| = Q|kotlinx/serialization/json/Json|.R|kotlinx/serialization/json/Json.encodeToString|<R|Project4|>(Q|Project4|.R|/Project4.Companion.serializer|(), R|/Project4.Project4|(String(name), String(lang)))
|
||||
R|kotlin/test/assertEquals|<R|kotlin/String|>(String(name:lang), R|<local>/string|)
|
||||
lval reconstructed: R|Project4| = Q|kotlinx/serialization/json/Json|.R|kotlinx/serialization/json/Json.decodeFromString|<R|Project4|>(Q|Project4|.R|/Project4.Companion.serializer|(), R|<local>/string|)
|
||||
R|kotlin/test/assertEquals|<R|kotlin/String|>(String(name), R|<local>/reconstructed|.R|/Project4.name|)
|
||||
R|kotlin/test/assertEquals|<R|kotlin/String|>(String(lang), R|<local>/reconstructed|.R|/Project4.language|)
|
||||
}
|
||||
public final fun testSealed(): R|kotlin/Unit| {
|
||||
lval serializerA: R|kotlinx/serialization/KSerializer<TestSealed.A>| = Q|TestSealed.A|.R|/TestSealed.A.Companion.serializer|()
|
||||
lval serializerB: R|kotlinx/serialization/KSerializer<TestSealed.B>| = Q|TestSealed.B|.R|/TestSealed.B.Companion.serializer|()
|
||||
R|kotlin/test/assertNotNull|<R|kotlinx/serialization/KSerializer<TestSealed.A>|>(R|<local>/serializerA|)
|
||||
R|kotlin/test/assertNotNull|<R|kotlinx/serialization/KSerializer<TestSealed.B>|>(R|<local>/serializerB|)
|
||||
lval infoA: R|MySerializableWithInfo| = R|<local>/serializerA|.R|SubstitutionOverride<kotlinx/serialization/KSerializer.descriptor: R|kotlinx/serialization/descriptors/SerialDescriptor|>|.R|kotlinx/serialization/descriptors/SerialDescriptor.annotations|.R|kotlin/collections/filterIsInstance|<R|MySerializableWithInfo|>().R|kotlin/collections/first|<R|MySerializableWithInfo|>()
|
||||
lval infoB: R|MySerializableWithInfo| = R|<local>/serializerB|.R|SubstitutionOverride<kotlinx/serialization/KSerializer.descriptor: R|kotlinx/serialization/descriptors/SerialDescriptor|>|.R|kotlinx/serialization/descriptors/SerialDescriptor.annotations|.R|kotlin/collections/filterIsInstance|<R|MySerializableWithInfo|>().R|kotlin/collections/first|<R|MySerializableWithInfo|>()
|
||||
R|kotlin/test/assertEquals|<R|kotlin/Int|>(Int(123), R|<local>/infoA|.R|/MySerializableWithInfo.value|)
|
||||
R|kotlin/test/assertEquals|<R|kotlin/reflect/KClass<out kotlin/Any>|>(<getClass>(Q|kotlin/String|), R|<local>/infoA|.R|/MySerializableWithInfo.kclass|)
|
||||
R|kotlin/test/assertEquals|<R|kotlin/Int|>(Int(123), R|<local>/infoB|.R|/MySerializableWithInfo.value|)
|
||||
R|kotlin/test/assertEquals|<R|kotlin/reflect/KClass<out kotlin/Any>|>(<getClass>(Q|kotlin/String|), R|<local>/infoB|.R|/MySerializableWithInfo.kclass|)
|
||||
}
|
||||
public final fun testAbstract(): R|kotlin/Unit| {
|
||||
lval serializerA: R|kotlinx/serialization/KSerializer<TestAbstract.A>| = Q|TestAbstract.A|.R|/TestAbstract.A.Companion.serializer|()
|
||||
lval serializerB: R|kotlinx/serialization/KSerializer<TestAbstract.B>| = Q|TestAbstract.B|.R|/TestAbstract.B.Companion.serializer|()
|
||||
R|kotlin/test/assertNotNull|<R|kotlinx/serialization/KSerializer<TestAbstract.A>|>(R|<local>/serializerA|)
|
||||
R|kotlin/test/assertNotNull|<R|kotlinx/serialization/KSerializer<TestAbstract.B>|>(R|<local>/serializerB|)
|
||||
lval infoA: R|MySerializableWithInfo| = R|<local>/serializerA|.R|SubstitutionOverride<kotlinx/serialization/KSerializer.descriptor: R|kotlinx/serialization/descriptors/SerialDescriptor|>|.R|kotlinx/serialization/descriptors/SerialDescriptor.annotations|.R|kotlin/collections/filterIsInstance|<R|MySerializableWithInfo|>().R|kotlin/collections/first|<R|MySerializableWithInfo|>()
|
||||
lval infoB: R|MySerializableWithInfo| = R|<local>/serializerB|.R|SubstitutionOverride<kotlinx/serialization/KSerializer.descriptor: R|kotlinx/serialization/descriptors/SerialDescriptor|>|.R|kotlinx/serialization/descriptors/SerialDescriptor.annotations|.R|kotlin/collections/filterIsInstance|<R|MySerializableWithInfo|>().R|kotlin/collections/first|<R|MySerializableWithInfo|>()
|
||||
R|kotlin/test/assertEquals|<R|kotlin/Int|>(Int(123), R|<local>/infoA|.R|/MySerializableWithInfo.value|)
|
||||
R|kotlin/test/assertEquals|<R|kotlin/reflect/KClass<out kotlin/Any>|>(<getClass>(Q|kotlin/String|), R|<local>/infoA|.R|/MySerializableWithInfo.kclass|)
|
||||
R|kotlin/test/assertEquals|<R|kotlin/Int|>(Int(123), R|<local>/infoB|.R|/MySerializableWithInfo.value|)
|
||||
R|kotlin/test/assertEquals|<R|kotlin/reflect/KClass<out kotlin/Any>|>(<getClass>(Q|kotlin/String|), R|<local>/infoB|.R|/MySerializableWithInfo.kclass|)
|
||||
}
|
||||
public final fun testEnum(): R|kotlin/Unit| {
|
||||
lval serializer: R|kotlinx/serialization/KSerializer<TestEnum>| = Q|TestEnum|.R|/TestEnum.Companion.serializer|()
|
||||
R|kotlin/test/assertNotNull|<R|kotlinx/serialization/KSerializer<TestEnum>|>(R|<local>/serializer|)
|
||||
lval info: R|MySerializableWithInfo| = R|<local>/serializer|.R|SubstitutionOverride<kotlinx/serialization/KSerializer.descriptor: R|kotlinx/serialization/descriptors/SerialDescriptor|>|.R|kotlinx/serialization/descriptors/SerialDescriptor.annotations|.R|kotlin/collections/filterIsInstance|<R|MySerializableWithInfo|>().R|kotlin/collections/first|<R|MySerializableWithInfo|>()
|
||||
R|kotlin/test/assertEquals|<R|kotlin/Int|>(Int(123), R|<local>/info|.R|/MySerializableWithInfo.value|)
|
||||
R|kotlin/test/assertEquals|<R|kotlin/reflect/KClass<out kotlin/Any>|>(<getClass>(Q|kotlin/String|), R|<local>/info|.R|/MySerializableWithInfo.kclass|)
|
||||
}
|
||||
public final fun testObject(): R|kotlin/Unit| {
|
||||
lval serializer: R|kotlinx/serialization/KSerializer<TestObject>| = Q|TestObject|.R|/TestObject.serializer|()
|
||||
R|kotlin/test/assertNotNull|<R|kotlinx/serialization/KSerializer<TestObject>|>(R|<local>/serializer|)
|
||||
lval info: R|MySerializableWithInfo| = R|<local>/serializer|.R|SubstitutionOverride<kotlinx/serialization/KSerializer.descriptor: R|kotlinx/serialization/descriptors/SerialDescriptor|>|.R|kotlinx/serialization/descriptors/SerialDescriptor.annotations|.R|kotlin/collections/filterIsInstance|<R|MySerializableWithInfo|>().R|kotlin/collections/first|<R|MySerializableWithInfo|>()
|
||||
R|kotlin/test/assertEquals|<R|kotlin/Int|>(Int(123), R|<local>/info|.R|/MySerializableWithInfo.value|)
|
||||
R|kotlin/test/assertEquals|<R|kotlin/reflect/KClass<out kotlin/Any>|>(<getClass>(Q|kotlin/String|), R|<local>/info|.R|/MySerializableWithInfo.kclass|)
|
||||
}
|
||||
public final fun box(): R|kotlin/String| {
|
||||
R|/testMetaSerializable|()
|
||||
R|/testMetaSerializableWithInfo|()
|
||||
R|/testMetaSerializableOnProperty|()
|
||||
R|/testSealed|()
|
||||
R|/testAbstract|()
|
||||
R|/testEnum|()
|
||||
R|/testObject|()
|
||||
^box String(OK)
|
||||
}
|
||||
@@ -0,0 +1,180 @@
|
||||
// WITH_STDLIB
|
||||
|
||||
import kotlinx.serialization.*
|
||||
import kotlinx.serialization.encoding.*
|
||||
import kotlinx.serialization.descriptors.*
|
||||
import kotlinx.serialization.json.*
|
||||
import kotlin.reflect.KClass
|
||||
import kotlin.test.*
|
||||
|
||||
@MetaSerializable
|
||||
@Target(AnnotationTarget.CLASS, AnnotationTarget.PROPERTY)
|
||||
annotation class MySerializable
|
||||
|
||||
@MetaSerializable
|
||||
@Target(AnnotationTarget.CLASS, AnnotationTarget.PROPERTY)
|
||||
annotation class MySerializableWithInfo(
|
||||
val value: Int,
|
||||
val kclass: KClass<*>
|
||||
)
|
||||
|
||||
@MySerializable
|
||||
class Project1(val name: String, val language: String)
|
||||
|
||||
@MySerializableWithInfo(123, String::class)
|
||||
class Project2(val name: String, val language: String)
|
||||
|
||||
@Serializable
|
||||
class Wrapper(
|
||||
@MySerializableWithInfo(234, Int::class) val project: Project2
|
||||
)
|
||||
|
||||
@Serializable
|
||||
@MySerializableWithInfo(123, String::class)
|
||||
class Project3(val name: String, val language: String)
|
||||
|
||||
@Serializable(with = MySerializer::class)
|
||||
@MySerializableWithInfo(123, String::class)
|
||||
class Project4(val name: String, val language: String)
|
||||
|
||||
@MySerializableWithInfo(123, String::class)
|
||||
sealed class TestSealed {
|
||||
@MySerializableWithInfo(123, String::class)
|
||||
class A(val value1: String) : TestSealed()
|
||||
@MySerializableWithInfo(123, String::class)
|
||||
class B(val value2: String) : TestSealed()
|
||||
}
|
||||
|
||||
@MySerializable
|
||||
abstract class TestAbstract {
|
||||
@MySerializableWithInfo(123, String::class)
|
||||
class A(val value1: String) : TestSealed()
|
||||
|
||||
@MySerializableWithInfo(123, String::class)
|
||||
class B(val value2: String) : TestSealed()
|
||||
}
|
||||
|
||||
@MySerializableWithInfo(123, String::class)
|
||||
enum class TestEnum { Value1, Value2 }
|
||||
|
||||
@MySerializableWithInfo(123, String::class)
|
||||
object TestObject
|
||||
|
||||
object MySerializer : KSerializer<Project4> {
|
||||
|
||||
override val descriptor: SerialDescriptor = PrimitiveSerialDescriptor("Project4", PrimitiveKind.STRING)
|
||||
|
||||
override fun serialize(encoder: Encoder, value: Project4) = encoder.encodeString("${value.name}:${value.language}")
|
||||
|
||||
override fun deserialize(decoder: Decoder): Project4 {
|
||||
val params = decoder.decodeString().split(':')
|
||||
return Project4(params[0], params[1])
|
||||
}
|
||||
}
|
||||
|
||||
fun testMetaSerializable() {
|
||||
val string = Json.encodeToString(Project1.serializer(), Project1("name", "lang"))
|
||||
assertEquals("""{"name":"name","language":"lang"}""", string)
|
||||
|
||||
val reconstructed = Json.decodeFromString(Project1.serializer(), string)
|
||||
assertEquals("name", reconstructed.name)
|
||||
assertEquals("lang", reconstructed.language)
|
||||
}
|
||||
|
||||
fun testMetaSerializableWithInfo() {
|
||||
val string = Json.encodeToString(Project2.serializer(), Project2("name", "lang"))
|
||||
assertEquals("""{"name":"name","language":"lang"}""", string)
|
||||
|
||||
val reconstructed = Json.decodeFromString(Project2.serializer(), string)
|
||||
assertEquals("name", reconstructed.name)
|
||||
assertEquals("lang", reconstructed.language)
|
||||
|
||||
val info = Project2.serializer().descriptor.annotations.filterIsInstance<MySerializableWithInfo>().first()
|
||||
assertEquals(123, info.value)
|
||||
assertEquals(String::class, info.kclass)
|
||||
}
|
||||
|
||||
fun testMetaSerializableOnProperty() {
|
||||
val info = Wrapper.serializer().descriptor.getElementAnnotations(0).filterIsInstance<MySerializableWithInfo>().first()
|
||||
assertEquals(234, info.value)
|
||||
assertEquals(Int::class, info.kclass)
|
||||
}
|
||||
|
||||
fun testSerializableAndMetaAnnotation() {
|
||||
val string = Json.encodeToString(Project3.serializer(), Project3("name", "lang"))
|
||||
assertEquals("""{"name":"name","language":"lang"}""", string)
|
||||
|
||||
val reconstructed = Json.decodeFromString(Project3.serializer(), string)
|
||||
assertEquals("name", reconstructed.name)
|
||||
assertEquals("lang", reconstructed.language)
|
||||
|
||||
val info = Project3.serializer().descriptor.annotations.filterIsInstance<MySerializableWithInfo>().first()
|
||||
assertEquals(123, info.value)
|
||||
assertEquals(String::class, info.kclass)
|
||||
}
|
||||
|
||||
fun testCustomSerializerAndMetaAnnotation() {
|
||||
val string = Json.encodeToString(Project4.serializer(), Project4("name", "lang"))
|
||||
assertEquals("""name:lang""", string)
|
||||
|
||||
val reconstructed = Json.decodeFromString(Project4.serializer(), string)
|
||||
assertEquals("name", reconstructed.name)
|
||||
assertEquals("lang", reconstructed.language)
|
||||
}
|
||||
|
||||
fun testSealed() {
|
||||
val serializerA = TestSealed.A.serializer()
|
||||
val serializerB = TestSealed.B.serializer()
|
||||
assertNotNull(serializerA)
|
||||
assertNotNull(serializerB)
|
||||
|
||||
val infoA = serializerA.descriptor.annotations.filterIsInstance<MySerializableWithInfo>().first()
|
||||
val infoB = serializerB.descriptor.annotations.filterIsInstance<MySerializableWithInfo>().first()
|
||||
assertEquals(123, infoA.value)
|
||||
assertEquals(String::class, infoA.kclass)
|
||||
assertEquals(123, infoB.value)
|
||||
assertEquals(String::class, infoB.kclass)
|
||||
}
|
||||
|
||||
fun testAbstract() {
|
||||
val serializerA = TestAbstract.A.serializer()
|
||||
val serializerB = TestAbstract.B.serializer()
|
||||
assertNotNull(serializerA)
|
||||
assertNotNull(serializerB)
|
||||
|
||||
val infoA = serializerA.descriptor.annotations.filterIsInstance<MySerializableWithInfo>().first()
|
||||
val infoB = serializerB.descriptor.annotations.filterIsInstance<MySerializableWithInfo>().first()
|
||||
assertEquals(123, infoA.value)
|
||||
assertEquals(String::class, infoA.kclass)
|
||||
assertEquals(123, infoB.value)
|
||||
assertEquals(String::class, infoB.kclass)
|
||||
}
|
||||
|
||||
fun testEnum() {
|
||||
val serializer = TestEnum.serializer()
|
||||
assertNotNull(serializer)
|
||||
|
||||
val info = serializer.descriptor.annotations.filterIsInstance<MySerializableWithInfo>().first()
|
||||
assertEquals(123, info.value)
|
||||
assertEquals(String::class, info.kclass)
|
||||
}
|
||||
|
||||
fun testObject() {
|
||||
val serializer = TestObject.serializer()
|
||||
assertNotNull(serializer)
|
||||
|
||||
val info = serializer.descriptor.annotations.filterIsInstance<MySerializableWithInfo>().first()
|
||||
assertEquals(123, info.value)
|
||||
assertEquals(String::class, info.kclass)
|
||||
}
|
||||
|
||||
fun box(): String {
|
||||
testMetaSerializable()
|
||||
testMetaSerializableWithInfo()
|
||||
testMetaSerializableOnProperty()
|
||||
testSealed()
|
||||
testAbstract()
|
||||
testEnum()
|
||||
testObject()
|
||||
return "OK"
|
||||
}
|
||||
Reference in New Issue
Block a user