Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Closed
eygraber opened this issue May 7, 2024 · 14 comments · Fixed by JetBrains/compose-multiplatform-core#1353 or #4798
Assignees
Labels
bug Something isn't working compiler Compiler plugin related p:critical Critical priority

Comments

@eygraber
Copy link
Contributor

eygraber commented May 7, 2024

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 eygraber added bug Something isn't working submitted labels May 7, 2024
@igordmn igordmn added p:critical Critical priority and removed submitted labels May 8, 2024
@igordmn igordmn added the compiler Compiler plugin related label May 8, 2024
@shishkin-pavel
Copy link
Collaborator

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
Copy link
Contributor Author

Awesome thank you

shishkin-pavel added a commit that referenced this issue May 13, 2024
compose compiler version updated to 1.5.13.2 (kotlin 1.9.23) / 1.5.13.3
(kotlin 1.9.24)

Fixes #4777

## Testing
- compose multiplatform testsuite

## Release Notes
### Highlights
#### Compose compiler
- updated to version built from google jetpack compose compiler 1.5.13
shishkin-pavel added a commit to JetBrains/compose-multiplatform-core that referenced this issue May 13, 2024
shishkin-pavel added a commit to JetBrains/compose-multiplatform-core that referenced this issue May 13, 2024
shishkin-pavel added a commit that referenced this issue May 13, 2024
compose compiler version updated to 1.5.13.2 (kotlin 1.9.23) / 1.5.13.3
(kotlin 1.9.24)

Fixes #4777

## Testing
- compose multiplatform testsuite

## Release Notes
### Highlights
#### Compose compiler
- updated to version built from google jetpack compose compiler 1.5.13
@Kashif-E
Copy link

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
Copy link
Collaborator

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
Copy link

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

@shishkin-pavel
Copy link
Collaborator

shishkin-pavel commented May 14, 2024

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

@eygraber
Copy link
Contributor Author

@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
Copy link
Contributor Author

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

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
Copy link
Collaborator

@eygraber sure, ill take a look at it today

@shishkin-pavel
Copy link
Collaborator

@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
Copy link
Contributor Author

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

KotlinBuild pushed a commit to JetBrains/kotlin that referenced this issue Jun 3, 2024
fixes JetBrains/compose-multiplatform#4777
`fqName` were used before, but they aren't unique
for example, we can have class, several functions and property
with the same fqName, so descriptors should be used
(they are guaranteed to be unique for current compilation set/module)

Test: tested against Compose Multiplatform testsuite

Change-Id: I44a56c52267e548639a08a949b3e9447422b0533 ( https://android-review.googlesource.com/q/I44a56c52267e548639a08a949b3e9447422b0533 )
Signed-off-by: Pavel Shishkin <pavel.shishkin@jetbrains.com>

Moved from: androidx/androidx@6c3fb21
KotlinBuild pushed a commit to JetBrains/kotlin that referenced this issue Jun 3, 2024
fixes JetBrains/compose-multiplatform#4777
`fqName` were used before, but they aren't unique
for example, we can have class, several functions and property
with the same fqName, so descriptors should be used
(they are guaranteed to be unique for current compilation set/module)

Test: tested against Compose Multiplatform testsuite

Change-Id: I44a56c52267e548639a08a949b3e9447422b0533 ( https://android-review.googlesource.com/q/I44a56c52267e548639a08a949b3e9447422b0533 )
Signed-off-by: Pavel Shishkin <pavel.shishkin@jetbrains.com>

Moved from: androidx/androidx@6c3fb21
KotlinBuild pushed a commit to JetBrains/kotlin that referenced this issue Jun 3, 2024
fixes JetBrains/compose-multiplatform#4777
`fqName` were used before, but they aren't unique
for example, we can have class, several functions and property
with the same fqName, so descriptors should be used
(they are guaranteed to be unique for current compilation set/module)

Test: tested against Compose Multiplatform testsuite

Change-Id: I44a56c52267e548639a08a949b3e9447422b0533 ( https://android-review.googlesource.com/q/I44a56c52267e548639a08a949b3e9447422b0533 )
Signed-off-by: Pavel Shishkin <pavel.shishkin@jetbrains.com>

Moved from: androidx/androidx@6c3fb21
KotlinBuild pushed a commit to JetBrains/kotlin that referenced this issue Jun 5, 2024
fixes JetBrains/compose-multiplatform#4777
`fqName` were used before, but they aren't unique
for example, we can have class, several functions and property
with the same fqName, so descriptors should be used
(they are guaranteed to be unique for current compilation set/module)

Test: tested against Compose Multiplatform testsuite

Change-Id: I44a56c52267e548639a08a949b3e9447422b0533 ( https://android-review.googlesource.com/q/I44a56c52267e548639a08a949b3e9447422b0533 )
Signed-off-by: Pavel Shishkin <pavel.shishkin@jetbrains.com>

Moved from: androidx/androidx@6c3fb21
@eygraber
Copy link
Contributor Author

Should this be fixed in 2.0.10?

@eygraber
Copy link
Contributor Author

This is still failing with 2.0.10-RC

@okushnikov
Copy link

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working compiler Compiler plugin related p:critical Critical priority
Projects
None yet
5 participants