Are there specific Kotlin/KSP version requirements...
# fleet
c
Are there specific Kotlin/KSP version requirements for getting Compose Previews to work in
commonMain
? I have a very basic HelloWorld and its preview in
commonMain
and it fails with (full stack trace in thread)
Copy code
> Task :kmm:core:presentation:kspKotlin__COMPOSE_PREVIEW__ FAILED
e: [ksp] java.util.NoSuchElementException: No TypeParameter found for index T
I'm pretty sure this is because of a misconfigured project but I cannot figure out what it is.
Full stack trace: (as you can see there's nothing about my project in this stack trace)
Copy code
e: [ksp] java.util.NoSuchElementException: No TypeParameter found for index T
        at com.squareup.kotlinpoet.ksp.TypeParameterResolver$Companion$EMPTY$1.get(TypeParameterResolver.kt:45)
        at com.squareup.kotlinpoet.ksp.KsTypesKt.toTypeName(KsTypes.kt:71)
        at com.squareup.kotlinpoet.ksp.KsTypesKt.toTypeName(KsTypes.kt:193)
        at com.squareup.kotlinpoet.ksp.KsTypesKt.toTypeName(KsTypes.kt:170)
        at com.squareup.kotlinpoet.ksp.KsTypesKt.toTypeName(KsTypes.kt:69)
        at com.squareup.kotlinpoet.ksp.KsTypesKt.toTypeName(KsTypes.kt:193)
        at com.squareup.kotlinpoet.ksp.KsTypesKt.toTypeName$default(KsTypes.kt:182)
        at org.jetbrains.gradle.compose.multiplatform.preview.ksp.ActualStubProcessor.toTypeNameWithAnnotations(ActualStubProcessor.kt:199)
        at org.jetbrains.gradle.compose.multiplatform.preview.ksp.ActualStubProcessor.getActualFunction(ActualStubProcessor.kt:140)
        at org.jetbrains.gradle.compose.multiplatform.preview.ksp.ActualStubProcessor.access$getActualFunction(ActualStubProcessor.kt:19)
        at org.jetbrains.gradle.compose.multiplatform.preview.ksp.ActualStubProcessor$process$1.visitFunctionDeclaration(ActualStubProcessor.kt:37)
        at org.jetbrains.gradle.compose.multiplatform.preview.ksp.ActualStubProcessor$process$1.visitFunctionDeclaration(ActualStubProcessor.kt:31)
        at com.google.devtools.ksp.symbol.impl.kotlin.KSFunctionDeclarationImpl.accept(KSFunctionDeclarationImpl.kt:118)
        at org.jetbrains.gradle.compose.multiplatform.preview.ksp.ActualStubProcessor.process(ActualStubProcessor.kt:31)
        at com.google.devtools.ksp.AbstractKotlinSymbolProcessingExtension$doAnalysis$8$1.invoke(KotlinSymbolProcessingExtension.kt:310)
        at com.google.devtools.ksp.AbstractKotlinSymbolProcessingExtension$doAnalysis$8$1.invoke(KotlinSymbolProcessingExtension.kt:308)
        at com.google.devtools.ksp.AbstractKotlinSymbolProcessingExtension.handleException(KotlinSymbolProcessingExtension.kt:414)
        at com.google.devtools.ksp.AbstractKotlinSymbolProcessingExtension.doAnalysis(KotlinSymbolProcessingExtension.kt:308)
        at org.jetbrains.kotlin.cli.jvm.compiler.TopDownAnalyzerFacadeForJVM.analyzeFilesWithJavaIntegration(TopDownAnalyzerFacadeForJVM.kt:112)
        at org.jetbrains.kotlin.cli.jvm.compiler.TopDownAnalyzerFacadeForJVM.analyzeFilesWithJavaIntegration$default(TopDownAnalyzerFacadeForJVM.kt:75)
        at org.jetbrains.kotlin.cli.jvm.compiler.KotlinToJVMBytecodeCompiler.analyze$lambda$12(KotlinToJVMBytecodeCompiler.kt:373)
        at org.jetbrains.kotlin.cli.common.messages.AnalyzerWithCompilerReport.analyzeAndReport(AnalyzerWithCompilerReport.kt:115)
        at org.jetbrains.kotlin.cli.jvm.compiler.KotlinToJVMBytecodeCompiler.analyze(KotlinToJVMBytecodeCompiler.kt:364)
        at org.jetbrains.kotlin.cli.jvm.compiler.KotlinToJVMBytecodeCompiler.runFrontendAndGenerateIrUsingClassicFrontend(KotlinToJVMBytecodeCompiler.kt:195)
        at org.jetbrains.kotlin.cli.jvm.compiler.KotlinToJVMBytecodeCompiler.compileModules$cli(KotlinToJVMBytecodeCompiler.kt:106)
        at org.jetbrains.kotlin.cli.jvm.K2JVMCompiler.doExecute(K2JVMCompiler.kt:176)
        at org.jetbrains.kotlin.cli.jvm.K2JVMCompiler.doExecute(K2JVMCompiler.kt:50)
        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:1556)
        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:840)

e: Error occurred in KSP, check log for detail
My setup: Kotlin: 2.0.0 KSP: 2.0.0-1.0.23 Compose multiplatform: 1.6.11 Fleet version: 1.38.82
w
Hi Kiran! TLDR; workaround is adding desktop target for now, fixes are coming up! This is an error on our side when we stub your expect declaration. Since you don't have a desktop target, but we want to run previews as Desktop target, we create a desktop target and stub your expects. This stubbing of expects failed for one of your expects. If you could try to find out which expect declaration is breaking our preview and share it with us, that would be very valuable!
c
I came across that (in this slack and on YouTrack) but I thought the symptom was different (i.e., not this specific stack trace).
Just to be clear, are you suggesting that I place the preview only in desktop target and continue placing my actual Composable UI in commonMain?
Actually I'm also fine with adding the previews in androidMain instead of desktopMain; but my composables use the Compose Multiplatform compile time resources feature. Should this preview work if I place it in androidMain? Or can Android Studio show it?
For anyone else having this problem, until the preview in commonMain is fixed, I'm using this work-around • Place the composable UI in
commonMain
• Place the preview in
androidMain
• Use Android Studio Koala Feature Drop or later • Use Compose Multiplatform 1.7.0-alpha02 or later • Use the
import androidx.compose.ui.tooling.preview.Preview
(not the Jetbrains one) for the previews in
androidMain
I did not get it to work in Fleet but this work-around unblocks me.
gratitude thank you 1
Note that the above work-around also works even if you are using Compose Multiplatform resources