JetBrains / compose-multiplatform

Compose Multiplatform, a modern UI framework for Kotlin that makes building performant and beautiful user interfaces easy and enjoyable.
https://jetbrains.com/lp/compose-multiplatform
Apache License 2.0
16.15k stars 1.17k forks source link

Cannot use `dynamic` as type of a Composable's parameters #1759

Closed dellisd closed 1 month ago

dellisd commented 2 years ago

When using Compose for Web, the following composable (or any composable with a dynamic parameter) will not compile:

@Composable
fun myComposable(value: dynamic) {
}

The compiler outputs this stacktrace:

java.lang.IllegalStateException: dynamic
    at org.jetbrains.kotlin.backend.jvm.ir.JvmIrTypeUtilsKt.getErasedUpperBound(JvmIrTypeUtils.kt:94)
    at org.jetbrains.kotlin.backend.jvm.ir.JvmIrTypeUtilsKt.isInlineClassType(JvmIrTypeUtils.kt:123)
    at androidx.compose.compiler.plugins.kotlin.lower.ComposableFunctionBodyTransformer$Scope$FunctionScope.parameterInformation(ComposableFunctionBodyTransformer.kt:3503)
    at androidx.compose.compiler.plugins.kotlin.lower.ComposableFunctionBodyTransformer$Scope$FunctionScope.calculateSourceInfo(ComposableFunctionBodyTransformer.kt:3558)
    at androidx.compose.compiler.plugins.kotlin.lower.ComposableFunctionBodyTransformer.getSourceInformation(ComposableFunctionBodyTransformer.kt:1186)
    at androidx.compose.compiler.plugins.kotlin.lower.ComposableFunctionBodyTransformer.applySourceFixups(ComposableFunctionBodyTransformer.kt:1196)
    at androidx.compose.compiler.plugins.kotlin.lower.ComposableFunctionBodyTransformer.lower(ComposableFunctionBodyTransformer.kt:463)
    at androidx.compose.compiler.plugins.kotlin.ComposeIrGenerationExtension.generate(ComposeIrGenerationExtension.kt:167)
    at org.jetbrains.kotlin.ir.backend.js.KlibKt.generateModuleFragmentWithPlugins$lambda-26(klib.kt:456)
    at org.jetbrains.kotlin.psi2ir.Psi2IrTranslator.generateModuleFragment(Psi2IrTranslator.kt:88)
    at org.jetbrains.kotlin.ir.backend.js.KlibKt.generateModuleFragmentWithPlugins(klib.kt:461)
    at org.jetbrains.kotlin.ir.backend.js.KlibKt.generateKLib(klib.kt:189)
    at org.jetbrains.kotlin.ir.backend.js.KlibKt.generateKLib$default(klib.kt:122)
    at org.jetbrains.kotlin.cli.js.K2JsIrCompiler.doExecute(K2JsIrCompiler.kt:264)
    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:92)
    at org.jetbrains.kotlin.cli.common.CLICompiler.execImpl(CLICompiler.kt:44)
    at org.jetbrains.kotlin.cli.common.CLITool.exec(CLITool.kt:98)
    at org.jetbrains.kotlin.incremental.IncrementalJsCompilerRunner.runCompiler(IncrementalJsCompilerRunner.kt:193)
    at org.jetbrains.kotlin.incremental.IncrementalJsCompilerRunner.runCompiler(IncrementalJsCompilerRunner.kt:78)
    at org.jetbrains.kotlin.incremental.IncrementalCompilerRunner.compileIncrementally(IncrementalCompilerRunner.kt:357)
    at org.jetbrains.kotlin.incremental.IncrementalCompilerRunner.compileIncrementally$default(IncrementalCompilerRunner.kt:299)
    at org.jetbrains.kotlin.incremental.IncrementalCompilerRunner.compileImpl(IncrementalCompilerRunner.kt:159)
    at org.jetbrains.kotlin.incremental.IncrementalCompilerRunner.compile(IncrementalCompilerRunner.kt:80)
    at org.jetbrains.kotlin.incremental.IncrementalCompilerRunner.compile$default(IncrementalCompilerRunner.kt:71)
    at org.jetbrains.kotlin.daemon.CompileServiceImplBase.execJsIncrementalCompiler(CompileServiceImpl.kt:564)
    at org.jetbrains.kotlin.daemon.CompileServiceImplBase.access$execJsIncrementalCompiler(CompileServiceImpl.kt:100)
    at org.jetbrains.kotlin.daemon.CompileServiceImpl.compile(CompileServiceImpl.kt:1802)
olonho commented 2 years ago

Guess we shall just disallow dynamic as composable function argument.

dellisd commented 2 years ago

It seems that Array<dynamic> parameters are (also) no longer permitted. The following was valid with Kotlin 1.6.10, but is no longer valid in 1.6.21 or 1.7.0 and produces the errors described in #2115

@Composable
fun Example(array: Array<dynamic>) {
}

Is this intentional, or even related to this issue?

okushnikov commented 3 months ago

Please check the following ticket on YouTrack for follow-ups to this issue. GitHub issues will be closed in the coming weeks.