-
-
Notifications
You must be signed in to change notification settings - Fork 67
Closed
Labels
Description
Updated Kotlin to 1.9.2 and KSP to 1.9.20-1.0.14 recently and the JS target in a KMP project is now failing with the below stacktrace. It only fails for the JS target; the other targets build fine if I remove JS.
e: java.lang.AssertionError: Rewrite at slice LEXICAL_SCOPE key: ANNOTATION_ENTRY old value: org.jetbrains.kotlin.resolve.scopes.LexicalScope$Base@52de31fa@1390293498 new value: org.jetbrains.kotlin.resolve.scopes.LexicalScope$Base@3e8875f7@1049130487
<File name: KotlinInjectExample.kt, Physical: true>
<ELEMENT>@Component</ELEMENT>
abstract class AppComponent {
abstract val repo: Repository
@Provides
protected fun jsonParser(): JsonParser = RealJsonParser()
protected val RealHttp.bind: Http
@Provides get() = this
companion object
}
at org.jetbrains.kotlin.com.intellij.openapi.diagnostic.DefaultLogger.error(DefaultLogger.java:54)
at org.jetbrains.kotlin.com.intellij.openapi.diagnostic.Logger.error(Logger.java:182)
at org.jetbrains.kotlin.util.slicedMap.Slices.logErrorAboutRewritingNonEqualObjects(Slices.java:158)
at org.jetbrains.kotlin.util.slicedMap.Slices.access$000(Slices.java:30)
at org.jetbrains.kotlin.util.slicedMap.Slices$1.processRewrite(Slices.java:42)
at org.jetbrains.kotlin.util.slicedMap.SlicedMapImpl.put(SlicedMapImpl.java:65)
at org.jetbrains.kotlin.resolve.BindingTraceContext.record(BindingTraceContext.java:150)
at org.jetbrains.kotlin.storage.LockBasedLazyResolveStorageManager$LockProtectedTrace$record$1.invoke(LockBasedLazyResolveStorageManager.kt:70)
at org.jetbrains.kotlin.storage.LockBasedLazyResolveStorageManager$LockProtectedTrace$record$1.invoke(LockBasedLazyResolveStorageManager.kt:70)
at org.jetbrains.kotlin.storage.LockBasedStorageManager.compute(LockBasedStorageManager.java:290)
at org.jetbrains.kotlin.storage.LockBasedLazyResolveStorageManager$LockProtectedTrace.record(LockBasedLazyResolveStorageManager.kt:70)
at org.jetbrains.kotlin.resolve.calls.CallResolver.resolveCallForConstructor(CallResolver.java:380)
at org.jetbrains.kotlin.resolve.calls.CallResolver.resolveFunctionCall(CallResolver.java:334)
at org.jetbrains.kotlin.resolve.calls.CallResolver.resolveFunctionCall(CallResolver.java:303)
at org.jetbrains.kotlin.resolve.AnnotationResolverImpl.resolveAnnotationCall(AnnotationResolverImpl.java:167)
at com.google.devtools.ksp.symbol.impl.binary.KSAnnotationDescriptorImplKt.getValueArguments(KSAnnotationDescriptorImpl.kt:200)
at com.google.devtools.ksp.symbol.impl.binary.KSAnnotationDescriptorImplKt.createKSValueArguments(KSAnnotationDescriptorImpl.kt:237)
at com.google.devtools.ksp.symbol.impl.kotlin.KSAnnotationImpl$arguments$2.invoke(KSAnnotationImpl.kt:83)
at com.google.devtools.ksp.symbol.impl.kotlin.KSAnnotationImpl$arguments$2.invoke(KSAnnotationImpl.kt:82)
at kotlin.SynchronizedLazyImpl.getValue(LazyJVM.kt:74)
at com.google.devtools.ksp.symbol.impl.kotlin.KSAnnotationImpl.getArguments(KSAnnotationImpl.kt:82)
at com.google.devtools.ksp.visitor.KSValidateVisitor.visitAnnotation(KSValidateVisitor.kt:50)
at com.google.devtools.ksp.visitor.KSValidateVisitor.visitAnnotation(KSValidateVisitor.kt:5)
at com.google.devtools.ksp.symbol.impl.kotlin.KSAnnotationImpl.accept(KSAnnotationImpl.kt:110)
at com.google.devtools.ksp.visitor.KSValidateVisitor.visitAnnotated(KSValidateVisitor.kt:40)
at com.google.devtools.ksp.visitor.KSValidateVisitor.visitDeclaration(KSValidateVisitor.kt:23)
at com.google.devtools.ksp.visitor.KSValidateVisitor.visitClassDeclaration(KSValidateVisitor.kt:67)
at com.google.devtools.ksp.visitor.KSValidateVisitor.visitClassDeclaration(KSValidateVisitor.kt:5)
at com.google.devtools.ksp.symbol.impl.kotlin.KSClassDeclarationImpl.accept(KSClassDeclarationImpl.kt:135)
at me.tatarka.inject.compiler.ksp.InjectProcessor.validate(InjectProcessor.kt:84)
at me.tatarka.inject.compiler.ksp.InjectProcessor.process(InjectProcessor.kt:51)
at com.google.devtools.ksp.AbstractKotlinSymbolProcessingExtension$doAnalysis$8$1.invoke(KotlinSymbolProcessingExtension.kt:305)
at com.google.devtools.ksp.AbstractKotlinSymbolProcessingExtension$doAnalysis$8$1.invoke(KotlinSymbolProcessingExtension.kt:303)
at com.google.devtools.ksp.AbstractKotlinSymbolProcessingExtension.handleException(KotlinSymbolProcessingExtension.kt:409)
at com.google.devtools.ksp.AbstractKotlinSymbolProcessingExtension.doAnalysis(KotlinSymbolProcessingExtension.kt:303)
at org.jetbrains.kotlin.js.analyze.AbstractTopDownAnalyzerFacadeForWeb.analyzeFilesWithGivenTrace(TopDownAnalyzerFacadeForJS.kt:142)
at org.jetbrains.kotlin.js.analyze.AbstractTopDownAnalyzerFacadeForWeb.analyzeFiles(TopDownAnalyzerFacadeForJS.kt:94)
at org.jetbrains.kotlin.ir.backend.js.ModulesStructure$runAnalysis$1.invoke(klib.kt:534)
at org.jetbrains.kotlin.ir.backend.js.ModulesStructure$runAnalysis$1.invoke(klib.kt:533)
at org.jetbrains.kotlin.cli.common.messages.AnalyzerWithCompilerReport.analyzeAndReport(AnalyzerWithCompilerReport.kt:115)
at org.jetbrains.kotlin.ir.backend.js.ModulesStructure.runAnalysis(klib.kt:533)
at org.jetbrains.kotlin.ir.backend.js.PrepareAnalyzedSourceModuleKt.prepareAnalyzedSourceModule(prepareAnalyzedSourceModule.kt:30)
at org.jetbrains.kotlin.ir.backend.js.PrepareAnalyzedSourceModuleKt.prepareAnalyzedSourceModule$default(prepareAnalyzedSourceModule.kt:17)
at org.jetbrains.kotlin.cli.js.K2JsIrCompiler.processSourceModule(K2JsIrCompiler.kt:427)
at org.jetbrains.kotlin.cli.js.K2JsIrCompiler.doExecute(K2JsIrCompiler.kt:273)
at org.jetbrains.kotlin.cli.js.K2JSCompiler.doExecute(K2JSCompiler.java:181)
at org.jetbrains.kotlin.cli.js.K2JSCompiler.doExecute(K2JSCompiler.java:72)
at org.jetbrains.kotlin.cli.common.CLICompiler.execImpl(CLICompiler.kt:104)
at org.jetbrains.kotlin.cli.common.CLICompiler.execImpl(CLICompiler.kt:48)
at org.jetbrains.kotlin.cli.common.CLITool.exec(CLITool.kt:101)
at org.jetbrains.kotlin.daemon.CompileServiceImpl.compile(CompileServiceImpl.kt:1523)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:568)
at java.rmi/sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:360)
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(AccessController.java:712)
at java.rmi/sun.rmi.transport.Transport.serviceCall(Transport.java:196)
at java.rmi/sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:587)
at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:828)
at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.lambda$run$0(TCPTransport.java:705)
at java.base/java.security.AccessController.doPrivileged(AccessController.java:399)
at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:704)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
at java.base/java.lang.Thread.run(Thread.java:833)
Caused by: java.lang.Throwable: Rewrite at slice LEXICAL_SCOPE key: ANNOTATION_ENTRY old value: org.jetbrains.kotlin.resolve.scopes.LexicalScope$Base@52de31fa@1390293498 new value: org.jetbrains.kotlin.resolve.scopes.LexicalScope$Base@3e8875f7@1049130487
<File name: KotlinInjectExample.kt, Physical: true>
<ELEMENT>@Component</ELEMENT>
abstract class AppComponent {
abstract val repo: Repository
@Provides
protected fun jsonParser(): JsonParser = RealJsonParser()
protected val RealHttp.bind: Http
@Provides get() = this
companion object
}
... 67 more
java.lang.AssertionError: Rewrite at slice LEXICAL_SCOPE key: ANNOTATION_ENTRY old value: org.jetbrains.kotlin.resolve.scopes.LexicalScope$Base@52de31fa@1390293498 new value: org.jetbrains.kotlin.resolve.scopes.LexicalScope$Base@3e8875f7@1049130487
<File name: KotlinInjectExample.kt, Physical: true>
<ELEMENT>@Component</ELEMENT>
abstract class AppComponent {
abstract val repo: Repository
@Provides
protected fun jsonParser(): JsonParser = RealJsonParser()
protected val RealHttp.bind: Http
@Provides get() = this
companion object
}
at org.jetbrains.kotlin.com.intellij.openapi.diagnostic.DefaultLogger.error(DefaultLogger.java:54)
at org.jetbrains.kotlin.com.intellij.openapi.diagnostic.Logger.error(Logger.java:182)
at org.jetbrains.kotlin.util.slicedMap.Slices.logErrorAboutRewritingNonEqualObjects(Slices.java:158)
at org.jetbrains.kotlin.util.slicedMap.Slices.access$000(Slices.java:30)
at org.jetbrains.kotlin.util.slicedMap.Slices$1.processRewrite(Slices.java:42)
at org.jetbrains.kotlin.util.slicedMap.SlicedMapImpl.put(SlicedMapImpl.java:65)
at org.jetbrains.kotlin.resolve.BindingTraceContext.record(BindingTraceContext.java:150)
at org.jetbrains.kotlin.storage.LockBasedLazyResolveStorageManager$LockProtectedTrace$record$1.invoke(LockBasedLazyResolveStorageManager.kt:70)
at org.jetbrains.kotlin.storage.LockBasedLazyResolveStorageManager$LockProtectedTrace$record$1.invoke(LockBasedLazyResolveStorageManager.kt:70)
at org.jetbrains.kotlin.storage.LockBasedStorageManager.compute(LockBasedStorageManager.java:290)
at org.jetbrains.kotlin.storage.LockBasedLazyResolveStorageManager$LockProtectedTrace.record(LockBasedLazyResolveStorageManager.kt:70)
at org.jetbrains.kotlin.resolve.calls.CallResolver.resolveCallForConstructor(CallResolver.java:380)
at org.jetbrains.kotlin.resolve.calls.CallResolver.resolveFunctionCall(CallResolver.java:334)
at org.jetbrains.kotlin.resolve.calls.CallResolver.resolveFunctionCall(CallResolver.java:303)
at org.jetbrains.kotlin.resolve.AnnotationResolverImpl.resolveAnnotationCall(AnnotationResolverImpl.java:167)
at com.google.devtools.ksp.symbol.impl.binary.KSAnnotationDescriptorImplKt.getValueArguments(KSAnnotationDescriptorImpl.kt:200)
at com.google.devtools.ksp.symbol.impl.binary.KSAnnotationDescriptorImplKt.createKSValueArguments(KSAnnotationDescriptorImpl.kt:237)
at com.google.devtools.ksp.symbol.impl.kotlin.KSAnnotationImpl$arguments$2.invoke(KSAnnotationImpl.kt:83)
at com.google.devtools.ksp.symbol.impl.kotlin.KSAnnotationImpl$arguments$2.invoke(KSAnnotationImpl.kt:82)
at kotlin.SynchronizedLazyImpl.getValue(LazyJVM.kt:74)
at com.google.devtools.ksp.symbol.impl.kotlin.KSAnnotationImpl.getArguments(KSAnnotationImpl.kt:82)
at com.google.devtools.ksp.visitor.KSValidateVisitor.visitAnnotation(KSValidateVisitor.kt:50)
at com.google.devtools.ksp.visitor.KSValidateVisitor.visitAnnotation(KSValidateVisitor.kt:5)
at com.google.devtools.ksp.symbol.impl.kotlin.KSAnnotationImpl.accept(KSAnnotationImpl.kt:110)
at com.google.devtools.ksp.visitor.KSValidateVisitor.visitAnnotated(KSValidateVisitor.kt:40)
at com.google.devtools.ksp.visitor.KSValidateVisitor.visitDeclaration(KSValidateVisitor.kt:23)
at com.google.devtools.ksp.visitor.KSValidateVisitor.visitClassDeclaration(KSValidateVisitor.kt:67)
at com.google.devtools.ksp.visitor.KSValidateVisitor.visitClassDeclaration(KSValidateVisitor.kt:5)
at com.google.devtools.ksp.symbol.impl.kotlin.KSClassDeclarationImpl.accept(KSClassDeclarationImpl.kt:135)
at me.tatarka.inject.compiler.ksp.InjectProcessor.validate(InjectProcessor.kt:84)
at me.tatarka.inject.compiler.ksp.InjectProcessor.process(InjectProcessor.kt:51)
at com.google.devtools.ksp.AbstractKotlinSymbolProcessingExtension$doAnalysis$8$1.invoke(KotlinSymbolProcessingExtension.kt:305)
at com.google.devtools.ksp.AbstractKotlinSymbolProcessingExtension$doAnalysis$8$1.invoke(KotlinSymbolProcessingExtension.kt:303)
at com.google.devtools.ksp.AbstractKotlinSymbolProcessingExtension.handleException(KotlinSymbolProcessingExtension.kt:409)
at com.google.devtools.ksp.AbstractKotlinSymbolProcessingExtension.doAnalysis(KotlinSymbolProcessingExtension.kt:303)
at org.jetbrains.kotlin.js.analyze.AbstractTopDownAnalyzerFacadeForWeb.analyzeFilesWithGivenTrace(TopDownAnalyzerFacadeForJS.kt:142)
at org.jetbrains.kotlin.js.analyze.AbstractTopDownAnalyzerFacadeForWeb.analyzeFiles(TopDownAnalyzerFacadeForJS.kt:94)
at org.jetbrains.kotlin.ir.backend.js.ModulesStructure$runAnalysis$1.invoke(klib.kt:534)
at org.jetbrains.kotlin.ir.backend.js.ModulesStructure$runAnalysis$1.invoke(klib.kt:533)
at org.jetbrains.kotlin.cli.common.messages.AnalyzerWithCompilerReport.analyzeAndReport(AnalyzerWithCompilerReport.kt:115)
at org.jetbrains.kotlin.ir.backend.js.ModulesStructure.runAnalysis(klib.kt:533)
at org.jetbrains.kotlin.ir.backend.js.PrepareAnalyzedSourceModuleKt.prepareAnalyzedSourceModule(prepareAnalyzedSourceModule.kt:30)
at org.jetbrains.kotlin.ir.backend.js.PrepareAnalyzedSourceModuleKt.prepareAnalyzedSourceModule$default(prepareAnalyzedSourceModule.kt:17)
at org.jetbrains.kotlin.cli.js.K2JsIrCompiler.processSourceModule(K2JsIrCompiler.kt:427)
at org.jetbrains.kotlin.cli.js.K2JsIrCompiler.doExecute(K2JsIrCompiler.kt:273)
at org.jetbrains.kotlin.cli.js.K2JSCompiler.doExecute(K2JSCompiler.java:181)
at org.jetbrains.kotlin.cli.js.K2JSCompiler.doExecute(K2JSCompiler.java:72)
at org.jetbrains.kotlin.cli.common.CLICompiler.execImpl(CLICompiler.kt:104)
at org.jetbrains.kotlin.cli.common.CLICompiler.execImpl(CLICompiler.kt:48)
at org.jetbrains.kotlin.cli.common.CLITool.exec(CLITool.kt:101)
at org.jetbrains.kotlin.daemon.CompileServiceImpl.compile(CompileServiceImpl.kt:1523)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:568)
at java.rmi/sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:360)
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(AccessController.java:712)
at java.rmi/sun.rmi.transport.Transport.serviceCall(Transport.java:196)
at java.rmi/sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:587)
at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:828)
at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.lambda$run$0(TCPTransport.java:705)
at java.base/java.security.AccessController.doPrivileged(AccessController.java:399)
at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:704)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
at java.base/java.lang.Thread.run(Thread.java:833)
Caused by: java.lang.Throwable: Rewrite at slice LEXICAL_SCOPE key: ANNOTATION_ENTRY old value: org.jetbrains.kotlin.resolve.scopes.LexicalScope$Base@52de31fa@1390293498 new value: org.jetbrains.kotlin.resolve.scopes.LexicalScope$Base@3e8875f7@1049130487
<File name: KotlinInjectExample.kt, Physical: true>
<ELEMENT>@Component</ELEMENT>
abstract class AppComponent {
abstract val repo: Repository
@Provides
protected fun jsonParser(): JsonParser = RealJsonParser()
protected val RealHttp.bind: Http
@Provides get() = this
companion object
}
... 67 more
The class it tries to generate is pretty basic, as this is just a POC to integrate Kotlin Inject:
@Component
abstract class AppComponent {
abstract val repo: Repository
@Provides
protected fun jsonParser(): JsonParser = RealJsonParser()
protected val RealHttp.bind: Http
@Provides get() = this
companion object
}
interface Http
interface JsonParser
class RealJsonParser : JsonParser
@Inject
class RealHttp : Http
@Inject
class Api(private val http: Http, private val jsonParser: JsonParser)
@Inject
class Repository(private val api: Api)
Module build.gradle.kts file:
import org.gradle.configurationcache.extensions.capitalized
import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType
plugins {
kotlin("multiplatform")
kotlin("native.cocoapods")
id("org.jetbrains.compose")
id("com.google.devtools.ksp") version "1.9.20-1.0.14"
id("app.cash.sqldelight") version "2.0.0"
id("com.android.library")
}
kotlin {
// Add Android target platform
android()
// Add iOS target platforms
iosX64()
iosArm64()
iosSimulatorArm64()
// Add JS target platform
js(IR).browser()
// Add JVM target platform
jvm("jvm") {
jvmToolchain(17)
}
cocoapods {
version = "1.0.0"
summary = "Some description for the Shared Module"
homepage = "Link to the Shared Module homepage"
ios.deploymentTarget = "14.1"
podfile = project.file("../iosApp/Podfile")
framework {
baseName = "main"
isStatic = true
}
}
sourceSets {
val commonMain by getting {
kotlin.apply {
srcDir("commonMain")
resources.srcDir("commonMain/resources")
}
dependencies {
implementation(project(":kotlin:net:burdu:libs:repository:_gradle_gen:repository"))
implementation("org.jetbrains.compose.animation:animation:1.5.10")
implementation("org.jetbrains.compose.components:components-resources:1.5.10")
implementation("org.jetbrains.compose.foundation:foundation:1.5.10")
implementation("org.jetbrains.compose.material:material:1.5.10")
implementation("org.jetbrains.compose.runtime:runtime:1.5.10")
implementation("org.jetbrains.compose.ui:ui:1.5.10")
implementation("me.tatarka.inject:kotlin-inject-runtime:0.6.3")
}
}
val commonTest by getting {
kotlin.apply {
srcDir("commonTest")
}
}
// Add Android source sets
val androidMain by getting {
kotlin.apply {
srcDir("androidMain")
}
}
// Add Android instrumentation tests source sets
val androidInstrumentedTest by getting {
kotlin.apply {
srcDir("androidTest")
}
}
// Add iOS source sets
val iosX64Main by getting
val iosArm64Main by getting
val iosSimulatorArm64Main by getting
val iosMain by creating {
dependsOn(commonMain)
iosX64Main.dependsOn(this)
iosArm64Main.dependsOn(this)
iosSimulatorArm64Main.dependsOn(this)
}
// Add JS source sets
val jsMain by getting {
kotlin.apply {
srcDir("jsMain")
}
dependencies {
implementation("org.jetbrains.compose.html:html-core:1.5.10")
}
}
val jsTest by getting {
kotlin.apply {
srcDir("jsTest")
}
}
// Add JVM source sets
val jvmMain by getting {
kotlin.apply {
srcDir("jvmMain")
}
dependencies {
implementation("org.jetbrains.compose.ui:ui-tooling-preview:1.5.10")
}
}
val jvmTest by getting {
kotlin.apply {
srcDir("jvmTest")
}
}
}
}
// Add Android extension block
android {
sourceSets["main"].apply {
kotlin.srcDirs("androidMain")
manifest.srcFile("androidMain/AndroidManifest.xml")
res.srcDirs("androidMain/res")
resources.srcDirs("commonMain/resources")
}
namespace = "com.my.app"
defaultConfig {
minSdk = 28
targetSdk = 34
}
compileSdk = 34
compileOptions {
sourceCompatibility = JavaVersion.VERSION_17
targetCompatibility = JavaVersion.VERSION_17
}
kotlin {
jvmToolchain(17)
}
}
ksp {
arg("me.tatarka.inject.generateCompanionExtensions", "true")
}
dependencies {
kotlin.targets.asSequence().filter { target ->
// Don't add KSP for common target, only final platforms
target.platformType != KotlinPlatformType.common
}.forEach { target ->
add(
"ksp${target.targetName.capitalized()}",
"me.tatarka.inject:kotlin-inject-compiler-ksp:0.6.3"
)
}
}
sqldelight {
databases {
create("Database") {
packageName.set("com.my.app")
}
}
}