diff --git a/Sources/JExtractSwiftLib/JNI/JNISwift2JavaGenerator+NativeTranslation.swift b/Sources/JExtractSwiftLib/JNI/JNISwift2JavaGenerator+NativeTranslation.swift index d8b0a1d1..9ffa000c 100644 --- a/Sources/JExtractSwiftLib/JNI/JNISwift2JavaGenerator+NativeTranslation.swift +++ b/Sources/JExtractSwiftLib/JNI/JNISwift2JavaGenerator+NativeTranslation.swift @@ -1033,7 +1033,21 @@ extension JNISwift2JavaGenerator { ) func printDo(printer: inout CodePrinter) { - printer.print("let swiftResult$ = await \(placeholder)") + // Make sure try/await are printed when necessary and avoid duplicate, or wrong-order, keywords (which would cause warnings) + let placeholderWithoutTry = + if placeholder.hasPrefix("try ") { + String(placeholder.dropFirst("try ".count)) + } else { + placeholder + } + + let tryAwaitString: String = + if isThrowing { + "try await" + } else { + "await" + } + printer.print("let swiftResult$ = \(tryAwaitString) \(placeholderWithoutTry)") printer.print("environment = try! JavaVirtualMachine.shared().environment()") let inner = nativeFunctionSignature.result.conversion.render(&printer, "swiftResult$") if swiftFunctionResultType.isVoid { diff --git a/Tests/JExtractSwiftTests/JNI/JNIAsyncTests.swift b/Tests/JExtractSwiftTests/JNI/JNIAsyncTests.swift index 67fe2e7a..c600e8f5 100644 --- a/Tests/JExtractSwiftTests/JNI/JNIAsyncTests.swift +++ b/Tests/JExtractSwiftTests/JNI/JNIAsyncTests.swift @@ -144,7 +144,7 @@ struct JNIAsyncTests { deferEnvironment.interface.DeleteGlobalRef(deferEnvironment, globalFuture) } do { - let swiftResult$ = await try SwiftModule.async() + let swiftResult$ = try await SwiftModule.async() environment = try! JavaVirtualMachine.shared().environment() _ = environment.interface.CallBooleanMethodA(environment, globalFuture, _JNIMethodIDCache.CompletableFuture.complete, [jvalue(l: nil)]) } @@ -164,7 +164,7 @@ struct JNIAsyncTests { deferEnvironment.interface.DeleteGlobalRef(deferEnvironment, globalFuture) } do { - let swiftResult$ = await try SwiftModule.async() + let swiftResult$ = try await SwiftModule.async() environment = try! JavaVirtualMachine.shared().environment() _ = environment.interface.CallBooleanMethodA(environment, globalFuture, _JNIMethodIDCache.CompletableFuture.complete, [jvalue(l: nil)]) }