Marc Dietrichstein
08/10/2019, 8:29 AMData
) which is defined in another gradle module (subproject) and the result is the following exception:
Caused by: java.lang.IllegalStateException: Class Data have constructor parameters which are not properties and therefore it is not serializable automatically
at org.jetbrains.kotlinx.serialization.compiler.backend.common.SerializerCodegen.checkSerializability(SerializerCodegen.kt:38)
at org.jetbrains.kotlinx.serialization.compiler.backend.common.SerializerCodegen.generateSerializableClassPropertyIfNeeded(SerializerCodegen.kt:106)
at org.jetbrains.kotlinx.serialization.compiler.backend.common.SerializerCodegen.generate(SerializerCodegen.kt:44)
at org.jetbrains.kotlinx.serialization.compiler.backend.jvm.SerializerCodegenImpl$Companion.generateSerializerExtensions(SerializerCodegenImpl.kt:49)
at org.jetbrains.kotlinx.serialization.compiler.extensions.SerializationCodegenExtension.generateClassSyntheticParts(SerializationCodegenExtension.kt:30)
at org.jetbrains.kotlin.codegen.ImplementationBodyCodegen.generateSyntheticPartsAfterBody(ImplementationBodyCodegen.java:438)
at org.jetbrains.kotlin.codegen.MemberCodegen.generate(MemberCodegen.java:132)
at org.jetbrains.kotlin.codegen.MemberCodegen.genClassOrObject(MemberCodegen.java:302)
at org.jetbrains.kotlin.codegen.MemberCodegen.genClassOrObject(MemberCodegen.java:286)
at org.jetbrains.kotlin.codegen.PackageCodegenImpl.generateClassesAndObjectsInFile(PackageCodegenImpl.java:118)
at org.jetbrains.kotlin.codegen.PackageCodegenImpl.generateFile(PackageCodegenImpl.java:137)
at org.jetbrains.kotlin.codegen.PackageCodegenImpl.generate(PackageCodegenImpl.java:68)
... 44 more
Everything works if the data class is defined in the same gradle module as the serializer though. Has anyone here experienced this as well?Fudge
08/10/2019, 9:40 AMMarc Dietrichstein
08/10/2019, 9:51 AMdata class Data(val a: Int, val b: Int)
Marc Dietrichstein
08/10/2019, 9:52 AMimport junit.framework.Assert.assertEquals
import kotlinx.serialization.Serializer
import kotlinx.serialization.json.Json
import kotlinx.serialization.json.JsonConfiguration
import org.junit.Test
@Serializer(forClass = Data::class)
object ExtExternalDataSerializer
class ExternalSerializerTest {
@Test
fun triggerBug() {
val json = Json(JsonConfiguration.Stable.copy(unquoted = true))
val data = Data(1, 2)
assertEquals("{a:1,b:2}", json.stringify(ExtExternalDataSerializer, data))
assertEquals(data, Json.parse(ExtExternalDataSerializer, "{a:1,b:2}"))
}
}
Dominaezzz
08/10/2019, 2:00 PMMarc Dietrichstein
08/10/2019, 4:03 PM