You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
I’ve been puzzling over this crash for almost 24 hours...
Problem: Generated Code Can’t Reliably See Generated Declarations in Kotlin/Native
When generated code in one module refers to generated code in another module, that can cause exceptions when deserializing the two modules together.
java.lang.IllegalStateException: Expecting descriptor for app.cash.zipline.internal.bridge/SuspendCallback.Companion.Adapter|null[0])
18:28:11 e: java.lang.IllegalStateException: Expecting descriptor for app.cash.zipline.internal.bridge/SuspendCallback.Companion.Adapter|null[0]
18:28:11 at org.jetbrains.kotlin.backend.konan.serialization.KonanIrLinker$KonanCachedLibraryModuleDeserializer.tryDeserializeIrSymbol(KonanIrlinker.kt:644)
18:28:11 at org.jetbrains.kotlin.backend.common.serialization.BasicIrModuleDeserializer.deserializeIrSymbol(BasicIrModuleDeserializer.kt:111)
18:28:11 at org.jetbrains.kotlin.backend.common.serialization.FileDeserializationState$symbolDeserializer$3.invoke(IrFileDeserializer.kt:88)
18:28:11 at org.jetbrains.kotlin.backend.common.serialization.FileDeserializationState$symbolDeserializer$3.invoke(IrFileDeserializer.kt:77)
18:28:11 at org.jetbrains.kotlin.backend.common.serialization.IrSymbolDeserializer.deserializeIrSymbolData(IrSymbolDeserializer.kt:67)
18:28:11 at org.jetbrains.kotlin.backend.common.serialization.IrSymbolDeserializer.deserializeIrSymbol(IrSymbolDeserializer.kt:84)
18:28:11 at org.jetbrains.kotlin.backend.common.serialization.IrDeclarationDeserializer.deserializeIrSymbolAndRemap$ir_serialization_common(IrDeclarationDeserializer.kt:211)
18:28:11 at org.jetbrains.kotlin.backend.common.serialization.IrDeclarationDeserializer.deserializeSimpleType(IrDeclarationDeserializer.kt:122)
18:28:11 at org.jetbrains.kotlin.backend.common.serialization.IrDeclarationDeserializer.deserializeIrTypeData(IrDeclarationDeserializer.kt:181)
18:28:11 at org.jetbrains.kotlin.backend.common.serialization.IrDeclarationDeserializer.deserializeIrType(IrDeclarationDeserializer.kt:97)
18:28:11 at org.jetbrains.kotlin.backend.common.serialization.IrDeclarationDeserializer.deserializeIrVariable(IrDeclarationDeserializer.kt:622)
18:28:11 at org.jetbrains.kotlin.backend.common.serialization.IrDeclarationDeserializer.deserializeDeclaration(IrDeclarationDeserializer.kt:791)
18:28:11 at org.jetbrains.kotlin.backend.common.serialization.IrDeclarationDeserializer.deserializeDeclaration$default(IrDeclarationDeserializer.kt:782)
18:28:11 at org.jetbrains.kotlin.backend.common.serialization.IrBodyDeserializer.deserializeStatement$ir_serialization_common(IrBodyDeserializer.kt:136)
18:28:11 at org.jetbrains.kotlin.backend.common.serialization.IrBodyDeserializer.deserializeBlockBody(IrBodyDeserializer.kt:95)
18:28:11 at org.jetbrains.kotlin.backend.common.serialization.IrBodyDeserializer.deserializeStatement$ir_serialization_common(IrBodyDeserializer.kt:130)
18:28:11 at org.jetbrains.kotlin.backend.common.serialization.IrDeclarationDeserializer.deserializeStatementBody(IrDeclarationDeserializer.kt:547)
18:28:11 at org.jetbrains.kotlin.backend.common.serialization.IrDeclarationDeserializer$withDeserializedIrFunctionBase$1$1$1$1.invoke(IrDeclarationDeserializer.kt:575)
18:28:11 at org.jetbrains.kotlin.backend.common.serialization.IrDeclarationDeserializer$withDeserializedIrFunctionBase$1$1$1$1.invoke(IrDeclarationDeserializer.kt:564)
18:28:11 at org.jetbrains.kotlin.backend.common.serialization.IrDeclarationDeserializer.withBodyGuard(IrDeclarationDeserializer.kt:509)
18:28:11 at org.jetbrains.kotlin.backend.common.serialization.IrDeclarationDeserializer.access$withBodyGuard(IrDeclarationDeserializer.kt:64)
18:28:11 at org.jetbrains.kotlin.backend.common.serialization.IrDeclarationDeserializer.deserializeIrFunction$ir_serialization_common(IrDeclarationDeserializer.kt:1099)
18:28:11 at org.jetbrains.kotlin.backend.common.serialization.IrDeclarationDeserializer.deserializeDeclaration(IrDeclarationDeserializer.kt:788)
18:28:11 at org.jetbrains.kotlin.backend.common.serialization.IrDeclarationDeserializer.deserializeDeclaration$default(IrDeclarationDeserializer.kt:782)
18:28:11 at org.jetbrains.kotlin.backend.common.serialization.IrDeclarationDeserializer.deserializeIrClass(IrDeclarationDeserializer.kt:375)
18:28:11 at org.jetbrains.kotlin.backend.common.serialization.IrDeclarationDeserializer.deserializeDeclaration(IrDeclarationDeserializer.kt:787)
18:28:11 at org.jetbrains.kotlin.backend.common.serialization.IrDeclarationDeserializer.deserializeDeclaration$default(IrDeclarationDeserializer.kt:782)
18:28:11 at org.jetbrains.kotlin.backend.common.serialization.IrDeclarationDeserializer.deserializeIrClass(IrDeclarationDeserializer.kt:375)
18:28:11 at org.jetbrains.kotlin.backend.common.serialization.IrDeclarationDeserializer.deserializeDeclaration(IrDeclarationDeserializer.kt:787)
18:28:11 at org.jetbrains.kotlin.backend.common.serialization.IrDeclarationDeserializer.deserializeDeclaration$default(IrDeclarationDeserializer.kt:782)
18:28:11 at org.jetbrains.kotlin.backend.common.serialization.IrDeclarationDeserializer.deserializeIrClass(IrDeclarationDeserializer.kt:375)
18:28:11 at org.jetbrains.kotlin.backend.common.serialization.IrDeclarationDeserializer.deserializeDeclaration(IrDeclarationDeserializer.kt:787)
18:28:11 at org.jetbrains.kotlin.backend.common.serialization.IrDeclarationDeserializer.deserializeDeclaration$default(IrDeclarationDeserializer.kt:782)
18:28:11 at org.jetbrains.kotlin.backend.common.serialization.IrFileDeserializer.deserializeDeclaration(IrFileDeserializer.kt:40)
18:28:11 at org.jetbrains.kotlin.backend.common.serialization.FileDeserializationState.deserializeAllFileReachableTopLevel(IrFileDeserializer.kt:135)
18:28:11 at org.jetbrains.kotlin.backend.common.serialization.BasicIrModuleDeserializer$ModuleDeserializationState.deserializeReachableDeclarations(BasicIrModuleDeserializer.kt:190)
18:28:11 at org.jetbrains.kotlin.backend.common.serialization.BasicIrModuleDeserializer.deserializeReachableDeclarations(BasicIrModuleDeserializer.kt:158)
18:28:11 at org.jetbrains.kotlin.backend.common.serialization.KotlinIrLinker.deserializeAllReachableTopLevels(KotlinIrLinker.kt:111)
18:28:11 at org.jetbrains.kotlin.backend.common.serialization.KotlinIrLinker.findDeserializedDeclarationForSymbol(KotlinIrLinker.kt:129)
18:28:11 at org.jetbrains.kotlin.backend.common.serialization.KotlinIrLinker.deserializeOrResolveDeclaration(KotlinIrLinker.kt:169)
18:28:11 at org.jetbrains.kotlin.backend.common.serialization.KotlinIrLinker.getDeclaration(KotlinIrLinker.kt:158)
18:28:11 at org.jetbrains.kotlin.ir.util.ExternalDependenciesGeneratorKt.getDeclaration(ExternalDependenciesGenerator.kt:57)
18:28:11 at org.jetbrains.kotlin.ir.util.ExternalDependenciesGenerator.generateUnboundSymbolsAsDependencies(ExternalDependenciesGenerator.kt:44)
18:28:11 at org.jetbrains.kotlin.psi2ir.generators.ModuleGenerator.generateUnboundSymbolsAsDependencies(ModuleGenerator.kt:52)
18:28:11 at org.jetbrains.kotlin.psi2ir.Psi2IrTranslator.generateModuleFragment(Psi2IrTranslator.kt:92)
18:28:11 at org.jetbrains.kotlin.psi2ir.Psi2IrTranslator.generateModuleFragment$default(Psi2IrTranslator.kt:75)
18:28:11 at org.jetbrains.kotlin.backend.konan.PsiToIrKt.psiToIr(PsiToIr.kt:187)
18:28:11 at org.jetbrains.kotlin.backend.konan.ToplevelPhasesKt$psiToIrPhase$1.invoke(ToplevelPhases.kt:120)
18:28:11 at org.jetbrains.kotlin.backend.konan.ToplevelPhasesKt$psiToIrPhase$1.invoke(ToplevelPhases.kt:118)
18:28:11 at org.jetbrains.kotlin.backend.common.phaser.PhaseBuildersKt$namedOpUnitPhase$1.invoke(PhaseBuilders.kt:96)
18:28:11 at org.jetbrains.kotlin.backend.common.phaser.PhaseBuildersKt$namedOpUnitPhase$1.invoke(PhaseBuilders.kt:94)
18:28:11 at org.jetbrains.kotlin.backend.common.phaser.NamedCompilerPhase.invoke(CompilerPhase.kt:96)
18:28:11 at org.jetbrains.kotlin.backend.common.phaser.CompositePhase.invoke(PhaseBuilders.kt:29)
18:28:11 at org.jetbrains.kotlin.backend.common.phaser.NamedCompilerPhase.invoke(CompilerPhase.kt:96)
18:28:11 at org.jetbrains.kotlin.backend.common.phaser.CompilerPhaseKt.invokeToplevel(CompilerPhase.kt:43)
18:28:11 at org.jetbrains.kotlin.backend.konan.KonanDriverKt.runTopLevelPhases(KonanDriver.kt:40)
18:28:11 at org.jetbrains.kotlin.cli.bc.K2Native.doExecute(K2Native.kt:94)
18:28:11 at org.jetbrains.kotlin.cli.bc.K2Native.doExecute(K2Native.kt:37)
18:28:11 at org.jetbrains.kotlin.cli.common.CLICompiler.execImpl(CLICompiler.kt:99)
18:28:11 at org.jetbrains.kotlin.cli.common.CLICompiler.execImpl(CLICompiler.kt:47)
18:28:11 at org.jetbrains.kotlin.cli.common.CLITool.exec(CLITool.kt:101)
18:28:11 at org.jetbrains.kotlin.cli.common.CLITool.exec(CLITool.kt:79)
18:28:11 at org.jetbrains.kotlin.cli.common.CLITool.exec(CLITool.kt:43)
18:28:11 at org.jetbrains.kotlin.cli.common.CLITool$Companion.doMainNoExit(CLITool.kt:179)
18:28:11 at org.jetbrains.kotlin.cli.bc.K2Native$Companion$mainNoExitWithGradleRenderer$1.invoke(K2Native.kt:412)
18:28:11 at org.jetbrains.kotlin.cli.bc.K2Native$Companion$mainNoExitWithGradleRenderer$1.invoke(K2Native.kt:411)
18:28:11 at org.jetbrains.kotlin.util.UtilKt.profileIf(Util.kt:22)
18:28:11 at org.jetbrains.kotlin.util.UtilKt.profile(Util.kt:16)
18:28:11 at org.jetbrains.kotlin.cli.bc.K2Native$Companion.mainNoExitWithGradleRenderer(K2Native.kt:411)
18:28:11 at org.jetbrains.kotlin.cli.bc.K2NativeKt.mainNoExitWithGradleRenderer(K2Native.kt:666)
18:28:11 at org.jetbrains.kotlin.cli.utilities.MainKt$daemonMain$1$1.invoke(main.kt:70)
18:28:11 at org.jetbrains.kotlin.cli.utilities.MainKt$daemonMain$1$1.invoke(main.kt:70)
18:28:11 at org.jetbrains.kotlin.cli.utilities.MainKt.mainImpl(main.kt:19)
18:28:11 at org.jetbrains.kotlin.cli.utilities.MainKt.daemonMain(main.kt:70)
18:28:11 at jdk.internal.reflect.GeneratedMethodAccessor492.invoke(Unknown Source)
18:28:11 at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
18:28:11 at java.base/java.lang.reflect.Method.invoke(Method.java:566)
18:28:11 at org.jetbrains.kotlin.compilerRunner.KotlinToolRunner.runInProcess(KotlinToolRunner.kt:140)
18:28:11 at org.jetbrains.kotlin.compilerRunner.KotlinToolRunner.run(KotlinToolRunner.kt:82)
18:28:11 at org.jetbrains.kotlin.gradle.tasks.KotlinNativeLink.compile(KotlinNativeTasks.kt:660)
18:28:11 at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
18:28:11 at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
18:28:11 at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
18:28:11 at java.base/java.lang.reflect.Method.invoke(Method.java:566)
18:28:11 at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:104)
18:28:11 at org.gradle.api.internal.project.taskfactory.StandardTaskAction.doExecute(StandardTaskAction.java:58)
18:28:11 at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:51)
18:28:11 at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:29)
18:28:11 at org.gradle.api.internal.tasks.execution.TaskExecution$3.run(TaskExecution.java:242)
18:28:11 at org.gradle.internal.operations.DefaultBuildOperationRunner$1.execute(DefaultBuildOperationRunner.java:29)
18:28:11 at org.gradle.internal.operations.DefaultBuildOperationRunner$1.execute(DefaultBuildOperationRunner.java:26)
18:28:11 at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:66)
18:28:11 at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:59)
18:28:11 at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:157)
18:28:11 at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:59)
18:28:11 at org.gradle.internal.operations.DefaultBuildOperationRunner.run(DefaultBuildOperationRunner.java:47)
18:28:11 at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:68)
18:28:11 at org.gradle.api.internal.tasks.execution.TaskExecution.executeAction(TaskExecution.java:227)
18:28:11 at org.gradle.api.internal.tasks.execution.TaskExecution.executeActions(TaskExecution.java:210)
18:28:11 at org.gradle.api.internal.tasks.execution.TaskExecution.executeWithPreviousOutputFiles(TaskExecution.java:193)
18:28:11 at org.gradle.api.internal.tasks.execution.TaskExecution.execute(TaskExecution.java:171)
18:28:11 at org.gradle.internal.execution.steps.ExecuteStep.executeInternal(ExecuteStep.java:89)
18:28:11 at org.gradle.internal.execution.steps.ExecuteStep.access$000(ExecuteStep.java:40)
18:28:11 at org.gradle.internal.execution.steps.ExecuteStep$1.call(ExecuteStep.java:53)
18:28:11 at org.gradle.internal.execution.steps.ExecuteStep$1.call(ExecuteStep.java:50)
18:28:11 at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:204)
18:28:11 at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:199)
18:28:11 at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:66)
18:28:11 at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:59)
18:28:11 at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:157)
18:28:11 at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:59)
18:28:11 at org.gradle.internal.operations.DefaultBuildOperationRunner.call(DefaultBuildOperationRunner.java:53)
18:28:11 at org.gradle.internal.operations.DefaultBuildOperationExecutor.call(DefaultBuildOperationExecutor.java:73)
18:28:11 at org.gradle.internal.execution.steps.ExecuteStep.execute(ExecuteStep.java:50)
18:28:11 at org.gradle.internal.execution.steps.ExecuteStep.execute(ExecuteStep.java:40)
18:28:11 at org.gradle.internal.execution.steps.RemovePreviousOutputsStep.execute(RemovePreviousOutputsStep.java:68)
18:28:11 at org.gradle.internal.execution.steps.RemovePreviousOutputsStep.execute(RemovePreviousOutputsStep.java:38)
18:28:11 at org.gradle.internal.execution.steps.ResolveInputChangesStep.execute(ResolveInputChangesStep.java:48)
18:28:11 at org.gradle.internal.execution.steps.ResolveInputChangesStep.execute(ResolveInputChangesStep.java:36)
18:28:11 at org.gradle.internal.execution.steps.CancelExecutionStep.execute(CancelExecutionStep.java:41)
18:28:11 at org.gradle.internal.execution.steps.TimeoutStep.executeWithoutTimeout(TimeoutStep.java:74)
18:28:11 at org.gradle.internal.execution.steps.TimeoutStep.execute(TimeoutStep.java:55)
18:28:11 at org.gradle.internal.execution.steps.CreateOutputsStep.execute(CreateOutputsStep.java:51)
18:28:11 at org.gradle.internal.execution.steps.CreateOutputsStep.execute(CreateOutputsStep.java:29)
18:28:11 at org.gradle.internal.execution.steps.CaptureStateAfterExecutionStep.execute(CaptureStateAfterExecutionStep.java:61)
18:28:11 at org.gradle.internal.execution.steps.CaptureStateAfterExecutionStep.execute(CaptureStateAfterExecutionStep.java:42)
18:28:11 at org.gradle.internal.execution.steps.BroadcastChangingOutputsStep.execute(BroadcastChangingOutputsStep.java:60)
18:28:11 at org.gradle.internal.execution.steps.BroadcastChangingOutputsStep.execute(BroadcastChangingOutputsStep.java:27)
18:28:11 at org.gradle.internal.execution.steps.BuildCacheStep.executeWithoutCache(BuildCacheStep.java:180)
18:28:11 at org.gradle.internal.execution.steps.BuildCacheStep.lambda$execute$1(BuildCacheStep.java:75)
18:28:11 at org.gradle.internal.Either$Right.fold(Either.java:175)
18:28:11 at org.gradle.internal.execution.caching.CachingState.fold(CachingState.java:59)
18:28:11 at org.gradle.internal.execution.steps.BuildCacheStep.execute(BuildCacheStep.java:73)
18:28:11 at org.gradle.internal.execution.steps.BuildCacheStep.execute(BuildCacheStep.java:48)
18:28:11 at org.gradle.internal.execution.steps.StoreExecutionStateStep.execute(StoreExecutionStateStep.java:36)
18:28:11 at org.gradle.internal.execution.steps.StoreExecutionStateStep.execute(StoreExecutionStateStep.java:25)
18:28:11 at org.gradle.internal.execution.steps.RecordOutputsStep.execute(RecordOutputsStep.java:36)
18:28:11 at org.gradle.internal.execution.steps.RecordOutputsStep.execute(RecordOutputsStep.java:22)
18:28:11 at org.gradle.internal.execution.steps.SkipUpToDateStep.executeBecause(SkipUpToDateStep.java:110)
18:28:11 at org.gradle.internal.execution.steps.SkipUpToDateStep.lambda$execute$2(SkipUpToDateStep.java:56)
18:28:11 at java.base/java.util.Optional.orElseGet(Optional.java:369)
18:28:11 at org.gradle.internal.execution.steps.SkipUpToDateStep.execute(SkipUpToDateStep.java:56)
18:28:11 at org.gradle.internal.execution.steps.SkipUpToDateStep.execute(SkipUpToDateStep.java:38)
18:28:11 at org.gradle.internal.execution.steps.ResolveChangesStep.execute(ResolveChangesStep.java:73)
18:28:11 at org.gradle.internal.execution.steps.ResolveChangesStep.execute(ResolveChangesStep.java:44)
18:28:11 at org.gradle.internal.execution.steps.legacy.MarkSnapshottingInputsFinishedStep.execute(MarkSnapshottingInputsFinishedStep.java:37)
18:28:11 at org.gradle.internal.execution.steps.legacy.MarkSnapshottingInputsFinishedStep.execute(MarkSnapshottingInputsFinishedStep.java:27)
18:28:11 at org.gradle.internal.execution.steps.ResolveCachingStateStep.execute(ResolveCachingStateStep.java:89)
18:28:11 at org.gradle.internal.execution.steps.ResolveCachingStateStep.execute(ResolveCachingStateStep.java:50)
18:28:11 at org.gradle.internal.execution.steps.ValidateStep.execute(ValidateStep.java:114)
18:28:11 at org.gradle.internal.execution.steps.ValidateStep.execute(ValidateStep.java:57)
18:28:11 at org.gradle.internal.execution.steps.CaptureStateBeforeExecutionStep.execute(CaptureStateBeforeExecutionStep.java:76)
18:28:11 at org.gradle.internal.execution.steps.CaptureStateBeforeExecutionStep.execute(CaptureStateBeforeExecutionStep.java:50)
18:28:11 at org.gradle.internal.execution.steps.SkipEmptyWorkStep.executeWithNoEmptySources(SkipEmptyWorkStep.java:249)
18:28:11 at org.gradle.internal.execution.steps.SkipEmptyWorkStep.executeWithNoEmptySources(SkipEmptyWorkStep.java:204)
18:28:11 at org.gradle.internal.execution.steps.SkipEmptyWorkStep.execute(SkipEmptyWorkStep.java:83)
18:28:11 at org.gradle.internal.execution.steps.SkipEmptyWorkStep.execute(SkipEmptyWorkStep.java:54)
18:28:11 at org.gradle.internal.execution.steps.RemoveUntrackedExecutionStateStep.execute(RemoveUntrackedExecutionStateStep.java:32)
18:28:11 at org.gradle.internal.execution.steps.RemoveUntrackedExecutionStateStep.execute(RemoveUntrackedExecutionStateStep.java:21)
18:28:11 at org.gradle.internal.execution.steps.legacy.MarkSnapshottingInputsStartedStep.execute(MarkSnapshottingInputsStartedStep.java:38)
18:28:11 at org.gradle.internal.execution.steps.LoadPreviousExecutionStateStep.execute(LoadPreviousExecutionStateStep.java:43)
18:28:11 at org.gradle.internal.execution.steps.LoadPreviousExecutionStateStep.execute(LoadPreviousExecutionStateStep.java:31)
18:28:11 at org.gradle.internal.execution.steps.AssignWorkspaceStep.lambda$execute$0(AssignWorkspaceStep.java:40)
18:28:11 at org.gradle.api.internal.tasks.execution.TaskExecution$4.withWorkspace(TaskExecution.java:287)
18:28:11 at org.gradle.internal.execution.steps.AssignWorkspaceStep.execute(AssignWorkspaceStep.java:40)
18:28:11 at org.gradle.internal.execution.steps.AssignWorkspaceStep.execute(AssignWorkspaceStep.java:30)
18:28:11 at org.gradle.internal.execution.steps.IdentityCacheStep.execute(IdentityCacheStep.java:37)
18:28:11 at org.gradle.internal.execution.steps.IdentityCacheStep.execute(IdentityCacheStep.java:27)
18:28:11 at org.gradle.internal.execution.steps.IdentifyStep.execute(IdentifyStep.java:44)
18:28:11 at org.gradle.internal.execution.steps.IdentifyStep.execute(IdentifyStep.java:33)
18:28:11 at org.gradle.internal.execution.impl.DefaultExecutionEngine$1.execute(DefaultExecutionEngine.java:76)
18:28:11 at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeIfValid(ExecuteActionsTaskExecuter.java:144)
18:28:11 at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:133)
18:28:11 at org.gradle.api.internal.tasks.execution.CleanupStaleOutputsExecuter.execute(CleanupStaleOutputsExecuter.java:77)
18:28:11 at org.gradle.api.internal.tasks.execution.FinalizePropertiesTaskExecuter.execute(FinalizePropertiesTaskExecuter.java:46)
18:28:11 at org.gradle.api.internal.tasks.execution.ResolveTaskExecutionModeExecuter.execute(ResolveTaskExecutionModeExecuter.java:51)
18:28:11 at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:57)
18:28:11 at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:56)
18:28:11 at org.gradle.api.internal.tasks.execution.CatchExceptionTaskExecuter.execute(CatchExceptionTaskExecuter.java:36)
18:28:11 at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.executeTask(EventFiringTaskExecuter.java:77)
18:28:11 at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.call(EventFiringTaskExecuter.java:55)
18:28:11 at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.call(EventFiringTaskExecuter.java:52)
18:28:11 at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:204)
18:28:11 at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:199)
18:28:11 at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:66)
18:28:11 at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:59)
18:28:11 at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:157)
18:28:11 at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:59)
18:28:11 at org.gradle.internal.operations.DefaultBuildOperationRunner.call(DefaultBuildOperationRunner.java:53)
18:28:11 at org.gradle.internal.operations.DefaultBuildOperationExecutor.call(DefaultBuildOperationExecutor.java:73)
18:28:11 at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter.execute(EventFiringTaskExecuter.java:52)
18:28:11 at org.gradle.execution.plan.LocalTaskNodeExecutor.execute(LocalTaskNodeExecutor.java:74)
18:28:11 at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$InvokeNodeExecutorsAction.execute(DefaultTaskExecutionGraph.java:333)
18:28:11 at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$InvokeNodeExecutorsAction.execute(DefaultTaskExecutionGraph.java:320)
18:28:11 at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.execute(DefaultTaskExecutionGraph.java:313)
18:28:11 at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.execute(DefaultTaskExecutionGraph.java:299)
18:28:11 at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.lambda$run$0(DefaultPlanExecutor.java:143)
18:28:11 at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.execute(DefaultPlanExecutor.java:227)
18:28:11 at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.executeNextNode(DefaultPlanExecutor.java:218)
18:28:11 at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.run(DefaultPlanExecutor.java:140)
18:28:11 at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64)
18:28:11 at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:48)
18:28:11 at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
18:28:11 at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
18:28:11 at java.base/java.lang.Thread.run(Thread.java:834)
Exploration of the cause
I’ve learned that the Kotlin/Native compiler is working against us somewhat. Here’s what it does:
Reads source code in as a PSI model.
Converts it to an IR model
Runs transforms on the IR model
Emits mostly all IR, but some symbols still as the original PSI
To confirm this, set these breakpoints:
LazyClassDescriptor.init(), to capture the compilation of SuspendCallback. (Breakpoint condition is name.asString().contains("Callback").)
ZiplineIrGenerationExtension.generate(), to capture generating an adapter for SuspendCallback. (Breakpoint condition is "Callback" in declaration.name.asString())
DescriptorSerializer.classProto() to capture serializing a Klib for SuspendCallback. (Breakpoint condition is "SuspendCallback" in classDescriptor.name.asString())
Next, execute zipline:macosArm64Test in a debugger. This is easy enough to do in the Gradle sidebar.
The breakpoints hit in the order above. On the first breakpoint, the unsubstitutedInnerClassesScope.invoke() function does not include a Companion member because it won’t be generated until breakpoint 2. That means the companion remains missing when serializing the Klib in step 3.
This is a problem because our Kotlin compiler-generated code (the nested Companion and Adapter) refers to other generated code to lookup required serializers. But since the klib doesn’t include these declarations, compilation crashes with the exception above.
Mitigation for Zipline
Referring to generated code from generated code is super convenient! And losing that is very annoying for our model.
But I think I can mitigate by looking up serializers with contextual serialization, rather than having them available statically. This will change generated code from emitting something like this:
To emitting something like this:
val adapter:MyService<String> =MyService.Companion.Adapter(String.serializer())
to this:
val adapter:MyService<String> =SerializersModule.requireContextual(MyService::class, String.serializer())
We already do this for certain types, so it’s not a particularly big change. The biggest drawback is we’ll need to decide which adapters to preregister as available contextual ones. Hopefully not everything.
The text was updated successfully, but these errors were encountered:
So for Compose we have to put this cacheKind=none Gradle property to make it work for native and JetBrains couldn't remember why and didn't remember exactly what it did. Maybe try adding that? See Redwood or Molecule repos for the exact property.
I’ve been puzzling over this crash for almost 24 hours...
Problem: Generated Code Can’t Reliably See Generated Declarations in Kotlin/Native
When generated code in one module refers to generated code in another module, that can cause exceptions when deserializing the two modules together.
java.lang.IllegalStateException: Expecting descriptor for app.cash.zipline.internal.bridge/SuspendCallback.Companion.Adapter|null[0])
Exploration of the cause
I’ve learned that the Kotlin/Native compiler is working against us somewhat. Here’s what it does:
To confirm this, set these breakpoints:
SuspendCallback
. (Breakpoint condition isname.asString().contains("Callback")
.)SuspendCallback
. (Breakpoint condition is"Callback" in declaration.name.asString()
)SuspendCallback
. (Breakpoint condition is"SuspendCallback" in classDescriptor.name.asString()
)Next, execute
zipline:macosArm64Test
in a debugger. This is easy enough to do in the Gradle sidebar.The breakpoints hit in the order above. On the first breakpoint, the
unsubstitutedInnerClassesScope.invoke()
function does not include aCompanion
member because it won’t be generated until breakpoint 2. That means the companion remains missing when serializing the Klib in step 3.This is a problem because our Kotlin compiler-generated code (the nested
Companion
andAdapter
) refers to other generated code to lookup required serializers. But since the klib doesn’t include these declarations, compilation crashes with the exception above.Mitigation for Zipline
Referring to generated code from generated code is super convenient! And losing that is very annoying for our model.
But I think I can mitigate by looking up serializers with contextual serialization, rather than having them available statically. This will change generated code from emitting something like this:
To emitting something like this:
to this:
We already do this for certain types, so it’s not a particularly big change. The biggest drawback is we’ll need to decide which adapters to preregister as available contextual ones. Hopefully not everything.
The text was updated successfully, but these errors were encountered: