Skip to content

Commit b82255b

Browse files
committed
Dev: add optional primitives to SampleValue
1 parent 7dd266d commit b82255b

7 files changed

Lines changed: 91 additions & 45 deletions

File tree

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

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -141,9 +141,7 @@ else if (param.isOptional) {
141141
if (shouldCatchPreamble) {
142142
swiftWriter.emitStatement("}");
143143
swiftWriter.emitStatement("catch {");
144-
swiftWriter.emitStatement("let nsError = error as NSError");
145-
swiftWriter.emitStatement("let errorString = \"\\(nsError.domain): \\(nsError.code)\"");
146-
swiftWriter.emitStatement("_ = JNI.api.ThrowNew(JNI.env, SwiftRuntimeErrorClass, errorString)");
144+
Utils.handleRuntimeError(swiftWriter);
147145
swiftWriter.emitStatement(String.format("return%s", returnSwiftType != null ? " nil" : ""));
148146
swiftWriter.emitStatement("}");
149147
}
@@ -196,9 +194,7 @@ else if (param.isOptional) {
196194
}
197195
swiftWriter.emitStatement("}");
198196
swiftWriter.emitStatement("catch {");
199-
swiftWriter.emitStatement("let nsError = error as NSError");
200-
swiftWriter.emitStatement("let errorString = \"\\(nsError.domain): \\(nsError.code)\"");
201-
swiftWriter.emitStatement("_ = JNI.api.ThrowNew(JNI.env, SwiftRuntimeErrorClass, errorString)");
197+
Utils.handleRuntimeError(swiftWriter);
202198
swiftWriter.emitStatement("return nil");
203199
swiftWriter.emitStatement("}");
204200
}
@@ -207,9 +203,7 @@ else if (param.isOptional) {
207203
if (isThrown) {
208204
swiftWriter.emitStatement("}");
209205
swiftWriter.emitStatement("catch {");
210-
swiftWriter.emitStatement("let nsError = error as NSError");
211-
swiftWriter.emitStatement("let errorString = \"\\(nsError.domain): \\(nsError.code)\"");
212-
swiftWriter.emitStatement("_ = JNI.api.ThrowNew(JNI.env, SwiftErrorClass, errorString)");
206+
Utils.handleError(swiftWriter);
213207
swiftWriter.emitStatement(String.format("return%s", returnSwiftType != null ? " nil" : ""));
214208
swiftWriter.emitStatement("}");
215209
}

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

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -67,9 +67,7 @@ public void generateCode(SwiftWriter swiftWriter, String javaFullName, String sw
6767
swiftWriter.emitStatement(String.format("swiftSelf = try %s.from(javaObject: this)", swiftType));
6868
swiftWriter.emitStatement("}");
6969
swiftWriter.emitStatement("catch {");
70-
swiftWriter.emitStatement("let nsError = error as NSError");
71-
swiftWriter.emitStatement("let errorString = \"\\(nsError.domain): \\(nsError.code)\"");
72-
swiftWriter.emitStatement("_ = JNI.api.ThrowNew(JNI.env, SwiftRuntimeErrorClass, errorString)");
70+
Utils.handleRuntimeError(swiftWriter);
7371
swiftWriter.emitStatement(String.format("return%s", returnSwiftType != null ? " nil" : ""));
7472
swiftWriter.emitStatement("}");
7573
}
@@ -94,9 +92,7 @@ public void generateCode(SwiftWriter swiftWriter, String javaFullName, String sw
9492
}
9593
swiftWriter.emitStatement("}");
9694
swiftWriter.emitStatement("catch {");
97-
swiftWriter.emitStatement("let nsError = error as NSError");
98-
swiftWriter.emitStatement("let errorString = \"\\(nsError.domain): \\(nsError.code)\"");
99-
swiftWriter.emitStatement("_ = JNI.api.ThrowNew(JNI.env, SwiftRuntimeErrorClass, errorString)");
95+
Utils.handleRuntimeError(swiftWriter);
10096
swiftWriter.emitStatement("return nil");
10197
swiftWriter.emitStatement("}");
10298
}

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

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -88,9 +88,7 @@ else if (param.isOptional) {
8888

8989
swiftWriter.emitStatement("}");
9090
swiftWriter.emitStatement("catch {");
91-
swiftWriter.emitStatement("let nsError = error as NSError");
92-
swiftWriter.emitStatement("let errorString = \"\\(nsError.domain): \\(nsError.code)\"");
93-
swiftWriter.emitStatement("_ = JNI.api.ThrowNew(JNI.env, SwiftRuntimeErrorClass, errorString)");
91+
Utils.handleRuntimeError(swiftWriter);
9492
swiftWriter.emitStatement("return");
9593
swiftWriter.emitStatement("}");
9694

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

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.readdle.codegen;
22

3+
import java.io.IOException;
34
import java.util.List;
45

56
import javax.lang.model.element.Element;
@@ -166,10 +167,22 @@ private static void rawTypeToString(StringBuilder result, TypeElement type, char
166167
}
167168
}
168169

169-
public static PackageElement getPackage(Element type) {
170+
private static PackageElement getPackage(Element type) {
170171
while (type.getKind() != ElementKind.PACKAGE) {
171172
type = type.getEnclosingElement();
172173
}
173174
return (PackageElement) type;
174175
}
176+
177+
static void handleRuntimeError(SwiftWriter swiftWriter) throws IOException {
178+
swiftWriter.emitStatement("let nsError = error as NSError");
179+
swiftWriter.emitStatement("let errorString = \"\\(nsError.domain): \\(nsError.code)\"");
180+
swiftWriter.emitStatement("_ = JNI.api.ThrowNew(JNI.env, SwiftRuntimeErrorClass, errorString)");
181+
}
182+
183+
static void handleError(SwiftWriter swiftWriter) throws IOException {
184+
swiftWriter.emitStatement("let nsError = error as NSError");
185+
swiftWriter.emitStatement("let errorString = \"\\(nsError.domain): \\(nsError.code)\"");
186+
swiftWriter.emitStatement("_ = JNI.api.ThrowNew(JNI.env, SwiftErrorClass, errorString)");
187+
}
175188
}

sample/build.gradle

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,18 @@ android {
4343
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
4444
}
4545
}
46+
47+
// Configure only for each module that uses Java 8
48+
// language features (either in its source code or
49+
// through dependencies).
50+
compileOptions {
51+
sourceCompatibility JavaVersion.VERSION_1_8
52+
targetCompatibility JavaVersion.VERSION_1_8
53+
}
54+
// For Kotlin projects
55+
kotlinOptions {
56+
jvmTarget = "1.8"
57+
}
4658
}
4759

4860
tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).all {

sample/src/main/java/com/readdle/swiftjava/sample/SampleValue.kt

Lines changed: 47 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,18 @@ open class SampleValue protected constructor() {
2727
var uint32: UInt = 0U
2828
var uint64: ULong = 0U
2929

30+
var optionalInteger: Int? = 0
31+
var optionalInt8: Byte? = 0
32+
var optionalInt16: Short? = 0
33+
var optionalInt32: Int? = 0
34+
var optionalInt64: Long? = 0
35+
36+
var optionalUint: UInt? = 0U
37+
var optionalUint8: UByte? = 0U
38+
var optionalUint16: UShort? = 0U
39+
var optionalUint32: UInt? = 0U
40+
var optionalUint64: ULong? = 0U
41+
3042
var objectArray: ArrayList<SampleValue> = ArrayList()
3143
var stringArray: ArrayList<String> = ArrayList()
3244
var numberArray: ArrayList<Int> = ArrayList()
@@ -59,34 +71,43 @@ open class SampleValue protected constructor() {
5971
}
6072

6173
override fun toString(): String {
62-
return "SampleValue{" +
63-
"string='" + string + '\'' +
64-
", integer=" + integer +
65-
", int8=" + int8 +
66-
", int16=" + int16 +
67-
", int32=" + int32 +
68-
", int64=" + int64 +
69-
", uint=" + uint +
70-
", uint8=" + uint8 +
71-
", uint16=" + uint16 +
72-
", uint32=" + uint32 +
73-
", uint64=" + uint64 +
74-
", objectArray=" + objectArray +
75-
", stringArray=" + stringArray +
76-
", numberArray=" + numberArray +
77-
", arrayInArray=" + arrayInArray +
78-
", dictInArray=" + dictInArray +
79-
", dictSampleClass=" + dictSampleClass +
80-
", dictStrings=" + dictStrings +
81-
", dictNumbers=" + dictNumbers +
82-
", dict64Numbers=" + dict64Numbers +
83-
", dictInDict=" + dictInDict +
84-
", arrayInDict=" + arrayInDict +
85-
", set=" + set +
86-
", setValues=" + setValues +
87-
'}'
74+
return "SampleValue(string='$string', " +
75+
"integer=$integer," +
76+
" int8=$int8, " +
77+
"int16=$int16, " +
78+
"int32=$int32, " +
79+
"int64=$int64, " +
80+
"uint=$uint, " +
81+
"uint8=$uint8, " +
82+
"uint16=$uint16, " +
83+
"uint32=$uint32, " +
84+
"uint64=$uint64, " +
85+
"optionalInteger=$optionalInteger, " +
86+
"optionalInt8=$optionalInt8, " +
87+
"optionalInt16=$optionalInt16, " +
88+
"optionalInt32=$optionalInt32, " +
89+
"optionalInt64=$optionalInt64, " +
90+
"optionalUint=$optionalUint, " +
91+
"optionalUint8=$optionalUint8, " +
92+
"optionalUint16=$optionalUint16, " +
93+
"optionalUint32=$optionalUint32, " +
94+
"optionalUint64=$optionalUint64, " +
95+
"objectArray=$objectArray, " +
96+
"stringArray=$stringArray, " +
97+
"numberArray=$numberArray, " +
98+
"arrayInArray=$arrayInArray, " +
99+
"dictInArray=$dictInArray, " +
100+
"dictSampleClass=$dictSampleClass, " +
101+
"dictStrings=$dictStrings, " +
102+
"dictNumbers=$dictNumbers, " +
103+
"dict64Numbers=$dict64Numbers, " +
104+
"dictInDict=$dictInDict, " +
105+
"arrayInDict=$arrayInDict, " +
106+
"set=$set, " +
107+
"setValues=$setValues)"
88108
}
89109

110+
90111
companion object {
91112
@JvmStatic
92113
val randomValue: SampleValue external get

sample/src/main/swift/Sources/SampleAppCore/SampleValue.swift

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,18 @@ public struct SampleValue: Codable, Hashable {
1616
public var uint32: UInt32 = 32
1717
public var uint64: UInt64 = 64
1818

19+
public var optionalInteger: Int? = 32
20+
public var optionalInt8: Int8? = 8
21+
public var optionalInt16: Int16? = 16
22+
public var optionalInt32: Int32? = 32
23+
public var optionalInt64: Int64? = 64
24+
25+
public var optionalUint: UInt? = 32
26+
public var optionalUint8: UInt8? = 8
27+
public var optionalUint16: UInt16? = 16
28+
public var optionalUint32: UInt32? = 32
29+
public var optionalUint64: UInt64? = 64
30+
1931
public var objectArray: [SampleValue] = []
2032
public var stringArray: [String] = ["one", "two", "free"]
2133
public var numberArray: [Int] = [1, 2, 3]

0 commit comments

Comments
 (0)