Fix multiple serialization plugin problems

Do not use fallback serializer if it is the same (fixes
https://github.com/Kotlin/kotlinx.serialization/issues/957).

Use correct number of serializable KClasses when creating sealed class
serializer (fixes https://github.com/Kotlin/kotlinx.serialization/issues/925).
This commit is contained in:
Leonid Startsev
2020-08-04 19:55:19 +03:00
parent 106d8e74d4
commit 8b0bb430e7
2 changed files with 4 additions and 2 deletions
@@ -87,7 +87,9 @@ fun AbstractSerialGenerator.allSealedSerializableSubclassesFor(
} }
val serializableSubtypes = recursiveSealed(klass).map { it.toSimpleType() } val serializableSubtypes = recursiveSealed(klass).map { it.toSimpleType() }
return serializableSubtypes to serializableSubtypes.mapNotNull { findTypeSerializerOrContextUnchecked(module, it) } return serializableSubtypes.mapNotNull { subtype ->
findTypeSerializerOrContextUnchecked(module, subtype)?.let { Pair(subtype, it) }
}.unzip()
} }
fun KotlinType.serialName(): String { fun KotlinType.serialName(): String {
@@ -294,7 +294,7 @@ internal fun AbstractSerialGenerator.stackValueSerializerInstance(codegen: Class
if (serializer.classId == contextSerializerId && serializer.constructors.any { it.valueParameters.size == 3 }) { if (serializer.classId == contextSerializerId && serializer.constructors.any { it.valueParameters.size == 3 }) {
// append new additional arguments // append new additional arguments
val fallbackDefaultSerializer = findTypeSerializer(module, kType) val fallbackDefaultSerializer = findTypeSerializer(module, kType)
if (fallbackDefaultSerializer != null) { if (fallbackDefaultSerializer != null && fallbackDefaultSerializer != serializer) {
instantiate(kType to fallbackDefaultSerializer, writeSignature = false) instantiate(kType to fallbackDefaultSerializer, writeSignature = false)
} else { } else {
aconst(null) aconst(null)