Skip to content

Commit 8599a30

Browse files
committed
Dev: fix SwiftBlock with primitives
1 parent 241d6ea commit 8599a30

38 files changed

+497
-46
lines changed

compiler/src/main/java/com/readdle/codegen/JavaSwiftProcessor.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -382,7 +382,7 @@ static String replaceLast(String text, char replace, char replacement) {
382382
}
383383

384384
public SwiftEnvironment.Type parseJavaType(String javaType) {
385-
if (moduleDescriptor.customTypeMappings.containsKey(javaType)) {
385+
if (moduleDescriptor.customTypeMappings != null && moduleDescriptor.customTypeMappings.containsKey(javaType)) {
386386
return new SwiftEnvironment.Type(moduleDescriptor.customTypeMappings.get(javaType), javaType);
387387
}
388388
switch (javaType) {

compiler/src/main/java/com/readdle/codegen/SwiftBlockDescriptor.java

Lines changed: 25 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -203,7 +203,8 @@ File generateCode() throws IOException {
203203

204204
String jniMethodTemplate;
205205
if (returnSwiftType != null) {
206-
jniMethodTemplate = "let optionalResult = JNI.CallObjectMethod(self.jniObject, %s.javaMethod%s";
206+
String methodCallMethod = returnSwiftType.returnTypeFunc(isReturnTypeOptional);
207+
jniMethodTemplate = "let optionalResult = JNI." + methodCallMethod + "(self.jniObject, %s.javaMethod%s";
207208
}
208209
else {
209210
jniMethodTemplate = "JNI.CallVoidMethod(self.jniObject, %s.javaMethod%s";
@@ -231,19 +232,29 @@ File generateCode() throws IOException {
231232
swiftWriter.emitStatement("}");
232233

233234
if (returnSwiftType != null) {
234-
swiftWriter.emitStatement("guard let result = optionalResult else {");
235-
swiftWriter.emitStatement(isReturnTypeOptional ? "return nil" : "fatalError(\"Don't support nil here!\")");
236-
swiftWriter.emitStatement("}");
237-
swiftWriter.emitStatement("defer {");
238-
swiftWriter.emitStatement("JNI.DeleteLocalRef(result)");
239-
swiftWriter.emitStatement("}");
240-
swiftWriter.emitStatement("do {");
241-
swiftWriter.emitStatement(String.format("return try %s.from(javaObject: result)", returnSwiftType.swiftConstructorType));
242-
swiftWriter.emitStatement("}");
243-
swiftWriter.emitStatement("catch {");
244-
swiftWriter.emitStatement("let errorString = String(reflecting: type(of: error)) + String(describing: error)");
245-
swiftWriter.emitStatement("fatalError(errorString)");
246-
swiftWriter.emitStatement("}");
235+
if (!isReturnTypeOptional && returnSwiftType.isPrimitiveType()) {
236+
swiftWriter.emitStatement("return " + returnSwiftType.swiftType + "(fromJavaPrimitive: optionalResult)");
237+
}
238+
else {
239+
swiftWriter.emitStatement("guard let result = optionalResult else {");
240+
if (isReturnTypeOptional) {
241+
swiftWriter.emitStatement("return nil");
242+
} else {
243+
swiftWriter.emitStatement("fatalError(\"Don't support nil here!\")");
244+
}
245+
swiftWriter.emitStatement("}");
246+
247+
swiftWriter.emitStatement("defer {");
248+
swiftWriter.emitStatement("JNI.DeleteLocalRef(result)");
249+
swiftWriter.emitStatement("}");
250+
swiftWriter.emitStatement("do {");
251+
swiftWriter.emitStatement(String.format("return try %s.from(javaObject: result)", returnSwiftType.swiftConstructorType));
252+
swiftWriter.emitStatement("}");
253+
swiftWriter.emitStatement("catch {");
254+
swiftWriter.emitStatement("let errorString = String(reflecting: type(of: error)) + String(describing: error)");
255+
swiftWriter.emitStatement("fatalError(errorString)");
256+
swiftWriter.emitStatement("}");
257+
}
247258
}
248259

249260
swiftWriter.emitStatement("}");

sample/build.gradle

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,6 @@ apply plugin: 'kotlin-android'
55
apply plugin: 'kotlin-android-extensions'
66
apply plugin: 'kotlin-kapt'
77

8-
apply plugin: 'kotlin-kapt'
9-
108
swift {
119
useKapt true
1210
cleanEnabled true

sample/src/androidTest/java/com/readdle/swiftjava/sample/BoolTests.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,4 +91,14 @@ public void testDecode() {
9191
Assert.assertFalse(BoolTest.testDecode(badParam));
9292
}
9393

94+
@Test
95+
public void testBlock() {
96+
Assert.assertTrue(BoolTest.testBlock(value -> value));
97+
}
98+
99+
@Test
100+
public void testOptionalBlock() {
101+
Assert.assertTrue(BoolTest.testOptionalBlock(value -> value));
102+
}
103+
94104
}

sample/src/androidTest/java/com/readdle/swiftjava/sample/DoubleTests.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,4 +98,14 @@ public void testDecode() {
9898
Assert.assertFalse(DoubleTest.testDecode(badParam));
9999
}
100100

101+
@Test
102+
public void testBlock() {
103+
Assert.assertTrue(DoubleTest.testBlock(value -> value));
104+
}
105+
106+
@Test
107+
public void testOptionalBoolBlock() {
108+
Assert.assertTrue(DoubleTest.testOptionalBlock(value -> value));
109+
}
110+
101111
}

sample/src/androidTest/java/com/readdle/swiftjava/sample/FloatTests.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,4 +98,14 @@ public void testDecode() {
9898
Assert.assertFalse(FloatTest.testDecode(badParam));
9999
}
100100

101+
@Test
102+
public void testBlock() {
103+
Assert.assertTrue(FloatTest.testBlock(value -> value));
104+
}
105+
106+
@Test
107+
public void testOptionalBlock() {
108+
Assert.assertTrue(FloatTest.testOptionalBlock(value -> value));
109+
}
110+
101111
}

sample/src/androidTest/java/com/readdle/swiftjava/sample/Int16Tests.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -124,4 +124,14 @@ public void testOptionSetDecode() {
124124
Assert.assertEquals(Int16OptionsSet.getThree().getRawValue(), Int16Test.testOptionSetDecode(Int16OptionsSet.getThree()));
125125
}
126126

127+
@Test
128+
public void testBlock() {
129+
Assert.assertTrue(Int16Test.testBlock(value -> value));
130+
}
131+
132+
@Test
133+
public void testOptionalBlock() {
134+
Assert.assertTrue(Int16Test.testOptionalBlock(value -> value));
135+
}
136+
127137
}

sample/src/androidTest/java/com/readdle/swiftjava/sample/Int64Tests.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -124,4 +124,14 @@ public void testOptionSetDecode() {
124124
Assert.assertEquals(Int64OptionsSet.getThree().getRawValue(), Int64Test.testOptionSetDecode(Int64OptionsSet.getThree()));
125125
}
126126

127+
@Test
128+
public void testBlock() {
129+
Assert.assertTrue(Int64Test.testBlock(value -> value));
130+
}
131+
132+
@Test
133+
public void testOptionalBlock() {
134+
Assert.assertTrue(Int64Test.testOptionalBlock(value -> value));
135+
}
136+
127137
}

sample/src/androidTest/java/com/readdle/swiftjava/sample/Int8Tests.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -124,4 +124,14 @@ public void testOptionSetDecode() {
124124
Assert.assertEquals(Int8OptionsSet.getThree().getRawValue(), Int8Test.testOptionSetDecode(Int8OptionsSet.getThree()));
125125
}
126126

127+
@Test
128+
public void testBlock() {
129+
Assert.assertTrue(Int8Test.testBlock(value -> value));
130+
}
131+
132+
@Test
133+
public void testOptionalBlock() {
134+
Assert.assertTrue(Int8Test.testOptionalBlock(value -> value));
135+
}
136+
127137
}

sample/src/androidTest/java/com/readdle/swiftjava/sample/IntTests.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -144,4 +144,14 @@ public void testOptionSetDecode() {
144144
Assert.assertEquals(IntOptionsSet.getThree().getRawValue(), IntTest.testOptionSetDecode(IntOptionsSet.getThree()));
145145
}
146146

147+
@Test
148+
public void testBlock() {
149+
Assert.assertTrue(IntTest.testBlock(value -> value));
150+
}
151+
152+
@Test
153+
public void testOptionalBlock() {
154+
Assert.assertTrue(IntTest.testOptionalBlock(value -> value));
155+
}
156+
147157
}

0 commit comments

Comments
 (0)