Skip to content

Compiler Exception when defining a serializer for a data class in another gradle project #532

Open
@mdietrichstein

Description

@mdietrichstein

I am trying to define an external serializer for a data class (Data) 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

It works if the data class is defined in the same gradle module as the serializer.

To Reproduce
Check out https://github.com/mdietrichstein/bug_repro_kotlinx.serialization_gradle_multiproject_ext_serializer and run ./gradlew clean test

Expected behavior
The compiler executes successfully

Environment

  • Kotlin version: 1.3.31 and 1.3.41
  • Library version: 0.11.0 and 0.11.1
  • Kotlin platforms: Android
  • Gradle version: 5.4.1
  • Other relevant context: Ubuntu 18.04 and MacOSX

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions