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 @@ -24,6 +24,10 @@ public func labeledTuple() -> (x: Int32, y: Int32) {
(x: 10, y: 20)
}

public func echoSingleTuple(input: (String)) -> (String) {
input
}

public func echoTriple(triple: (Bool, Double, Int64)) -> (Bool, Double, Int64) {
triple
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,13 @@ void labeledTuple() {
Tuple2<Integer, Integer> check = result;
}

@Test
void echoSingleTuple() {
var input = "Swift";
String result = MySwiftLibrary.echoSingleTuple(input);
assertEquals(input, result);
}

@Test
void echoTriple() {
Tuple3<Boolean, Double, Long> input = new Tuple3<>(true, 3.14, 100L);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -630,6 +630,17 @@ extension JNISwift2JavaGenerator {
conversion: .typeMetadataAddress(.placeholder),
)

case .tuple(let elements) where elements.count == 1:
return try translateParameter(
swiftType: elements[0].type,
parameterName: parameterName,
methodName: methodName,
parentName: parentName,
genericParameters: genericParameters,
genericRequirements: genericRequirements,
parameterPosition: parameterPosition,
)

case .tuple(let elements) where !elements.isEmpty:
return try translateTupleParameter(
elements: elements,
Expand Down Expand Up @@ -1023,6 +1034,15 @@ extension JNISwift2JavaGenerator {
case .tuple([]):
return TranslatedResult(javaType: .void, nativeJavaType: .void, outParameters: [], conversion: .placeholder)

case .tuple(let elements) where elements.count == 1:
return try translateResult(
swiftType: elements[0].type,
methodName: methodName,
resultName: resultName,
genericParameters: genericParameters,
genericRequirements: genericRequirements,
)

case .tuple(let elements) where !elements.isEmpty:
return try translateTupleResult(
methodName: methodName,
Expand Down Expand Up @@ -1148,6 +1168,13 @@ extension JNISwift2JavaGenerator {
}
return .class(package: nil, name: generic.name)

case .tuple(let elements) where elements.count == 1:
return try translateGenericTypeParameter(
elements[0].type,
genericParameters: genericParameters,
genericRequirements: genericRequirements
)

case .tuple(let elements):
let elementJavaTypes = try elements.map { element in
try translateGenericTypeParameter(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -326,6 +326,16 @@ extension JNISwift2JavaGenerator {
conversionCheck: nil
)

case .tuple(let elements) where elements.count == 1:
return try translateParameter(
type: elements[0].type,
parameterName: parameterName,
methodName: methodName,
parentName: parentName,
genericParameters: genericParameters,
genericRequirements: genericRequirements
)

case .tuple(let elements) where !elements.isEmpty:
return try translateTupleParameter(
elements: elements,
Expand Down Expand Up @@ -771,6 +781,9 @@ extension JNISwift2JavaGenerator {
outParameters: []
)

case .tuple(let elements) where elements.count == 1:
return try translateResult(swiftType: elements[0].type, methodName: methodName, resultName: resultName)

case .tuple(let elements) where !elements.isEmpty:
return try translateTupleResult(methodName: methodName, elements: elements, resultName: resultName)

Expand Down

This file was deleted.

57 changes: 57 additions & 0 deletions Tests/JExtractSwiftTests/JNI/JNITupleTests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -174,4 +174,61 @@ struct JNITupleTests {
]
)
}

@Test
func singleTuple() throws {
let input = """
public func singleTuple(input: (String)) -> (String) {
input
}
"""

try assertOutput(
input: input,
.jni,
.java,
detectChunkByInitialLines: 1,
expectedChunks: [
"""
private static native java.lang.String $singleTuple(java.lang.String input);
"""
]
)

try assertOutput(
input: input,
.jni,
.swift,
detectChunkByInitialLines: 1,
expectedChunks: [
"""
public func Java_com_example_swift_SwiftModule__00024singleTuple__Ljava_lang_String_2(environment: UnsafeMutablePointer<JNIEnv?>!, thisClass: jclass, input: jstring?) -> jstring? {
return SwiftModule.singleTuple(input: String(fromJNI: input, in: environment)).getJNILocalRefValue(in: environment)
}
"""
]
)
}

@Test
func singleTupleInGeneric() throws {
let input = """
public struct Box<T> {}
public var singleTupleInGeneric: Box<(String)> {
"input"
}
"""

try assertOutput(
input: input,
.jni,
.java,
detectChunkByInitialLines: 1,
expectedChunks: [
"""
public static Box<java.lang.String> getSingleTupleInGeneric(SwiftArena swiftArena)
"""
]
)
}
}