Use a correct type for SERIALIZER_TYPE_INCOMPATIBLE diagnostic.
This diagnostic used an incorrect type for rendering (outer class type instead of a property type) and didn't expand type argument of `KSerializer`. Also add an additional test case for generic parameters. #KT-63570 Fixed
This commit is contained in:
committed by
Space Team
parent
1260d03561
commit
51e3e9af94
+8
@@ -40,3 +40,11 @@ class Foo6(@Serializable(with = NullableBazSerializer::class) val i: <!SERIALIZE
|
||||
|
||||
@Serializable
|
||||
class Foo7(@Serializable(with = NullableBazSerializer::class) val i: <!SERIALIZER_TYPE_INCOMPATIBLE!>Bar?<!>)
|
||||
|
||||
// It is OK to report, because subclasses can't generally be deserialized (as `deserialize()` signature returns base class)
|
||||
@Serializable
|
||||
@Suppress("FINAL_UPPER_BOUND")
|
||||
class Foo8<Br: Bar>(@Serializable(BarSerializer::class) val b: <!SERIALIZER_TYPE_INCOMPATIBLE("Br; BarSerializer; Bar")!>Br<!>)
|
||||
|
||||
@Serializable
|
||||
class Foo9<T>(@Serializable(BarSerializer::class) val b: <!SERIALIZER_TYPE_INCOMPATIBLE("T; BarSerializer; Bar")!>T<!>)
|
||||
|
||||
+8
@@ -40,3 +40,11 @@ class Foo6(@Serializable(with = NullableBazSerializer::class) val i: <!SERIALIZE
|
||||
|
||||
@Serializable
|
||||
class Foo7(@Serializable(with = NullableBazSerializer::class) val i: <!SERIALIZER_TYPE_INCOMPATIBLE!>Bar?<!>)
|
||||
|
||||
// It is OK to report, because subclasses can't generally be deserialized (as `deserialize()` signature returns base class)
|
||||
@Serializable
|
||||
@Suppress("FINAL_UPPER_BOUND")
|
||||
class Foo8<Br: Bar>(@Serializable(BarSerializer::class) val b: <!SERIALIZER_TYPE_INCOMPATIBLE("Br; BarSerializer; Bar")!>Br<!>)
|
||||
|
||||
@Serializable
|
||||
class Foo9<T>(@Serializable(BarSerializer::class) val b: <!SERIALIZER_TYPE_INCOMPATIBLE("T; BarSerializer; Bar")!>T<!>)
|
||||
|
||||
Vendored
+41
@@ -0,0 +1,41 @@
|
||||
// FIR_DISABLE_LAZY_RESOLVE_CHECKS
|
||||
// WITH_STDLIB
|
||||
|
||||
// MODULE: lib
|
||||
// FILE: libtest.kt
|
||||
|
||||
import kotlinx.serialization.*
|
||||
import java.util.*
|
||||
|
||||
typealias MyDate = java.util.Date
|
||||
|
||||
// MODULE: main(lib)
|
||||
// FILE: test.kt
|
||||
|
||||
import kotlinx.serialization.KSerializer
|
||||
import kotlinx.serialization.Serializable
|
||||
import kotlinx.serialization.descriptors.PrimitiveKind
|
||||
import kotlinx.serialization.descriptors.PrimitiveSerialDescriptor
|
||||
import kotlinx.serialization.descriptors.SerialDescriptor
|
||||
import kotlinx.serialization.encoding.Decoder
|
||||
import kotlinx.serialization.encoding.Encoder
|
||||
|
||||
internal object MyDateSerializer : KSerializer<MyDate> {
|
||||
override val descriptor: SerialDescriptor = PrimitiveSerialDescriptor("uuid", PrimitiveKind.STRING)
|
||||
|
||||
override fun deserialize(decoder: Decoder) = TODO()
|
||||
|
||||
override fun serialize(
|
||||
encoder: Encoder,
|
||||
value: MyDate
|
||||
) = encoder.encodeString(value.toString())
|
||||
}
|
||||
|
||||
@Serializable
|
||||
data class Session(
|
||||
@Serializable(MyDateSerializer::class) val date: MyDate,
|
||||
@Serializable(MyDateSerializer::class) val alsoDate: java.util.Date,
|
||||
// The only difference with FIR is how RENDER_TYPE works:
|
||||
@Serializable(MyDateSerializer::class) val s: <!SERIALIZER_TYPE_INCOMPATIBLE("kotlin.String; MyDateSerializer; java.util.Date")!>String<!>,
|
||||
val sl: List<<!SERIALIZER_TYPE_INCOMPATIBLE("@Serializable(...) kotlin.String; MyDateSerializer; java.util.Date")!>@Serializable(MyDateSerializer::class) String<!>>
|
||||
)
|
||||
Vendored
+41
@@ -0,0 +1,41 @@
|
||||
// FIR_DISABLE_LAZY_RESOLVE_CHECKS
|
||||
// WITH_STDLIB
|
||||
|
||||
// MODULE: lib
|
||||
// FILE: libtest.kt
|
||||
|
||||
import kotlinx.serialization.*
|
||||
import java.util.*
|
||||
|
||||
typealias MyDate = java.util.Date
|
||||
|
||||
// MODULE: main(lib)
|
||||
// FILE: test.kt
|
||||
|
||||
import kotlinx.serialization.KSerializer
|
||||
import kotlinx.serialization.Serializable
|
||||
import kotlinx.serialization.descriptors.PrimitiveKind
|
||||
import kotlinx.serialization.descriptors.PrimitiveSerialDescriptor
|
||||
import kotlinx.serialization.descriptors.SerialDescriptor
|
||||
import kotlinx.serialization.encoding.Decoder
|
||||
import kotlinx.serialization.encoding.Encoder
|
||||
|
||||
internal object MyDateSerializer : KSerializer<MyDate> {
|
||||
override val descriptor: SerialDescriptor = PrimitiveSerialDescriptor("uuid", PrimitiveKind.STRING)
|
||||
|
||||
override fun deserialize(decoder: Decoder) = TODO()
|
||||
|
||||
override fun serialize(
|
||||
encoder: Encoder,
|
||||
value: MyDate
|
||||
) = encoder.encodeString(value.toString())
|
||||
}
|
||||
|
||||
@Serializable
|
||||
data class Session(
|
||||
@Serializable(MyDateSerializer::class) val date: MyDate,
|
||||
@Serializable(MyDateSerializer::class) val alsoDate: java.util.Date,
|
||||
// The only difference with FIR is how RENDER_TYPE works:
|
||||
@Serializable(MyDateSerializer::class) val s: <!SERIALIZER_TYPE_INCOMPATIBLE("String; MyDateSerializer; MyDate /* = Date */")!>String<!>,
|
||||
val sl: List<@Serializable(MyDateSerializer::class) <!SERIALIZER_TYPE_INCOMPATIBLE("String; MyDateSerializer; MyDate /* = Date */")!>String<!>>
|
||||
)
|
||||
Reference in New Issue
Block a user