compose-multiplatform icon indicating copy to clipboard operation
compose-multiplatform copied to clipboard

Compose Web + kotlinx.serialization + Kotlin 1.7.10 JS IR with serializable typealias: "IllegalStateException: IdSignature clash"

Open OliverO2 opened this issue 3 years ago • 0 comments

Commit 5dc4f1d9d9d19505836cbe0250f1b7752aae6851 states:

Since kotlin 1.5.30, kotlinx.serialization plugin is forced to run its transformations before any other plugin. This made compose and kotlinx.serialization compatible, [...]

However, the following code fails to compile for JS IR. Replacing the typealias EventSequenceID by its underlying type Int makes it work.

Build script

plugins {
    kotlin("multiplatform") version "1.7.10"
    kotlin("plugin.serialization") version "1.7.10"
    id("org.jetbrains.compose") version "1.2.0-alpha01-dev745"
}

repositories {
    mavenCentral()
    maven("https://maven.pkg.jetbrains.space/public/p/compose/dev")
}

kotlin {
    js(IR) {
        browser()
    }

    sourceSets {
        val jsMain by getting {
            dependencies {
                implementation(compose.runtime)
                implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.3.3")
            }
        }
    }
}

Code in JS source set

import kotlinx.serialization.Serializable

typealias EventSequenceID = Int

@Serializable
class Event(val sequenceID: EventSequenceID)

Stack trace

java.lang.IllegalStateException: IdSignature clash: /EventSequenceID|null[0]; Existed declaration TYPEALIAS name:EventSequenceID visibility:public expandedType:kotlin.Int clashed with new TYPEALIAS name:EventSequenceID visibility:public expandedType:kotlin.Int
	at org.jetbrains.kotlin.ir.backend.js.lower.serialization.ir.JsUniqIdClashTracker.commit(JsDeclarationTable.kt:27)
	at org.jetbrains.kotlin.backend.common.serialization.GlobalDeclarationTable.computeSignatureByDeclaration(DeclarationTable.kt:48)
	at org.jetbrains.kotlin.backend.common.serialization.DeclarationTable.computeSignatureByDeclaration(DeclarationTable.kt:83)
	at org.jetbrains.kotlin.backend.common.serialization.DeclarationTable.signatureByDeclaration(DeclarationTable.kt:92)
	at org.jetbrains.kotlin.backend.common.serialization.IrFileSerializer.protoIdSignature(IrFileSerializer.kt:290)
	at org.jetbrains.kotlin.backend.common.serialization.IrFileSerializer.serializeIrSymbol(IrFileSerializer.kt:353)
	at org.jetbrains.kotlin.backend.common.serialization.IrFileSerializer.serializeIrTypeAbbreviation(IrFileSerializer.kt:406)
	at org.jetbrains.kotlin.backend.common.serialization.IrFileSerializer.serializeSimpleType(IrFileSerializer.kt:395)
	at org.jetbrains.kotlin.backend.common.serialization.IrFileSerializer.serializeIrTypeData(IrFileSerializer.kt:427)
	at org.jetbrains.kotlin.backend.common.serialization.IrFileSerializer.serializeIrType(IrFileSerializer.kt:494)
	at org.jetbrains.kotlin.backend.common.serialization.IrFileSerializer.serializeExpression(IrFileSerializer.kt:1005)
	at org.jetbrains.kotlin.backend.common.serialization.IrFileSerializer.serializeIrVariable(IrFileSerializer.kt:1226)
	at org.jetbrains.kotlin.backend.common.serialization.IrFileSerializer.serializeDeclaration(IrFileSerializer.kt:1325)
	at org.jetbrains.kotlin.backend.common.serialization.IrFileSerializer.serializeStatement(IrFileSerializer.kt:1065)
	at org.jetbrains.kotlin.backend.common.serialization.IrFileSerializer.serializeBlockBody(IrFileSerializer.kt:503)
	at org.jetbrains.kotlin.backend.common.serialization.IrFileSerializer.serializeStatement(IrFileSerializer.kt:1071)
	at org.jetbrains.kotlin.backend.common.serialization.IrFileSerializer.serializeIrStatementBody(IrFileSerializer.kt:178)
	at org.jetbrains.kotlin.backend.common.serialization.IrFileSerializer.serializeIrFunctionBase(IrFileSerializer.kt:1151)
	at org.jetbrains.kotlin.backend.common.serialization.IrFileSerializer.serializeIrFunction(IrFileSerializer.kt:1164)
	at org.jetbrains.kotlin.backend.common.serialization.IrFileSerializer.serializeDeclaration(IrFileSerializer.kt:1321)
	at org.jetbrains.kotlin.backend.common.serialization.IrFileSerializer.serializeIrClass(IrFileSerializer.kt:1244)
	at org.jetbrains.kotlin.backend.common.serialization.IrFileSerializer.serializeDeclaration(IrFileSerializer.kt:1329)
	at org.jetbrains.kotlin.backend.common.serialization.IrFileSerializer.serializeIrClass(IrFileSerializer.kt:1244)
	at org.jetbrains.kotlin.backend.common.serialization.IrFileSerializer.serializeDeclaration(IrFileSerializer.kt:1329)
	at org.jetbrains.kotlin.backend.common.serialization.IrFileSerializer.serializeIrFileImpl(IrFileSerializer.kt:1430)
	at org.jetbrains.kotlin.backend.common.serialization.IrFileSerializer.access$serializeIrFileImpl(IrFileSerializer.kt:115)
	at org.jetbrains.kotlin.backend.common.serialization.IrFileSerializer$serializeIrFile$1.invoke(IrFileSerializer.kt:1410)
	at org.jetbrains.kotlin.backend.common.serialization.IrFileSerializer$serializeIrFile$1.invoke(IrFileSerializer.kt:1409)
	at org.jetbrains.kotlin.backend.common.serialization.signature.PublicIdSignatureComputer.inFile(IdSignatureSerializer.kt:45)
	at org.jetbrains.kotlin.backend.common.serialization.signature.IdSignatureSerializer.inFile(IdSignatureSerializer.kt:229)
	at org.jetbrains.kotlin.backend.common.serialization.DeclarationTable.inFile(DeclarationTable.kt:62)
	at org.jetbrains.kotlin.backend.common.serialization.IrFileSerializer.serializeIrFile(IrFileSerializer.kt:1409)
	at org.jetbrains.kotlin.backend.common.serialization.IrModuleSerializer.serializeIrFile(IrModuleSerializer.kt:28)
	at org.jetbrains.kotlin.backend.common.serialization.IrModuleSerializer.serializedIrModule(IrModuleSerializer.kt:35)
	at org.jetbrains.kotlin.ir.backend.js.KlibKt.serializeModuleIntoKlib(klib.kt:723)
	at org.jetbrains.kotlin.ir.backend.js.KlibKt.generateKLib(klib.kt:222)
	at org.jetbrains.kotlin.ir.backend.js.KlibKt.generateKLib$default(klib.kt:190)
	at org.jetbrains.kotlin.cli.js.K2JsIrCompiler.doExecute(K2JsIrCompiler.kt:281)
	at org.jetbrains.kotlin.cli.js.K2JSCompiler.doExecute(K2JSCompiler.java:183)
	at org.jetbrains.kotlin.cli.js.K2JSCompiler.doExecute(K2JSCompiler.java:72)
	at org.jetbrains.kotlin.cli.common.CLICompiler.execImpl(CLICompiler.kt:94)
	at org.jetbrains.kotlin.cli.common.CLICompiler.execImpl(CLICompiler.kt:43)
	at org.jetbrains.kotlin.cli.common.CLITool.exec(CLITool.kt:101)
	at org.jetbrains.kotlin.incremental.IncrementalJsCompilerRunner.runCompiler(IncrementalJsCompilerRunner.kt:208)
	at org.jetbrains.kotlin.incremental.IncrementalJsCompilerRunner.runCompiler(IncrementalJsCompilerRunner.kt:83)
	at org.jetbrains.kotlin.incremental.IncrementalCompilerRunner.compileIncrementally(IncrementalCompilerRunner.kt:366)
	at org.jetbrains.kotlin.incremental.IncrementalCompilerRunner.compileIncrementally$default(IncrementalCompilerRunner.kt:311)
	at org.jetbrains.kotlin.incremental.IncrementalCompilerRunner.rebuild(IncrementalCompilerRunner.kt:110)
	at org.jetbrains.kotlin.incremental.IncrementalCompilerRunner.compileImpl(IncrementalCompilerRunner.kt:200)
	at org.jetbrains.kotlin.incremental.IncrementalCompilerRunner.compile(IncrementalCompilerRunner.kt:75)
	at org.jetbrains.kotlin.incremental.IncrementalCompilerRunner.compile$default(IncrementalCompilerRunner.kt:65)
	at org.jetbrains.kotlin.daemon.CompileServiceImplBase.execJsIncrementalCompiler(CompileServiceImpl.kt:566)
	at org.jetbrains.kotlin.daemon.CompileServiceImplBase.access$execJsIncrementalCompiler(CompileServiceImpl.kt:101)
	at org.jetbrains.kotlin.daemon.CompileServiceImpl.compile(CompileServiceImpl.kt:1830)
	at jdk.internal.reflect.GeneratedMethodAccessor102.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)

Related

Previous issues were reporting an IdSignature clash, but under broader conditions (on every serializable class):

  • #738
  • #885
  • https://github.com/Kotlin/kotlinx.serialization/issues/1454

The above cases did not reproduce with this issue's build environment, so I suppose these can be considered resolved.

OliverO2 avatar Jul 19 '22 12:07 OliverO2