Skip to content

Commit d875597

Browse files
committed
Dev: improve throws support for both SwiftFunc and SwiftCallbackFunc
1 parent 22d7c01 commit d875597

File tree

2 files changed

+36
-20
lines changed

2 files changed

+36
-20
lines changed

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

Lines changed: 27 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -102,11 +102,11 @@ void generateCode(SwiftWriter swiftWriter, String javaFullName, String swiftType
102102
}
103103

104104
if (returnSwiftType == null) {
105-
swiftWriter.emit(") {\n");
105+
swiftWriter.emit(String.format(")%s {\n", isThrown ? " throws" : ""));
106106
}
107107
else {
108108
String returnParamType = isReturnTypeOptional ? returnSwiftType.swiftType + "?" : returnSwiftType.swiftType;
109-
swiftWriter.emit(String.format(") -> %s {\n", returnParamType));
109+
swiftWriter.emit(String.format(")%s -> %s {\n", isThrown ? " throws" : "", returnParamType));
110110
}
111111

112112
for (SwiftParamDescriptor param : params) {
@@ -173,20 +173,36 @@ else if (isReturnTypeOptional) {
173173
}
174174

175175
if (returnSwiftType != null) {
176-
swiftWriter.emit(String.format(") else { %s }\n", isReturnTypeOptional ? "return nil" : "fatalError(\"Don't support nil here!\")"));
176+
swiftWriter.emit(") else {");
177+
swiftWriter.emitStatement("if let throwable = JNI.ExceptionCheck() {");
178+
if (isThrown) {
179+
swiftWriter.emitStatement("throw NSError(domain: \"JavaException\", code: 1)");
180+
}
181+
else {
182+
swiftWriter.emitStatement("fatalError(\"Don't support exception here!\")");
183+
}
184+
swiftWriter.emitStatement("} else {");
185+
if (isReturnTypeOptional) {
186+
swiftWriter.emitStatement("return nil");
187+
}
188+
else {
189+
swiftWriter.emitStatement("fatalError(\"Don't support nil here!\")");
190+
}
191+
swiftWriter.emitStatement("}");
192+
swiftWriter.emitStatement("}");
177193
}
178194
else {
179195
swiftWriter.emit(")\n");
180-
}
181196

182-
swiftWriter.emitStatement("if let throwable = JNI.ExceptionCheck() {");
183-
if (isThrown) {
184-
swiftWriter.emitStatement("throw NSError(domain: \"JavaException\", code: 1)");
185-
}
186-
else {
187-
swiftWriter.emitStatement("fatalError(\"JavaException\")");
197+
swiftWriter.emitStatement("if let throwable = JNI.ExceptionCheck() {");
198+
if (isThrown) {
199+
swiftWriter.emitStatement("throw NSError(domain: \"JavaException\", code: 1)");
200+
}
201+
else {
202+
swiftWriter.emitStatement("fatalError(\"JavaException\")");
203+
}
204+
swiftWriter.emitStatement("}");
188205
}
189-
swiftWriter.emitStatement("}");
190206

191207
if (returnSwiftType != null) {
192208
swiftWriter.emitStatement("do {");

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

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -142,15 +142,6 @@ public void generateCode(SwiftWriter swiftWriter, String javaFullName, String sw
142142
}
143143
swiftWriter.emit(")\n");
144144

145-
if (isThrown) {
146-
swiftWriter.emitStatement("}");
147-
swiftWriter.emitStatement("catch {");
148-
swiftWriter.emitStatement("let errorString = String(reflecting: type(of: error)) + String(describing: error)");
149-
swiftWriter.emitStatement("JNI.api.ThrowNew(JNI.env, SwiftErrorClass, errorString)");
150-
swiftWriter.emitStatement(String.format("return%s", returnSwiftType != null ? " nil" : ""));
151-
swiftWriter.emitStatement("}");
152-
}
153-
154145
if (returnSwiftType != null) {
155146
swiftWriter.emitStatement("do {");
156147
if (isReturnTypeOptional) {
@@ -167,6 +158,15 @@ public void generateCode(SwiftWriter swiftWriter, String javaFullName, String sw
167158
swiftWriter.emitStatement("}");
168159
}
169160

161+
if (isThrown) {
162+
swiftWriter.emitStatement("}");
163+
swiftWriter.emitStatement("catch {");
164+
swiftWriter.emitStatement("let errorString = String(reflecting: type(of: error)) + String(describing: error)");
165+
swiftWriter.emitStatement("JNI.api.ThrowNew(JNI.env, SwiftErrorClass, errorString)");
166+
swiftWriter.emitStatement(String.format("return%s", returnSwiftType != null ? " nil" : ""));
167+
swiftWriter.emitStatement("}");
168+
}
169+
170170
swiftWriter.emitStatement("}");
171171

172172
swiftWriter.emitEmptyLine();

0 commit comments

Comments
 (0)