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

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

Open eygraber opened this issue 1 year ago • 9 comments

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

  • iOS

Versions

  • Libraries:
    • Compose Multiplatform version: 1.6.10-rc1 and 1.6.2
  • Kotlin version: 1.9.23
  • OS version(s) (required for Desktop and iOS issues): macOS 14.4.1
  • OS architecture (x86 or arm64): arm64

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.

eygraber avatar May 07 '24 22:05 eygraber

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

shishkin-pavel avatar May 10 '24 15:05 shishkin-pavel

Awesome thank you

eygraber avatar May 10 '24 15:05 eygraber

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

Kashif-E avatar May 14 '24 20:05 Kashif-E

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

shishkin-pavel avatar May 14 '24 20:05 shishkin-pavel

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

Kashif-E avatar May 14 '24 20:05 Kashif-E

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

shishkin-pavel avatar May 14 '24 20:05 shishkin-pavel

@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 avatar May 21 '24 22:05 eygraber

@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.

eygraber avatar May 24 '24 06:05 eygraber

@eygraber sure, ill take a look at it today

shishkin-pavel avatar May 24 '24 09:05 shishkin-pavel

@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

shishkin-pavel avatar May 27 '24 15:05 shishkin-pavel

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

eygraber avatar May 28 '24 04:05 eygraber

Should this be fixed in 2.0.10?

eygraber avatar Jul 11 '24 20:07 eygraber

This is still failing with 2.0.10-RC

eygraber avatar Jul 11 '24 21:07 eygraber

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

okushnikov avatar Jul 14 '24 14:07 okushnikov