Kotlinx.serialization: exception: kotlin.NotImplementedError: An operation is not implemented: enum and context serializer

Created on 20 Oct 2018  路  4Comments  路  Source: Kotlin/kotlinx.serialization

Hello guys! I'm trying to compile my mpp project but I can't :( I've tried with jsonparser, also with 0.8.13...

The error is:

```exception: kotlin.NotImplementedError: An operation is not implemented: enum and context serializer
at org.jetbrains.kotlinx.serialization.compiler.backend.ir.SerializerIrGenerator.serializerInstance(SerializerIrGenerator.kt:141)
at org.jetbrains.kotlinx.serialization.compiler.backend.ir.SerializerIrGenerator.serializerInstance(SerializerIrGenerator.kt:144)
at org.jetbrains.kotlinx.serialization.compiler.backend.ir.SerializerIrGenerator.access$serializerInstance(SerializerIrGenerator.kt:47)
at org.jetbrains.kotlinx.serialization.compiler.backend.ir.SerializerIrGenerator$generateSave$1.invoke(SerializerIrGenerator.kt:202)
at org.jetbrains.kotlinx.serialization.compiler.backend.ir.SerializerIrGenerator$generateSave$1.invoke(SerializerIrGenerator.kt:47)
at org.jetbrains.kotlinx.serialization.compiler.backend.ir.IrBuilderExtension$DefaultImpls.contributeFunction(GeneratorHelpers.kt:53)
at org.jetbrains.kotlinx.serialization.compiler.backend.ir.SerializerIrGenerator.contributeFunction(SerializerIrGenerator.kt:47)
at org.jetbrains.kotlinx.serialization.compiler.backend.ir.IrBuilderExtension$DefaultImpls.contributeFunction$default(GeneratorHelpers.kt:43)
at org.jetbrains.kotlinx.serialization.compiler.backend.ir.SerializerIrGenerator.generateSave(SerializerIrGenerator.kt:167)
at org.jetbrains.kotlinx.serialization.compiler.backend.common.SerializerCodegen.generateSaveIfNeeded(SerializerCodegen.kt:101)
at org.jetbrains.kotlinx.serialization.compiler.backend.common.SerializerCodegen.generate(SerializerCodegen.kt:45)
at org.jetbrains.kotlinx.serialization.compiler.backend.ir.SerializerIrGenerator$Companion.generate(SerializerIrGenerator.kt:384)
at org.jetbrains.kotlinx.serialization.compiler.extensions.SerializerClassLowering.lower(SerializationLoweringExtension.kt:47)
at org.jetbrains.kotlinx.serialization.compiler.extensions.SerializationLoweringExtensionKt$runOnFileInOrder$1.visitClass(SerializationLoweringExtension.kt:34)
at org.jetbrains.kotlin.ir.visitors.IrElementVisitorVoid$DefaultImpls.visitClass(IrElementVisitorVoid.kt:44)
at org.jetbrains.kotlinx.serialization.compiler.extensions.SerializationLoweringExtensionKt$runOnFileInOrder$1.visitClass(SerializationLoweringExtension.kt:28)
at org.jetbrains.kotlinx.serialization.compiler.extensions.SerializationLoweringExtensionKt$runOnFileInOrder$1.visitClass(SerializationLoweringExtension.kt:28)
at org.jetbrains.kotlin.ir.declarations.impl.IrClassImpl.accept(IrClassImpl.kt:102)
at org.jetbrains.kotlin.ir.declarations.impl.IrClassImpl.acceptChildren(IrClassImpl.kt:107)
at org.jetbrains.kotlin.ir.visitors.IrElementVisitorVoidKt.acceptChildrenVoid(IrElementVisitorVoid.kt:251)
at org.jetbrains.kotlinx.serialization.compiler.extensions.SerializationLoweringExtensionKt$runOnFileInOrder$1.visitClass(SerializationLoweringExtension.kt:35)
at org.jetbrains.kotlin.ir.visitors.IrElementVisitorVoid$DefaultImpls.visitClass(IrElementVisitorVoid.kt:44)
at org.jetbrains.kotlinx.serialization.compiler.extensions.SerializationLoweringExtensionKt$runOnFileInOrder$1.visitClass(SerializationLoweringExtension.kt:28)
at org.jetbrains.kotlinx.serialization.compiler.extensions.SerializationLoweringExtensionKt$runOnFileInOrder$1.visitClass(SerializationLoweringExtension.kt:28)
at org.jetbrains.kotlin.ir.declarations.impl.IrClassImpl.accept(IrClassImpl.kt:102)
at org.jetbrains.kotlin.ir.declarations.impl.IrFileImpl.acceptChildren(IrFileImpl.kt:79)
at org.jetbrains.kotlin.ir.visitors.IrElementVisitorVoidKt.acceptChildrenVoid(IrElementVisitorVoid.kt:251)
at org.jetbrains.kotlinx.serialization.compiler.extensions.SerializationLoweringExtensionKt$runOnFileInOrder$1.visitElement(SerializationLoweringExtension.kt:30)
at org.jetbrains.kotlin.ir.visitors.IrElementVisitorVoid$DefaultImpls.visitPackageFragment(IrElementVisitorVoid.kt:30)
at org.jetbrains.kotlinx.serialization.compiler.extensions.SerializationLoweringExtensionKt$runOnFileInOrder$1.visitPackageFragment(SerializationLoweringExtension.kt:28)
at org.jetbrains.kotlin.ir.visitors.IrElementVisitorVoid$DefaultImpls.visitFile(IrElementVisitorVoid.kt:37)
at org.jetbrains.kotlinx.serialization.compiler.extensions.SerializationLoweringExtensionKt$runOnFileInOrder$1.visitFile(SerializationLoweringExtension.kt:28)
at org.jetbrains.kotlin.ir.visitors.IrElementVisitorVoid$DefaultImpls.visitFile(IrElementVisitorVoid.kt:38)
at org.jetbrains.kotlinx.serialization.compiler.extensions.SerializationLoweringExtensionKt$runOnFileInOrder$1.visitFile(SerializationLoweringExtension.kt:28)
at org.jetbrains.kotlinx.serialization.compiler.extensions.SerializationLoweringExtensionKt$runOnFileInOrder$1.visitFile(SerializationLoweringExtension.kt:28)
at org.jetbrains.kotlin.ir.declarations.impl.IrFileImpl.accept(IrFileImpl.kt:76)
at org.jetbrains.kotlin.ir.visitors.IrElementVisitorVoidKt.acceptVoid(IrElementVisitorVoid.kt:247)
at org.jetbrains.kotlinx.serialization.compiler.extensions.SerializationLoweringExtensionKt.runOnFileInOrder(SerializationLoweringExtension.kt:28)
at org.jetbrains.kotlinx.serialization.compiler.extensions.SerializationLoweringExtension.generate(SerializationLoweringExtension.kt:58)
at org.jetbrains.kotlin.backend.konan.KonanDriverKt$runTopLevelPhases$3.invoke(KonanDriver.kt:77)
at org.jetbrains.kotlin.backend.konan.KonanDriverKt$runTopLevelPhases$3.invoke(KonanDriver.kt)
at org.jetbrains.kotlin.backend.konan.PhaseManager$phase$$inlined$with$lambda$1.invoke(KonanPhases.kt:135)
at org.jetbrains.kotlin.backend.konan.PhaseManager$phase$$inlined$with$lambda$1.invoke(KonanPhases.kt:109)
at org.jetbrains.kotlin.konan.util.UtilKt.profileIf(Util.kt:37)
at org.jetbrains.kotlin.backend.konan.PhaseManager.phase(KonanPhases.kt:134)
at org.jetbrains.kotlin.backend.konan.KonanDriverKt.runTopLevelPhases(KonanDriver.kt:74)
at org.jetbrains.kotlin.cli.bc.K2Native.doExecute(K2Native.kt:82)
at org.jetbrains.kotlin.cli.bc.K2Native.doExecute(K2Native.kt:38)
at org.jetbrains.kotlin.cli.common.CLICompiler.execImpl(CLICompiler.java:96)
at org.jetbrains.kotlin.cli.common.CLICompiler.execImpl(CLICompiler.java:52)
at org.jetbrains.kotlin.cli.common.CLITool.exec(CLITool.kt:93)
at org.jetbrains.kotlin.cli.common.CLITool.exec(CLITool.kt:71)
at org.jetbrains.kotlin.cli.common.CLITool.exec(CLITool.kt:39)
at org.jetbrains.kotlin.cli.common.CLITool$Companion.doMainNoExit(CLITool.kt:202)
at org.jetbrains.kotlin.cli.common.CLITool$Companion.doMain(CLITool.kt:194)
at org.jetbrains.kotlin.cli.bc.K2Native$Companion$main$1.invoke(K2Native.kt:212)
at org.jetbrains.kotlin.cli.bc.K2Native$Companion$main$1.invoke(K2Native.kt:203)
at org.jetbrains.kotlin.konan.util.UtilKt.profileIf(Util.kt:37)
at org.jetbrains.kotlin.konan.util.UtilKt.profile(Util.kt:31)
at org.jetbrains.kotlin.cli.bc.K2Native$Companion.main(K2Native.kt:205)
at org.jetbrains.kotlin.cli.bc.K2NativeKt.main(K2Native.kt:217)
at org.jetbrains.kotlin.cli.utilities.MainKt.main(main.kt:16)

Task :ios:compileDebugIos_arm64KotlinNative FAILED

ios module build.gradle:

```apply plugin: 'kotlin-platform-native'

configurations {
    compilerPlugin
}

dependencies {
    expectedBy project(':common')
    implementation "io.ktor:ktor-client-ios:$ktor_version"
    implementation "io.ktor:ktor-client-json-ios:$ktor_version"
    implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core-native:$coroutines_version"
    implementation "org.jetbrains.kotlinx:kotlinx-serialization-runtime-native:$serialization_version"
    // implementation "org.jetbrains.kotlinx:jsonparser-native:0.6.1"
    compilerPlugin "org.jetbrains.kotlin:kotlin-serialization-unshaded:$serialization_plugin"
}

def pluginPath = configurations.compilerPlugin.files.first().canonicalPath
def pluginArgument = '-Xplugin=' + pluginPath

sourceSets {
    main {
        component {
            targets = ['ios_x64', 'ios_arm64']
            outputKinds = [FRAMEWORK]
            extraOpts '-Xdisable=devirtualization', '-linker-options', '-iphoneos_version_min 9.0.0', pluginArgument

        }
    }
}

gradle.properties (with versions)

```org.gradle.parallel=true

kotlin

kotlin_version=1.3.0-rc-131
kotlin_native_version=1.3.0-rc-131
kotlin.incremental.multiplatform=true

kotlin libraries

coroutines_version=0.30.2-eap13
serialization_version=0.7.3-eap-13
serialization_plugin=1.3.0-rc-26

android

INCLUDE_ANDROID=true
gradle_android_version=3.1.3
anko_version=0.10.5

backend

squash_version=0.2.3
ktor_version=1.0.0-beta-1

Arrow

arrow_version="0.7.3"
```

The project is available here: https://github.com/sergiocasero/votlin-app/tree/feature/ios_talks

In next release question

Most helpful comment

@Dallanosm Impossibility to override enum serializer looks like a bug in plugin: #252. As a workaround, use @Serializable(TrackSerializer::class) on a track property inside Talk class.

All 4 comments

Well, error message means that enums can't be serialized in Native for now. Context serializer usually enables when no pre-compiled serializer is found, so make sure that every class in your model is also @Serializable or properties have annotation @Serializable(with=...).

Hi,
I have the same error, I have created this branch to see the problem.

iOS Serializer problem branch

Thanks for advance.

@Dallanosm Impossibility to override enum serializer looks like a bug in plugin: #252. As a workaround, use @Serializable(TrackSerializer::class) on a track property inside Talk class.

The workaround works!!! thanks @sandwwraith

Was this page helpful?
0 / 5 - 0 ratings