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
15.17k stars 1.11k forks source link

Compose Compiler 1.5.12+ causes Only @HiddenFromObjC declaration can be a subtype of @HiddenFromObjC declaration #4777

Closed eygraber closed 10 hours ago

eygraber commented 1 month ago

Describe the bug Using the compose compiler v1.5.12+ results in the following error when compiling for ios targets:

Only @HiddenFromObjC declaration can be a subtype of @HiddenFromObjC declaration

Affected platforms

Versions

To Reproduce Steps to reproduce the behavior:

  1. Run ./gradlew assemble on https://github.com/eygraber/vice/tree/renovate/kotlin-monorepo
  2. See error

Expected behavior No error

Additional context The error is reported on this line:

public abstract class FlowSource<T> : ViceSource<T>

where ViceSource is:

public interface ViceSource<T> {
  @Composable
  public fun currentState(): T
}

Originally reported here because I thought it was an issue with Kotlin 1.9.24, but then I tested on Kotlin 1.9.23 with all compiler versions starting from 1.5.12 and was able to repro the issue.

shishkin-pavel commented 1 month ago

the problem was in name clash (ViceSource class inherited hide annotation due to ViceSource composable function) should be fixed in 1.5.13.2 for kotlin 1.9.23 & 1.5.13.3 for kotlin 1.9.24

eygraber commented 1 month ago

Awesome thank you

Kashif-E commented 1 month ago

hey @shishkin-pavel i am using kotlin rc3 and compose rc02 and facing this issue, what should i do to get rid of it?

shishkin-pavel commented 1 month ago

Hi, @Kashif-E , make sure you updated compose compiler to version 1.5.13.2 (for kotlin 1.9.23) / 1.5.13.3 (kotlin 1.9.24) or updated Compose Multiplatform to version 1.6.10-rc02

Kashif-E commented 1 month ago

@shishkin-pavel i am using kotlin 2.0.0-rc3 and compose 1.6.10-rc02

shishkin-pavel commented 1 month ago

@Kashif-E could you share some reproducer? probably this is another similar problem

eygraber commented 3 weeks ago

@shishkin-pavel I'm seeing this again in 1.6.10 with Kotlin 2.0.0 stable and the Compose compiler from the Kotlin plugin.

Here's the error on this PR updating to Kotlin 2.0 (I'm going to disable building ios now so it doesn't block me).

It's being reported on the first line here:

abstract class ImmichSessionPortal<K, V, I, C, E, S> : VirtuePortal<K, V, I, C, E, S, ImmichSessionComponent>()
  where V : ViceView<I, S>, C : ViceCompositor<I, S>, E : ViceEffects {
  abstract override val parentComponent: ImmichSessionComponent
  abstract override val component: ImmichSessionPortalComponent<K, V, I, C, E, S>
}

interface ImmichSessionPortalComponent<K, V, I, C, E, S> :
  VirtuePortalComponent<V, I, C, E, S, ImmichSessionComponent>
  where V : ViceView<I, S>, C : ViceCompositor<I, S>, E : ViceEffects {
  @get:Provides val route: K
}
eygraber commented 3 weeks ago

@shishkin-pavel Can this get reopened? I'm now starting to see this in multiple libraries, and it's getting harder to keep disabling ios :grimacing:

In this case it was working fine with Kotlin 2.0.0 and CMP 1.6.10, but starting throwing the error on the first line here on this PR:

abstract class SampleDestination<V, I, C, S> : ViceDestination<V, I, C, DummyEffects, S>()
  where V : ViceView<I, S>, C : ViceCompositor<I, S> {
  override val effects = DummyEffects
  @Composable final override fun OnBackPressedHandler(enabled: Boolean, onBackPressed: () -> Unit) {}
}

It seems to work if I add

@OptIn(ExperimentalObjCRefinement::class)
@HiddenFromObjC

to SampleDestination but I feel like that's just punting the problem down the road. I also don't have any of my code annotated with HiddenFromObjC so I'm not sure where this is coming from.

shishkin-pavel commented 3 weeks ago

@eygraber sure, ill take a look at it today

shishkin-pavel commented 3 weeks ago

@eygraber sorry for the delay. for Kotlin version 2, the publication of compose compiler artifact occurs simultaneously with the release of Kotlin compiler and the necessary changes have not yet made it into the release, but I hope that they will make it into the next one. probably it would make sense to close current issue only when they would be merged and new version of kotlin compiler and compose compiler woudl be published

eygraber commented 2 weeks ago

@shishkin-pavel thanks, looking forward to the fix!