Skip to content

Commit d2f4b4d

Browse files
committed
Dev: fix throwing fatalError if java crashed
1 parent c30e5eb commit d2f4b4d

File tree

6 files changed

+41
-89
lines changed

6 files changed

+41
-89
lines changed

build.gradle

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@ buildscript {
66
}
77

88
dependencies {
9-
classpath 'com.android.tools.build:gradle:3.3.0-beta03'
10-
classpath 'com.readdle.android.swift:gradle:1.1.9'
9+
classpath 'com.android.tools.build:gradle:3.3.0'
10+
classpath 'com.readdle.android.swift:gradle:1.1.10'
1111
classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.8.4'
1212
}
1313
}

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

Lines changed: 13 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -189,59 +189,46 @@ File generateCode() throws IOException {
189189

190190
String jniMethodTemplate;
191191
if (returnSwiftType != null) {
192-
jniMethodTemplate = "guard let result = JNI.CallObjectMethod(self.jniObject, %s.javaMethod%s";
192+
jniMethodTemplate = "let optionalResult = JNI.CallObjectMethod(self.jniObject, %s.javaMethod%s";
193193
}
194194
else {
195195
jniMethodTemplate = "JNI.CallVoidMethod(self.jniObject, %s.javaMethod%s";
196196
}
197-
198197
swiftWriter.emit(String.format(jniMethodTemplate, swiftType, funcName));
199-
200198
for (SwiftParamDescriptor param : params) {
201199
swiftWriter.emit(String.format(", java_%s", param.name));
202200
}
203-
204-
if (returnSwiftType != null) {
205-
swiftWriter.emitStatement(") else {");
206-
swiftWriter.emitStatement(isReturnTypeOptional ? "return nil" : "fatalError(\"Don't support nil here!\")");
207-
swiftWriter.emitStatement("}");
208-
}
209-
else {
210-
swiftWriter.emit(")\n");
211-
}
201+
swiftWriter.emit(")\n");
212202

213203
swiftWriter.emitStatement("if let throwable = JNI.ExceptionCheck() {");
204+
swiftWriter.emitStatement("let javaThrowable = Throwable(javaObject: throwable)");
205+
swiftWriter.emitStatement("javaThrowable.printStackTrace()");
214206
if (isThrown) {
215207
swiftWriter.emitStatement("if let error = try? NSError.from(javaObject: throwable) {");
216208
swiftWriter.emitStatement("throw error");
217209
swiftWriter.emitStatement("}");
218210
swiftWriter.emitStatement("else {");
219-
swiftWriter.emitStatement("fatalError(\"JavaException\")");
211+
swiftWriter.emitStatement("fatalError(\"UnknownJavaException\")");
220212
swiftWriter.emitStatement("}");
221213
}
222214
else {
223-
swiftWriter.emitStatement("if let error = try? NSError.from(javaObject: throwable) {");
224-
swiftWriter.emitStatement("fatalError(\"JavaException: \\(error) \")");
225-
swiftWriter.emitStatement("}");
226-
swiftWriter.emitStatement("else {");
227-
swiftWriter.emitStatement("fatalError(\"JavaException\")");
228-
swiftWriter.emitStatement("}");
215+
swiftWriter.emitStatement("fatalError(\"\\(javaThrowable.className()): \\(javaThrowable.getMessage())\\(javaThrowable.stackTraceString())\")");
229216
}
230217
swiftWriter.emitStatement("}");
231218

232219
if (returnSwiftType != null) {
220+
swiftWriter.emitStatement("guard let result = optionalResult else {");
221+
swiftWriter.emitStatement(isReturnTypeOptional ? "return nil" : "fatalError(\"Don't support nil here!\")");
222+
swiftWriter.emitStatement("}");
223+
swiftWriter.emitStatement("defer {");
224+
swiftWriter.emitStatement("JNI.DeleteLocalRef(result)");
225+
swiftWriter.emitStatement("}");
233226
swiftWriter.emitStatement("do {");
234227
swiftWriter.emitStatement(String.format("return try %s.from(javaObject: result)", returnSwiftType.swiftConstructorType));
235228
swiftWriter.emitStatement("}");
236229
swiftWriter.emitStatement("catch {");
237230
swiftWriter.emitStatement("let errorString = String(reflecting: type(of: error)) + String(describing: error)");
238-
if (returnSwiftType == null) {
239-
swiftWriter.emitStatement("assert(false, errorString)");
240-
swiftWriter.emitStatement("return");
241-
}
242-
else {
243-
swiftWriter.emitStatement("fatalError(errorString)");
244-
}
231+
swiftWriter.emitStatement("fatalError(errorString)");
245232
swiftWriter.emitStatement("}");
246233
}
247234

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

Lines changed: 20 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -171,10 +171,10 @@ void generateCode(SwiftWriter swiftWriter, String javaFullName, String swiftType
171171
String jniMethodTemplate;
172172
if (returnSwiftType != null) {
173173
if (!isStatic) {
174-
jniMethodTemplate = "guard let result = JNI.CallObjectMethod(jniObject, %s.javaMethod%s";
174+
jniMethodTemplate = "let optionalResult = JNI.CallObjectMethod(jniObject, %s.javaMethod%s";
175175
}
176176
else {
177-
jniMethodTemplate = "guard let result = JNI.CallStaticObjectMethod(javaClass, %s.javaMethod%s";
177+
jniMethodTemplate = "let optionalResult = JNI.CallStaticObjectMethod(javaClass, %s.javaMethod%s";
178178
}
179179
}
180180
else {
@@ -185,67 +185,38 @@ void generateCode(SwiftWriter swiftWriter, String javaFullName, String swiftType
185185
jniMethodTemplate = "JNI.CallStaticVoidMethod(javaClass, %s.javaMethod%s";
186186
}
187187
}
188-
189188
swiftWriter.emit(String.format(jniMethodTemplate, swiftType, javaMethodName));
190-
191189
for (SwiftParamDescriptor param : params) {
192190
swiftWriter.emit(String.format(", java%s", param.name));
193191
}
192+
swiftWriter.emitStatement(")");
194193

195-
if (returnSwiftType != null) {
196-
swiftWriter.emit(") else {");
197-
swiftWriter.emitStatement("if let throwable = JNI.ExceptionCheck() {");
198-
if (isThrown) {
199-
swiftWriter.emitStatement("if let error = try? NSError.from(javaObject: throwable) {");
200-
swiftWriter.emitStatement("throw error");
201-
swiftWriter.emitStatement("}");
202-
swiftWriter.emitStatement("else {");
203-
swiftWriter.emitStatement("fatalError(\"JavaException\")");
204-
swiftWriter.emitStatement("}");
205-
}
206-
else {
207-
swiftWriter.emitStatement("if let error = try? NSError.from(javaObject: throwable) {");
208-
swiftWriter.emitStatement("fatalError(\"JavaException: \\(error) \")");
209-
swiftWriter.emitStatement("}");
210-
swiftWriter.emitStatement("else {");
211-
swiftWriter.emitStatement("fatalError(\"JavaException\")");
212-
swiftWriter.emitStatement("}");
213-
}
194+
swiftWriter.emitStatement("if let throwable = JNI.ExceptionCheck() {");
195+
swiftWriter.emitStatement("let javaThrowable = Throwable(javaObject: throwable)");
196+
swiftWriter.emitStatement("javaThrowable.printStackTrace()");
197+
if (isThrown) {
198+
swiftWriter.emitStatement("if let error = try? NSError.from(javaObject: throwable) {");
199+
swiftWriter.emitStatement("throw error");
214200
swiftWriter.emitStatement("}");
215201
swiftWriter.emitStatement("else {");
216-
if (isReturnTypeOptional) {
217-
swiftWriter.emitStatement("return nil");
218-
}
219-
else {
220-
swiftWriter.emitStatement("fatalError(\"Don't support nil here!\")");
221-
}
222-
swiftWriter.emitStatement("}");
202+
swiftWriter.emitStatement("fatalError(\"UnknownJavaException\")");
223203
swiftWriter.emitStatement("}");
224204
}
225205
else {
226-
swiftWriter.emit(")\n");
227-
228-
swiftWriter.emitStatement("if let throwable = JNI.ExceptionCheck() {");
229-
if (isThrown) {
230-
swiftWriter.emitStatement("if let error = try? NSError.from(javaObject: throwable) {");
231-
swiftWriter.emitStatement("throw error");
232-
swiftWriter.emitStatement("}");
233-
swiftWriter.emitStatement("else {");
234-
swiftWriter.emitStatement("fatalError(\"JavaException\")");
235-
swiftWriter.emitStatement("}");
206+
swiftWriter.emitStatement("fatalError(\"\\(javaThrowable.className()): \\(javaThrowable.getMessage())\\(javaThrowable.stackTraceString())\")");
207+
}
208+
swiftWriter.emitStatement("}");
209+
210+
if (returnSwiftType != null) {
211+
swiftWriter.emitStatement("guard let result = optionalResult else {");
212+
if (isReturnTypeOptional) {
213+
swiftWriter.emitStatement("return nil");
236214
}
237215
else {
238-
swiftWriter.emitStatement("if let error = try? NSError.from(javaObject: throwable) {");
239-
swiftWriter.emitStatement("fatalError(\"JavaException: \\(error) \")");
240-
swiftWriter.emitStatement("}");
241-
swiftWriter.emitStatement("else {");
242-
swiftWriter.emitStatement("fatalError(\"JavaException\")");
243-
swiftWriter.emitStatement("}");
216+
swiftWriter.emitStatement("fatalError(\"Don't support nil here!\")");
244217
}
245218
swiftWriter.emitStatement("}");
246-
}
247219

248-
if (returnSwiftType != null) {
249220
swiftWriter.emitStatement("defer {");
250221
swiftWriter.emitStatement("JNI.DeleteLocalRef(result)");
251222
swiftWriter.emitStatement("}");
@@ -254,13 +225,7 @@ void generateCode(SwiftWriter swiftWriter, String javaFullName, String swiftType
254225
swiftWriter.emitStatement("}");
255226
swiftWriter.emitStatement("catch {");
256227
swiftWriter.emitStatement("let errorString = String(reflecting: type(of: error)) + String(describing: error)");
257-
if (returnSwiftType == null) {
258-
swiftWriter.emitStatement("assert(false, errorString)");
259-
swiftWriter.emitStatement("return");
260-
}
261-
else {
262-
swiftWriter.emitStatement("fatalError(errorString)");
263-
}
228+
swiftWriter.emitStatement("fatalError(errorString)");
264229
swiftWriter.emitStatement("}");
265230
}
266231

gradle.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
GROUP=com.readdle.swift.java.codegen
2-
VERSION_NAME=0.6.11
2+
VERSION_NAME=0.6.12
33

44
org.gradle.jvmargs=-Xmx1536m

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -122,8 +122,8 @@ public void testException() {
122122
Exception exception1 = new Exception("");
123123
Exception exception2 = new Exception("QWERTY");
124124
Exception exception3 = new Exception("QWERTY:1");
125-
Assert.assertTrue(sampleReference.exceptionCheck(exception1).getMessage().equals("JavaException:0"));
126-
Assert.assertTrue(sampleReference.exceptionCheck(exception2).getMessage().equals(exception2.getMessage() + ":0"));
125+
Assert.assertTrue(sampleReference.exceptionCheck(exception1).getMessage().equals("java.lang.Exception:0"));
126+
Assert.assertTrue(sampleReference.exceptionCheck(exception2).getMessage().equals("java.lang.Exception:0"));
127127
Assert.assertTrue(sampleReference.exceptionCheck(exception3).getMessage().equals(exception3.getMessage()));
128128
}
129129

sample/src/main/swift/Package.swift

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -57,9 +57,9 @@ let package = Package(
5757
products: addGenerated([
5858
]),
5959
dependencies: [
60-
.package(url: "https://github.com/readdle/java_swift.git", .exact("2.1.2")),
61-
.package(url: "https://github.com/readdle/swift-java.git", .exact("0.1.3")),
62-
.package(url: "https://github.com/readdle/swift-java-coder.git", .exact("1.0.3")),
60+
.package(url: "https://github.com/readdle/java_swift.git", .exact("2.1.3")),
61+
.package(url: "https://github.com/readdle/swift-java.git", .exact("0.1.5")),
62+
.package(url: "https://github.com/readdle/swift-java-coder.git", .exact("1.0.5")),
6363
.package(url: "https://github.com/readdle/swift-anycodable.git", .exact("1.0.0")),
6464
],
6565
targets: addGenerated([

0 commit comments

Comments
 (0)