Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -103,6 +103,14 @@ public class MySwiftClass {
public func returnXAsJavaLong() -> JavaLong {
JavaLong(self.x)
}

public func returnXAsOptionalJavaLong() -> JavaLong? {
JavaLong(self.x)
}

public func returnXYAsJavaLongs() -> [JavaLong] {
[JavaLong(self.x), JavaLong(self.y)]
}
}

extension MySwiftClass: CustomStringConvertible {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -174,6 +174,26 @@ void returnXAsJavaLong() {
}
}

@Test
void returnXAsOptionalJavaLong() {
try (var arena = SwiftArena.ofConfined()) {
MySwiftClass c1 = MySwiftClass.init(20, 10, arena);
Long javaLong = c1.returnXAsOptionalJavaLong();
assertEquals(20L, javaLong);
}
}

@Test
void returnXYAsJavaLongs() {
try (var arena = SwiftArena.ofConfined()) {
MySwiftClass c1 = MySwiftClass.init(20, 10, arena);
Long[] longs = c1.returnXYAsJavaLongs();
assertEquals(2, longs.length);
assertEquals(20L, longs[0]);
assertEquals(10L, longs[1]);
}
}

@Test
void getAsyncVariable() throws Exception {
try (var arena = SwiftArena.ofConfined()) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -681,7 +681,7 @@ extension JNISwift2JavaGenerator {

return NativeResult(
javaType: javaType,
conversion: .getJNIValue(.asOptional(.placeholder)),
conversion: .getJNIValue(.placeholder),
outParameters: []
)
}
Expand Down Expand Up @@ -861,7 +861,7 @@ extension JNISwift2JavaGenerator {
}
return NativeResult(
javaType: javaType,
conversion: .getJNIValue(.asOptional(.placeholder)),
conversion: .getJNIValue(.placeholder),
outParameters: []
)
}
Expand Down Expand Up @@ -1015,7 +1015,7 @@ extension JNISwift2JavaGenerator {

return NativeResult(
javaType: .array(javaType),
conversion: .getJNIValue(.asOptional(.placeholder)),
conversion: .getJNIValue(.placeholder),
outParameters: []
)
}
Expand Down Expand Up @@ -1423,8 +1423,6 @@ extension JNISwift2JavaGenerator {

indirect case optionalMap(NativeSwiftConversionStep)

indirect case asOptional(NativeSwiftConversionStep)

indirect case unwrapOptional(NativeSwiftConversionStep, name: String, fatalErrorMessage: String)

indirect case asyncCompleteFuture(
Expand Down Expand Up @@ -1913,10 +1911,6 @@ extension JNISwift2JavaGenerator {
}
return printer.finalize()

case .asOptional(let inner):
let inner = inner.render(&printer, placeholder)
return "(\(inner) as Optional)"

case .unwrapOptional(let inner, let name, let fatalErrorMessage):
let unwrappedName = "\(name)_unwrapped$"
let inner = inner.render(&printer, placeholder)
Expand Down
15 changes: 15 additions & 0 deletions Sources/SwiftJava/AnyJavaObject.swift
Original file line number Diff line number Diff line change
Expand Up @@ -160,3 +160,18 @@ extension AnyJavaObject {
}
}
}

// ==== -----------------------------------------------------------------------
// MARK: JNI conversions for non-optional Java objects

extension AnyJavaObject {
/// Retrieve the underlying JNI reference for this Java object.
public func getJNIValue(in environment: JNIEnvironment) -> jobject {
self.javaThis
}

/// Return a fresh local reference safe for returning from a JNI thunk.
public func getJNILocalRefValue(in environment: JNIEnvironment) -> jobject? {
environment.interface.NewLocalRef(environment, self.javaThis)
}
}
6 changes: 3 additions & 3 deletions Tests/JExtractSwiftTests/JNI/JNIJavaKitTests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -115,7 +115,7 @@ struct JNIJavaKitTests {
"""
@_cdecl("Java_com_example_swift_SwiftModule__00024function__")
public func Java_com_example_swift_SwiftModule__00024function__(environment: UnsafeMutablePointer<JNIEnv?>!, thisClass: jclass) -> jobject? {
return (SwiftModule.function() as Optional).getJNILocalRefValue(in: environment)
return SwiftModule.function().getJNILocalRefValue(in: environment)
}
"""
]
Expand Down Expand Up @@ -160,7 +160,7 @@ struct JNIJavaKitTests {
"""
@_cdecl("Java_com_example_swift_SwiftModule__00024function__")
public func Java_com_example_swift_SwiftModule__00024function__(environment: UnsafeMutablePointer<JNIEnv?>!, thisClass: jclass) -> jobject? {
return (SwiftModule.function() as Optional).getJNILocalRefValue(in: environment)
return SwiftModule.function().getJNILocalRefValue(in: environment)
}
"""
]
Expand Down Expand Up @@ -205,7 +205,7 @@ struct JNIJavaKitTests {
"""
@_cdecl("Java_com_example_swift_SwiftModule__00024function__")
public func Java_com_example_swift_SwiftModule__00024function__(environment: UnsafeMutablePointer<JNIEnv?>!, thisClass: jclass) -> jobjectArray? {
return (SwiftModule.function() as Optional).getJNILocalRefValue(in: environment)
return SwiftModule.function().getJNILocalRefValue(in: environment)
}
"""
]
Expand Down
Loading