I've just updated to Kotlin 1.6.10 (was 1.4.32) an...
# serialization
m
I've just updated to Kotlin 1.6.10 (was 1.4.32) and Serialization 1.3.2 (was 1.1.0) I'm getting a runtime error in my tests when trying to serialize a sealed class:
Copy code
java.lang.NoSuchMethodError: 'void kotlinx.serialization.internal.ObjectSerializer.<init>(java.lang.String, java.lang.Object, java.lang.annotation.Annotation[])'
Inside`kotlinx.serialization.internal.ObjectSerializer`, I see the constructor. (It's scoped
internal
, not sure how scoping rules apply here, given the code is generated)
Copy code
@PublishedApi
@OptIn(ExperimentalSerializationApi::class)
internal class ObjectSerializer<T : Any>(serialName: String, private val objectInstance: T) : KSerializer<T> {

    @PublishedApi // See comment in SealedClassSerializer
    internal constructor(
        serialName: String,
        objectInstance: T,
        classAnnotations: Array<Annotation>
    ) : this(serialName, objectInstance) {
        _annotations = classAnnotations.asList()
    }
Here's the heriachy:
Copy code
@Serializable
sealed class SerializableTypedValue

@Serializable
data class SerializableTypedInstance(
   val typeName: String,
   val value: SerializableTypedValue,
   val dataSourceId: String
) : SerializableTypedValue() {
And the full stack trace:
Copy code
java.lang.NoSuchMethodError: 'void kotlinx.serialization.internal.ObjectSerializer.<init>(java.lang.String, java.lang.Object, java.lang.annotation.Annotation[])'

	at io.vyne.models.SerializableTypedValue$Companion$$cachedSerializer$delegate$1.invoke(SerializableTypedInstance.kt:119)
	at io.vyne.models.SerializableTypedValue$Companion$$cachedSerializer$delegate$1.invoke(SerializableTypedInstance.kt:119)
	at kotlin.SafePublicationLazyImpl.getValue(LazyJVM.kt:107)
	at io.vyne.models.SerializableTypedValue$Companion.serializer(SerializableTypedInstance.kt:119)
	at io.vyne.models.SerializableTypedInstance.write$Self(SerializableTypedInstance.kt:52)
	at io.vyne.models.SerializableTypedInstance$$serializer.serialize(SerializableTypedInstance.kt:52)
	at io.vyne.models.SerializableTypedInstance$$serializer.serialize(SerializableTypedInstance.kt:52)
	at kotlinx.serialization.encoding.Encoder$DefaultImpls.encodeSerializableValue(Encoding.kt:259)
	at kotlinx.serialization.encoding.AbstractEncoder.encodeSerializableValue(AbstractEncoder.kt:18)
	at kotlinx.serialization.cbor.internal.CborWriter.encodeSerializableValue(Encoding.kt:73)
	at kotlinx.serialization.cbor.Cbor.encodeToByteArray(Cbor.kt:46)
	at io.vyne.models.SerializableTypedInstance.toBytes(SerializableTypedInstance.kt:265)
Another key point: The failing test invokes serialization code from a different module from where the serializers are declared. Interestingly, if I move the test to the same module, same code, it passes.