Use upper bound as a type for polymorphic serializer

when it is used in sealed class case

Fixes https://github.com/Kotlin/kotlinx.serialization/issues/753
This commit is contained in:
Leonid Startsev
2020-03-11 15:52:44 +03:00
parent 15fa6ea757
commit e495c35ad7
@@ -35,6 +35,7 @@ import org.jetbrains.kotlin.resolve.descriptorUtil.classId
import org.jetbrains.kotlin.types.* import org.jetbrains.kotlin.types.*
import org.jetbrains.kotlin.types.typeUtil.isTypeParameter import org.jetbrains.kotlin.types.typeUtil.isTypeParameter
import org.jetbrains.kotlin.types.typeUtil.makeNotNullable import org.jetbrains.kotlin.types.typeUtil.makeNotNullable
import org.jetbrains.kotlin.types.typeUtil.representativeUpperBound
import org.jetbrains.kotlinx.serialization.compiler.backend.common.AbstractSerialGenerator import org.jetbrains.kotlinx.serialization.compiler.backend.common.AbstractSerialGenerator
import org.jetbrains.kotlinx.serialization.compiler.backend.common.allSealedSerializableSubclassesFor import org.jetbrains.kotlinx.serialization.compiler.backend.common.allSealedSerializableSubclassesFor
import org.jetbrains.kotlinx.serialization.compiler.backend.common.findTypeSerializerOrContext import org.jetbrains.kotlinx.serialization.compiler.backend.common.findTypeSerializerOrContext
@@ -607,7 +608,7 @@ interface IrBuilderExtension {
SpecialBuiltins.polymorphicSerializer SpecialBuiltins.polymorphicSerializer
), ),
module, module,
genericType (genericType.constructor.declarationDescriptor as TypeParameterDescriptor).representativeUpperBound
)!! )!!
}!! }!!
wrapWithNullableSerializerIfNeeded(module, type, expr, nullableSerClass) wrapWithNullableSerializerIfNeeded(module, type, expr, nullableSerClass)