kotlinx.serialization icon indicating copy to clipboard operation
kotlinx.serialization copied to clipboard

NoSuchElementException in IR

Open InsanusMokrassar opened this issue 3 years ago • 12 comments
trafficstars

Currently in one of my projects I am getting NoSuchElementException error in compile time. Unfortunatelly, I am even do not know exactly which code is lead to the error.

  • Kotlin version:1.6.21
  • Library version: 1.3.3
  • Kotlin platforms: Multiplatform (compile error in JS IR)
  • Gradle version: 7.4.2 (wrapper)

InsanusMokrassar avatar May 18 '22 09:05 InsanusMokrassar

Error stacktrace:

> Task :postssystem.features.auth.client:compileKotlinJs FAILED
e: java.util.NoSuchElementException: Collection contains no element matching the predicate.
        at org.jetbrains.kotlinx.serialization.compiler.backend.ir.IrBuilderExtension$DefaultImpls.createLazyProperty(GeneratorHelpers.kt:1419)
        at org.jetbrains.kotlinx.serialization.compiler.backend.ir.SerializableCompanionIrGenerator.createLazyProperty(SerializableCompanionIrGenerator.kt:35)
        at org.jetbrains.kotlinx.serialization.compiler.backend.ir.SerializableCompanionIrGenerator.generateLazySerializerGetter(SerializableCompanionIrGenerator.kt:114)
        at org.jetbrains.kotlinx.serialization.compiler.backend.common.SerializableCompanionCodegen.generate(SerializableCompanionCodegen.kt:37)
        at org.jetbrains.kotlinx.serialization.compiler.backend.ir.SerializableCompanionIrGenerator$Companion.generate(SerializableCompanionIrGenerator.kt:50)
        at org.jetbrains.kotlinx.serialization.compiler.extensions.SerializerClassLowering.lower(SerializationLoweringExtension.kt:60)
        at org.jetbrains.kotlinx.serialization.compiler.extensions.SerializationLoweringExtensionKt$runOnFileInOrder$1.visitClass(SerializationLoweringExtension.kt:36)
        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:30)
        at org.jetbrains.kotlinx.serialization.compiler.extensions.SerializationLoweringExtensionKt$runOnFileInOrder$1.visitClass(SerializationLoweringExtension.kt:30)
        at org.jetbrains.kotlin.ir.declarations.IrClass.accept(IrClass.kt:57)
        at org.jetbrains.kotlin.ir.declarations.IrClass.acceptChildren(IrClass.kt:62)
        at org.jetbrains.kotlin.ir.visitors.IrElementVisitorVoidKt.acceptChildrenVoid(IrElementVisitorVoid.kt:287)
        at org.jetbrains.kotlinx.serialization.compiler.extensions.SerializationLoweringExtensionKt$runOnFileInOrder$1.visitClass(SerializationLoweringExtension.kt:37)
        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:30)
        at org.jetbrains.kotlinx.serialization.compiler.extensions.SerializationLoweringExtensionKt$runOnFileInOrder$1.visitClass(SerializationLoweringExtension.kt:30)
        at org.jetbrains.kotlin.ir.declarations.IrClass.accept(IrClass.kt:57)
        at org.jetbrains.kotlin.ir.declarations.impl.IrFileImpl.acceptChildren(IrFileImpl.kt:84)
        at org.jetbrains.kotlin.ir.visitors.IrElementVisitorVoidKt.acceptChildrenVoid(IrElementVisitorVoid.kt:287)
        at org.jetbrains.kotlinx.serialization.compiler.extensions.SerializationLoweringExtensionKt$runOnFileInOrder$1.visitElement(SerializationLoweringExtension.kt:32)
        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:30)
        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:30)
        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:30)
        at org.jetbrains.kotlinx.serialization.compiler.extensions.SerializationLoweringExtensionKt$runOnFileInOrder$1.visitFile(SerializationLoweringExtension.kt:30)
        at org.jetbrains.kotlin.ir.declarations.impl.IrFileImpl.accept(IrFileImpl.kt:81)
        at org.jetbrains.kotlin.ir.visitors.IrElementVisitorVoidKt.acceptVoid(IrElementVisitorVoid.kt:283)
        at org.jetbrains.kotlinx.serialization.compiler.extensions.SerializationLoweringExtensionKt.runOnFileInOrder(SerializationLoweringExtension.kt:30)
        at org.jetbrains.kotlinx.serialization.compiler.extensions.SerializationLoweringExtension.generate(SerializationLoweringExtension.kt:77)
        at org.jetbrains.kotlin.ir.backend.js.KlibKt.generateModuleFragmentWithPlugins$lambda-23(klib.kt:590)
        at org.jetbrains.kotlin.psi2ir.Psi2IrTranslator.generateModuleFragment(Psi2IrTranslator.kt:99)
        at org.jetbrains.kotlin.psi2ir.Psi2IrTranslator.generateModuleFragment$default(Psi2IrTranslator.kt:75)
        at org.jetbrains.kotlin.ir.backend.js.KlibKt.generateModuleFragmentWithPlugins(klib.kt:595)
        at org.jetbrains.kotlin.ir.backend.js.KlibKt.generateIrForKlibSerialization(klib.kt:184)
        at org.jetbrains.kotlin.ir.backend.js.KlibKt.generateKLib(klib.kt:219)
        at org.jetbrains.kotlin.ir.backend.js.KlibKt.generateKLib$default(klib.kt:201)
        at org.jetbrains.kotlin.cli.js.K2JsIrCompiler.doExecute(K2JsIrCompiler.kt:269)
        at org.jetbrains.kotlin.cli.js.K2JSCompiler.doExecute(K2JSCompiler.java:178)
        at org.jetbrains.kotlin.cli.js.K2JSCompiler.doExecute(K2JSCompiler.java:71)
        at org.jetbrains.kotlin.cli.common.CLICompiler.execImpl(CLICompiler.kt:91)
        at org.jetbrains.kotlin.cli.common.CLICompiler.execImpl(CLICompiler.kt:43)
        at org.jetbrains.kotlin.cli.common.CLITool.exec(CLITool.kt:93)
        at org.jetbrains.kotlin.incremental.IncrementalJsCompilerRunner.runCompiler(IncrementalJsCompilerRunner.kt:200)
        at org.jetbrains.kotlin.incremental.IncrementalJsCompilerRunner.runCompiler(IncrementalJsCompilerRunner.kt:77)
        at org.jetbrains.kotlin.incremental.IncrementalCompilerRunner.compileIncrementally(IncrementalCompilerRunner.kt:367)
        at org.jetbrains.kotlin.incremental.IncrementalCompilerRunner.compileIncrementally$default(IncrementalCompilerRunner.kt:309)
        at org.jetbrains.kotlin.incremental.IncrementalCompilerRunner.compileImpl$rebuild(IncrementalCompilerRunner.kt:115)
        at org.jetbrains.kotlin.incremental.IncrementalCompilerRunner.compileImpl(IncrementalCompilerRunner.kt:167)
        at org.jetbrains.kotlin.incremental.IncrementalCompilerRunner.compile(IncrementalCompilerRunner.kt:77)
        at org.jetbrains.kotlin.incremental.IncrementalCompilerRunner.compile$default(IncrementalCompilerRunner.kt:68)
        at org.jetbrains.kotlin.daemon.CompileServiceImplBase.execJsIncrementalCompiler(CompileServiceImpl.kt:565)
        at org.jetbrains.kotlin.daemon.CompileServiceImplBase.access$execJsIncrementalCompiler(CompileServiceImpl.kt:101)
        at org.jetbrains.kotlin.daemon.CompileServiceImpl.compile(CompileServiceImpl.kt:1807)
        at jdk.internal.reflect.GeneratedMethodAccessor104.invoke(Unknown Source)
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.base/java.lang.reflect.Method.invoke(Method.java:566)
        at java.rmi/sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:359)
        at java.rmi/sun.rmi.transport.Transport$1.run(Transport.java:200)
        at java.rmi/sun.rmi.transport.Transport$1.run(Transport.java:197)
        at java.base/java.security.AccessController.doPrivileged(Native Method)
        at java.rmi/sun.rmi.transport.Transport.serviceCall(Transport.java:196)
        at java.rmi/sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:562)
        at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:796)
        at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.lambda$run$0(TCPTransport.java:677)
        at java.base/java.security.AccessController.doPrivileged(Native Method)
        at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:676)
        at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
        at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
        at java.base/java.lang.Thread.run(Thread.java:829)

InsanusMokrassar avatar May 18 '22 09:05 InsanusMokrassar

The erro comes from here: https://github.com/JetBrains/kotlin/blob/8de4eb798c67cc9231cb7425d90695800f40d2ab/plugins/kotlin-serialization/kotlin-serialization-compiler/src/org/jetbrains/kotlinx/serialization/compiler/backend/ir/GeneratorHelpers.kt#L121-L124. But I don't know what those lines do.

altavir avatar May 18 '22 17:05 altavir

Here is the project at the state when it has compiler error.

Here I have fixed the build via removing of @Serializable annotation for objects and replace sealed classes with sealed interfaces

InsanusMokrassar avatar May 18 '22 17:05 InsanusMokrassar

I'm also running into this error unexpectedly

The stacktrace/error message doesn't provide a whole lot to go off of, so I'm a bit stuck and unable to move forward 😔

ankushg avatar Jun 09 '22 20:06 ankushg

Also Running into this problem on 1.7.0

darussian avatar Jun 14 '22 18:06 darussian

Also getting the same issue on my project. Is there anything else we need to provide to help?

Reedyuk avatar Jun 29 '22 09:06 Reedyuk

@Reedyuk I was unable to find a solution other than what @InsanusMokrassar offered above, which is using sealed interfaces instead of classes.

darussian avatar Jun 29 '22 13:06 darussian

for clarity i was able to reproduce in Kotlin 1.6.21 and serialization 1.3.0, so seems to be a pre-existing issue for a while.

Reedyuk avatar Jun 29 '22 13:06 Reedyuk

Hi, sorry for the delayed answer.

@InsanusMokrassar , could you rollback the changes to the state when the build fell with NoSuchElementException and insert such code into any file in the project where the error appears (eg :postssystem.features.auth.client)?

@Suppress("unused")
private val lazy = LazyThreadSafetyMode.PUBLICATION

*any use of the LazyThreadSafetyMode.PUBLICATION from the function body will also do, even in code that will never be executed.

shanshin avatar Aug 13 '22 10:08 shanshin

Fixed in 1.8.0

shanshin avatar Aug 19 '22 11:08 shanshin

@shanshin How can I find the reason of the error to fix it until 1.8.0. I did a large refactoring, so there is not really a commit history to find the reason.

benkuly avatar Aug 25 '22 09:08 benkuly

Hi, sorry for the delayed answer.

@InsanusMokrassar , could you rollback the changes to the state when the build fell with NoSuchElementException and insert such code into any file in the project where the error appears (eg :postssystem.features.auth.client)?

@Suppress("unused")
private val lazy = LazyThreadSafetyMode.PUBLICATION

*any use of the LazyThreadSafetyMode.PUBLICATION from the function body will also do, even in code that will never be executed.

Hello, I have tried this way (in the other project) and that fixed issue for me, thanks. Is there any chance to see this fix in 1.7.20?

UPD: Sorry for late answer

InsanusMokrassar avatar Aug 27 '22 07:08 InsanusMokrassar

Fixed in 1.8.0

sandwwraith avatar Sep 27 '22 16:09 sandwwraith

Hi, sorry for the delayed answer.

@InsanusMokrassar , could you rollback the changes to the state when the build fell with NoSuchElementException and insert such code into any file in the project where the error appears (eg :postssystem.features.auth.client)?

@Suppress("unused")
private val lazy = LazyThreadSafetyMode.PUBLICATION

*any use of the LazyThreadSafetyMode.PUBLICATION from the function body will also do, even in code that will never be executed.

EDIT: Dupe with https://github.com/Kotlin/kotlinx.serialization/issues/1630

Can't fix. I'm facing this issue after added @Serializer to my serializers for external polymorphic serialization.

java.util.NoSuchElementException: Collection contains no element matching the predicate.
	at org.jetbrains.kotlinx.serialization.compiler.backend.ir.SerializerIrGenerator$generateLoad$1.invoke(SerializerIrGenerator.kt:684)
	at org.jetbrains.kotlinx.serialization.compiler.backend.ir.SerializerIrGenerator$generateLoad$1.invoke(SerializerIrGenerator.kt:324)
	at org.jetbrains.kotlinx.serialization.compiler.backend.ir.IrBuilderExtension$DefaultImpls.contributeFunction(GeneratorHelpers.kt:69)
	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:63)
	at org.jetbrains.kotlinx.serialization.compiler.backend.ir.SerializerIrGenerator.generateLoad(SerializerIrGenerator.kt:324)
	at org.jetbrains.kotlinx.serialization.compiler.backend.common.SerializerCodegen.generateLoadIfNeeded(SerializerCodegen.kt:116)
	at org.jetbrains.kotlinx.serialization.compiler.backend.common.SerializerCodegen.generate(SerializerCodegen.kt:38)
	at org.jetbrains.kotlinx.serialization.compiler.backend.ir.SerializerIrGenerator$Companion.generate(SerializerIrGenerator.kt:573)

SettingDust avatar Oct 04 '22 02:10 SettingDust