[Serialization] Implement serialization checker for K2 version of plugin
^KT-53178 Fixed
This commit is contained in:
committed by
teamcity
parent
e048ffcf6d
commit
671083c701
@@ -1,9 +0,0 @@
|
||||
// WITH_STDLIB
|
||||
// FILE: test.kt
|
||||
import kotlinx.serialization.*
|
||||
|
||||
@Serializable
|
||||
open class Parent(open val arg: Int)
|
||||
|
||||
@Serializable
|
||||
class Derived(override val arg: Int): Parent(arg)
|
||||
@@ -1,3 +1,4 @@
|
||||
// FIR_IDENTICAL
|
||||
// WITH_STDLIB
|
||||
// FILE: test.kt
|
||||
import kotlinx.serialization.*
|
||||
|
||||
-28
@@ -1,28 +0,0 @@
|
||||
// WITH_STDLIB
|
||||
// SKIP_TXT
|
||||
import kotlinx.serialization.*
|
||||
|
||||
|
||||
@Serializable
|
||||
enum class ImplicitlyDuplicated {
|
||||
@SerialName("foo")
|
||||
FIRST,
|
||||
@SerialName("foo")
|
||||
SECOND
|
||||
}
|
||||
|
||||
@Serializable
|
||||
enum class ExplicitlyDuplicated {
|
||||
FIRST,
|
||||
SECOND,
|
||||
@SerialName("FIRST")
|
||||
THIRD
|
||||
}
|
||||
|
||||
@Serializable
|
||||
enum class ReversedExplicitlyDuplicated {
|
||||
@SerialName("THIRD")
|
||||
FIRST,
|
||||
SECOND,
|
||||
THIRD
|
||||
}
|
||||
@@ -1,3 +1,4 @@
|
||||
// FIR_IDENTICAL
|
||||
// WITH_STDLIB
|
||||
// SKIP_TXT
|
||||
import kotlinx.serialization.*
|
||||
|
||||
@@ -1,11 +0,0 @@
|
||||
// WITH_STDLIB
|
||||
// SKIP_TXT
|
||||
|
||||
import kotlinx.serialization.Serializable
|
||||
import java.io.Serializable as JavaSerializable
|
||||
|
||||
@Serializable
|
||||
class Data(val x: Int, @Transient val y: String)
|
||||
|
||||
@Serializable
|
||||
class Data2(val x: Int, @Transient val y: String) : JavaSerializable
|
||||
@@ -1,3 +1,4 @@
|
||||
// FIR_IDENTICAL
|
||||
// WITH_STDLIB
|
||||
// SKIP_TXT
|
||||
|
||||
|
||||
-19
@@ -1,19 +0,0 @@
|
||||
// WITH_STDLIB
|
||||
// SKIP_TXT
|
||||
|
||||
import kotlinx.serialization.Serializable
|
||||
import kotlinx.serialization.Transient
|
||||
import java.io.Serializable as JavaSerializable
|
||||
import kotlin.jvm.Transient as JavaTransient
|
||||
|
||||
@Serializable
|
||||
class Data(val x: Int, @Transient val y: String = "a")
|
||||
|
||||
@Serializable
|
||||
class Data2(val x: Int, @Transient val y: String = "a") : JavaSerializable
|
||||
|
||||
@Serializable
|
||||
class Data3(val x: Int, @Transient @JavaTransient val y: String = "a") : JavaSerializable
|
||||
|
||||
@Serializable
|
||||
class Data4(val x: Int, @JavaTransient val y: String)
|
||||
@@ -1,3 +1,4 @@
|
||||
// FIR_IDENTICAL
|
||||
// WITH_STDLIB
|
||||
// SKIP_TXT
|
||||
|
||||
|
||||
@@ -1,25 +1,24 @@
|
||||
// FIR_IDENTICAL
|
||||
// WITH_STDLIB
|
||||
// SKIP_TXT
|
||||
// !USE_EXPERIMENTAL: kotlinx.serialization.ExperimentalSerializationApi
|
||||
// USE_EXPERIMENTAL: kotlinx.serialization.ExperimentalSerializationApi
|
||||
// FILE: test.kt
|
||||
|
||||
import kotlinx.serialization.*
|
||||
import kotlin.reflect.KClass
|
||||
|
||||
// TODO: for this test to work, runtime dependency should be updated to (yet unreleased) serialization 1.3.0
|
||||
//@InheritableSerialInfo
|
||||
@InheritableSerialInfo
|
||||
annotation class I(val value: String)
|
||||
|
||||
enum class E { A, B }
|
||||
|
||||
//@InheritableSerialInfo
|
||||
@InheritableSerialInfo
|
||||
annotation class I2(val e: E, val k: KClass<*>)
|
||||
|
||||
@Serializable
|
||||
@I("a")
|
||||
sealed class Result {
|
||||
// @I("b")
|
||||
<!INCONSISTENT_INHERITABLE_SERIALINFO!>@I("b")<!>
|
||||
@Serializable class OK(val s: String): Result()
|
||||
}
|
||||
|
||||
@@ -35,15 +34,15 @@ open class Correct: A()
|
||||
|
||||
@Serializable
|
||||
@I("a")
|
||||
//@I2(E.B, E::class)
|
||||
<!INCONSISTENT_INHERITABLE_SERIALINFO!>@I2(E.B, E::class)<!>
|
||||
open class B: A()
|
||||
|
||||
@Serializable
|
||||
@I("a")
|
||||
//@I2(E.A, I::class)
|
||||
<!INCONSISTENT_INHERITABLE_SERIALINFO!>@I2(E.A, I::class)<!>
|
||||
open class B2: A()
|
||||
|
||||
@Serializable
|
||||
//@I("b")
|
||||
//@I2(E.A, E::class)
|
||||
<!INCONSISTENT_INHERITABLE_SERIALINFO!>@I("b")<!>
|
||||
<!INCONSISTENT_INHERITABLE_SERIALINFO!>@I2(E.A, E::class)<!>
|
||||
open class C: B()
|
||||
|
||||
@@ -1,46 +0,0 @@
|
||||
// WITH_STDLIB
|
||||
// SKIP_TXT
|
||||
|
||||
import kotlinx.serialization.*
|
||||
import kotlinx.serialization.descriptors.*
|
||||
import kotlinx.serialization.encoding.*
|
||||
|
||||
fun container() {
|
||||
@Serializable
|
||||
class X // local classes are allowed
|
||||
|
||||
val y = @Serializable object {
|
||||
fun inObjectFun() {
|
||||
@Serializable
|
||||
class X // local classes in anonymous object functions are not allowed
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
class LocalSerializer : KSerializer<Any?> {
|
||||
override val descriptor: SerialDescriptor = buildSerialDescriptor("tmp", PrimitiveKind.INT)
|
||||
override fun serialize(encoder: Encoder, value: Any?) {
|
||||
encoder.encodeNull()
|
||||
}
|
||||
|
||||
override fun deserialize(decoder: Decoder): Any? {
|
||||
return decoder.decodeNull()
|
||||
}
|
||||
}
|
||||
|
||||
@Serializable
|
||||
class WithLocalSerializerInProperty(@Serializable(with = LocalSerializer::class) val x: Any?)
|
||||
|
||||
@Serializable(with = LocalSerializer::class)
|
||||
data class WithLocalSerializer(val i: Int)
|
||||
}
|
||||
|
||||
val topLevelAnon = @Serializable object {}
|
||||
|
||||
@Serializable class A {
|
||||
@Serializable class B // nested classes are allowed
|
||||
|
||||
@Serializable inner class C // inner classes are not
|
||||
|
||||
@Serializable object F {} // regular named object, OK
|
||||
}
|
||||
@@ -1,3 +1,4 @@
|
||||
// FIR_IDENTICAL
|
||||
// WITH_STDLIB
|
||||
// SKIP_TXT
|
||||
|
||||
|
||||
-8
@@ -1,8 +0,0 @@
|
||||
// WITH_STDLIB
|
||||
// FILE: test.kt
|
||||
import kotlinx.serialization.*
|
||||
|
||||
open class NonSerializableParent(val arg: Int)
|
||||
|
||||
@Serializable
|
||||
class Derived(val someData: String): NonSerializableParent(42)
|
||||
@@ -1,3 +1,4 @@
|
||||
// FIR_IDENTICAL
|
||||
// WITH_STDLIB
|
||||
// FILE: test.kt
|
||||
import kotlinx.serialization.*
|
||||
|
||||
@@ -1,16 +1,17 @@
|
||||
// WITH_STDLIB
|
||||
// FIR_DIFFERENCE: KT-53861
|
||||
// FILE: test.kt
|
||||
import kotlinx.serialization.*
|
||||
|
||||
class NonSerializable
|
||||
|
||||
@Serializable
|
||||
class Basic(val foo: NonSerializable)
|
||||
class Basic(val foo: <!SERIALIZER_NOT_FOUND("NonSerializable")!>NonSerializable<!>)
|
||||
|
||||
@Serializable
|
||||
class Inside(val foo: List<NonSerializable>)
|
||||
class Inside(val foo: <!SERIALIZER_NOT_FOUND("NonSerializable")!>List<NonSerializable><!>)
|
||||
|
||||
@Serializable
|
||||
class WithImplicitType {
|
||||
val foo = NonSerializable()
|
||||
<!SERIALIZER_NOT_FOUND("NonSerializable")!>val foo = NonSerializable()<!>
|
||||
}
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
// WITH_STDLIB
|
||||
// FIR_DIFFERENCE: KT-53861
|
||||
// FILE: test.kt
|
||||
import kotlinx.serialization.*
|
||||
|
||||
|
||||
-17
@@ -1,17 +0,0 @@
|
||||
// WITH_STDLIB
|
||||
// FILE: test.kt
|
||||
import kotlinx.serialization.*
|
||||
import kotlinx.serialization.descriptors.*
|
||||
import kotlinx.serialization.encoding.*
|
||||
|
||||
@Serializable(NopeNullableSerializer::class)
|
||||
class Nope {}
|
||||
|
||||
class NopeNullableSerializer: KSerializer<Nope?> {
|
||||
override val descriptor: SerialDescriptor get() = TODO()
|
||||
override fun deserialize(decoder: Decoder): Nope? = TODO()
|
||||
override fun serialize(encoder: Encoder, value: Nope?) = TODO()
|
||||
}
|
||||
|
||||
@Serializable
|
||||
class Foo(val foo: Nope)
|
||||
@@ -1,3 +1,4 @@
|
||||
// FIR_IDENTICAL
|
||||
// WITH_STDLIB
|
||||
// FILE: test.kt
|
||||
import kotlinx.serialization.*
|
||||
|
||||
@@ -1,6 +0,0 @@
|
||||
// WITH_STDLIB
|
||||
// FILE: test.kt
|
||||
import kotlinx.serialization.*
|
||||
|
||||
@Serializable
|
||||
class Test(val someData: String, cantBeDeserialized: Int)
|
||||
@@ -1,3 +1,4 @@
|
||||
// FIR_IDENTICAL
|
||||
// WITH_STDLIB
|
||||
// FILE: test.kt
|
||||
import kotlinx.serialization.*
|
||||
|
||||
@@ -1,23 +0,0 @@
|
||||
// WITH_STDLIB
|
||||
// FILE: test.kt
|
||||
import kotlinx.serialization.*
|
||||
import kotlinx.serialization.encoding.*
|
||||
|
||||
enum class SimpleEnum { A, B }
|
||||
|
||||
enum class MarkedNameEnum { @SerialName("a") A, B}
|
||||
|
||||
@Serializable
|
||||
enum class ExplicitlyMarkedEnum { @SerialName("a") A, B}
|
||||
|
||||
@Serializable(EnumSerializer::class)
|
||||
enum class ExplicitlyMarkedEnumCustom { @SerialName("a") A, B}
|
||||
|
||||
object EnumSerializer: KSerializer<ExplicitlyMarkedEnumCustom> {
|
||||
override val descriptor = TODO()
|
||||
override fun serialize(encoder: Encoder, value: ExplicitlyMarkedEnumCustom) = TODO()
|
||||
override fun deserialize(decoder: Decoder): ExplicitlyMarkedEnumCustom = TODO()
|
||||
}
|
||||
|
||||
@Serializable
|
||||
data class EnumUsage(val s: SimpleEnum, val m: MarkedNameEnum, val e: ExplicitlyMarkedEnum)
|
||||
@@ -1,3 +1,4 @@
|
||||
// FIR_IDENTICAL
|
||||
// WITH_STDLIB
|
||||
// FILE: test.kt
|
||||
import kotlinx.serialization.*
|
||||
|
||||
-10
@@ -1,10 +0,0 @@
|
||||
// SKIP_TXT
|
||||
|
||||
// FILE: test.kt
|
||||
import kotlinx.serialization.*
|
||||
|
||||
@Serializable
|
||||
interface INonSerializable
|
||||
|
||||
@Serializable
|
||||
sealed interface SealedSerializable
|
||||
@@ -1,3 +1,4 @@
|
||||
// FIR_IDENTICAL
|
||||
// SKIP_TXT
|
||||
|
||||
// FILE: test.kt
|
||||
|
||||
+6
-6
@@ -13,14 +13,14 @@ class Baz
|
||||
@Serializer(forClass = Baz::class)
|
||||
<!ABSTRACT_MEMBER_NOT_IMPLEMENTED!>object NullableBazSerializer<!>: KSerializer<Baz?>
|
||||
|
||||
@Serializable(with = BazSerializer::class)
|
||||
<!SERIALIZER_TYPE_INCOMPATIBLE!>@Serializable(with = BazSerializer::class)<!>
|
||||
class Biz(val i: Int)
|
||||
|
||||
@Serializable
|
||||
class Foo(@Serializable(with = BazSerializer::class) val i: Bar)
|
||||
class Foo(@Serializable(with = BazSerializer::class) val i: <!SERIALIZER_TYPE_INCOMPATIBLE!>Bar<!>)
|
||||
|
||||
@Serializable
|
||||
class Foo2(val li: List<@Serializable(with = BazSerializer::class) Bar>)
|
||||
class Foo2(val li: <!SERIALIZER_TYPE_INCOMPATIBLE!>List<@Serializable(with = BazSerializer::class) Bar><!>)
|
||||
|
||||
@Serializable
|
||||
class Foo3(@Serializable(with = BazSerializer::class) val i: Baz)
|
||||
@@ -29,10 +29,10 @@ class Foo3(@Serializable(with = BazSerializer::class) val i: Baz)
|
||||
class Foo4(val li: List<@Serializable(with = BazSerializer::class) Baz>)
|
||||
|
||||
@Serializable
|
||||
class Foo5(@Serializable(with = BazSerializer::class) val i: Bar?)
|
||||
class Foo5(@Serializable(with = BazSerializer::class) val i: <!SERIALIZER_TYPE_INCOMPATIBLE!>Bar?<!>)
|
||||
|
||||
@Serializable
|
||||
class Foo6(@Serializable(with = NullableBazSerializer::class) val i: Bar)
|
||||
class Foo6(@Serializable(with = NullableBazSerializer::class) val i: <!SERIALIZER_NULLABILITY_INCOMPATIBLE, SERIALIZER_TYPE_INCOMPATIBLE!>Bar<!>)
|
||||
|
||||
@Serializable
|
||||
class Foo7(@Serializable(with = NullableBazSerializer::class) val i: Bar?)
|
||||
class Foo7(@Serializable(with = NullableBazSerializer::class) val i: <!SERIALIZER_TYPE_INCOMPATIBLE!>Bar?<!>)
|
||||
|
||||
@@ -1,11 +0,0 @@
|
||||
// WITH_STDLIB
|
||||
// FILE: test.kt
|
||||
import kotlinx.serialization.*
|
||||
|
||||
@Serializable
|
||||
data class WithTransients(@Transient val missing: Int) {
|
||||
@Transient val redundant: Int get() = 42
|
||||
|
||||
@Transient
|
||||
lateinit var allowTransientLateinitWithoutInitializer: String
|
||||
}
|
||||
@@ -1,3 +1,4 @@
|
||||
// FIR_IDENTICAL
|
||||
// WITH_STDLIB
|
||||
// FILE: test.kt
|
||||
import kotlinx.serialization.*
|
||||
|
||||
Reference in New Issue
Block a user