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

Bridging to @MainActor fails with error: call to main actor-isolated initializer 'init()' in a synchronous nonisolated context #51

Open
marcprux opened this issue Jan 24, 2025 · 0 comments

Comments

@marcprux
Copy link
Contributor

When running test cases against https://github.com/skiptools/skip-integ-demo/tree/main-actor, which simply adds @mainactor to the SkipIntegDemoModule:

/Users/marc/Library/Developer/Xcode/DerivedData/Skip-Everything-aqywrhrzhkbvfseiqgxuufbdwdft/SourcePackages/plugins/skip-integ-demo.output/SkipIntegDemoTests/skipstone/SkipIntegDemo/.build/SkipIntegDemo/swift/plugins/outputs/swift/SkipIntegDemo/destination/skipstone/SkipBridgeGenerated/SkipIntegDemo_Bridge.swift:23:26: error: call to main actor-isolated initializer 'init()' in a synchronous nonisolated context
20 | }
21 | @_cdecl("Java_skip_integ_demo_SkipIntegDemoModule_Swift_1constructor_10")
22 | func SkipIntegDemoModule_Swift_constructor_0(_ Java_env: JNIEnvPointer, _ Java_target: JavaObjectPointer) -> SwiftObjectPointer {
   |      `- note: add '@MainActor' to make global function 'SkipIntegDemoModule_Swift_constructor_0' part of global actor 'MainActor'
23 |     let f_return_swift = SkipIntegDemoModule()
   |                          `- error: call to main actor-isolated initializer 'init()' in a synchronous nonisolated context
24 |     return SwiftObjectPointer.pointer(to: f_return_swift, retain: true)
25 | }

/Users/marc/Library/Developer/Xcode/DerivedData/Skip-Everything-aqywrhrzhkbvfseiqgxuufbdwdft/SourcePackages/plugins/skip-integ-demo.output/SkipIntegDemo/skipstone/SkipIntegDemo/src/main/swift/Sources/SkipIntegDemo/SkipIntegDemo.swift:5:12: note: calls to initializer 'init()' from outside of its actor context are implicitly asynchronous
 3 | @MainActor
 4 | public class SkipIntegDemoModule {
 5 |     public init() {
   |            `- note: calls to initializer 'init()' from outside of its actor context are implicitly asynchronous
 6 |     }
 7 | 

/Users/marc/Library/Developer/Xcode/DerivedData/Skip-Everything-aqywrhrzhkbvfseiqgxuufbdwdft/SourcePackages/plugins/skip-integ-demo.output/SkipIntegDemoTests/skipstone/SkipIntegDemo/.build/SkipIntegDemo/swift/plugins/outputs/swift/SkipIntegDemo/destination/skipstone/SkipBridgeGenerated/SkipIntegDemo_Bridge.swift:29:37: error: call to main actor-isolated instance method 'stringFunction()' in a synchronous nonisolated context
25 | }
26 | @_cdecl("Java_skip_integ_demo_SkipIntegDemoModule_Swift_1stringFunction_11")
27 | func SkipIntegDemoModule_Swift_stringFunction_1(_ Java_env: JNIEnvPointer, _ Java_target: JavaObjectPointer, _ Swift_peer: SwiftObjectPointer) -> JavaString {
   |      `- note: add '@MainActor' to make global function 'SkipIntegDemoModule_Swift_stringFunction_1' part of global actor 'MainActor'
28 |     let peer_swift: SkipIntegDemoModule = Swift_peer.pointee()!
29 |     let f_return_swift = peer_swift.stringFunction()
   |                                     `- error: call to main actor-isolated instance method 'stringFunction()' in a synchronous nonisolated context
30 |     return f_return_swift.toJavaObject(options: [.kotlincompat])!
31 | }

/Users/marc/Library/Developer/Xcode/DerivedData/Skip-Everything-aqywrhrzhkbvfseiqgxuufbdwdft/SourcePackages/plugins/skip-integ-demo.output/SkipIntegDemo/skipstone/SkipIntegDemo/src/main/swift/Sources/SkipIntegDemo/SkipIntegDemo.swift:8:17: note: calls to instance method 'stringFunction()' from outside of its actor context are implicitly asynchronous
 6 |     }
 7 | 
 8 |     public func stringFunction() -> String {
   |                 `- note: calls to instance method 'stringFunction()' from outside of its actor context are implicitly asynchronous
 9 |         "Hello, World!"
10 |     }

/Users/marc/Library/Developer/Xcode/DerivedData/Skip-Everything-aqywrhrzhkbvfseiqgxuufbdwdft/SourcePackages/plugins/skip-integ-demo.output/SkipIntegDemoTests/skipstone/SkipIntegDemo/.build/SkipIntegDemo/swift/plugins/outputs/swift/SkipIntegDemo/destination/skipstone/SkipBridgeGenerated/SkipIntegDemo_Bridge.swift:34:42: error: call to main actor-isolated static method 'fromJavaObject(_:options:)' in a synchronous nonisolated context
 4 | extension SkipIntegDemoModule: BridgedToKotlin, BridgedToKotlinBaseClass {
 5 |     private static let Java_class = try! JClass(name: "skip/integ/demo/SkipIntegDemoModule")
 6 |     public static func fromJavaObject(_ obj: JavaObjectPointer?, options: JConvertibleOptions) -> Self {
   |                        `- note: calls to static method 'fromJavaObject(_:options:)' from outside of its actor context are implicitly asynchronous
 7 |         let ptr = SwiftObjectPointer.peer(of: obj!, options: options)
 8 |         return ptr.pointee()!
   :
31 | }
32 | @_cdecl("Java_skip_integ_demo_SkipIntegDemoModule_Swift_1projectionImpl")
33 | func SkipIntegDemoModule_Swift_projectionImpl(_ Java_env: JNIEnvPointer, _ Java_target: JavaObjectPointer, _ options: Int32) -> JavaObjectPointer {
   |      `- note: add '@MainActor' to make global function 'SkipIntegDemoModule_Swift_projectionImpl' part of global actor 'MainActor'
34 |     let projection = SkipIntegDemoModule.fromJavaObject(Java_target, options: JConvertibleOptions(rawValue: Int(options)))
   |                                          `- error: call to main actor-isolated static method 'fromJavaObject(_:options:)' in a synchronous nonisolated context
35 |     let factory: () -> Any = { projection }
36 |     return SwiftClosure0.javaObject(for: factory, options: [.kotlincompat])!

> Task :SkipIntegDemo:buildLocalSwiftPackage FAILED
marcprux added a commit to skiptools/skip-integ-demo that referenced this issue Jan 24, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant