Skip to content

Commit 86d270a

Browse files
committed
Dev: add check for Fatal errors
1 parent 0d2bd2b commit 86d270a

File tree

3 files changed

+23
-3
lines changed

3 files changed

+23
-3
lines changed

Package.swift

+1-1
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ let package = Package(
1111
)
1212
],
1313
dependencies: [
14-
.package(url: "https://github.com/readdle/java_swift.git", .upToNextMinor(from: "2.1.4")),
14+
.package(url: "https://github.com/readdle/java_swift.git", .upToNextMinor(from: "2.1.5")),
1515
.package(url: "https://github.com/readdle/swift-anycodable.git", .upToNextMinor(from: "1.0.2")),
1616
],
1717
targets: [

Sources/JavaCoderConfig.swift

+18-2
Original file line numberDiff line numberDiff line change
@@ -164,6 +164,10 @@ public struct JavaCoderConfig {
164164
var locals = [jobject]()
165165
let javaString = ($0 as! URL).absoluteString.localJavaObject(&locals)
166166
let args = [jvalue(l: javaString)]
167+
JNI.SaveFatalErrorMessage("UriConstructor")
168+
defer {
169+
JNI.RemoveFatalErrorMessage()
170+
}
167171
return JNI.check(JNI.CallStaticObjectMethod(UriClass, methodID: UriConstructor!, args: args)!, &locals)
168172
}, decodableClosure: {
169173
let pathString = JNI.api.CallObjectMethodA(JNI.env, $0, ObjectToStringMethod, nil)
@@ -172,10 +176,22 @@ public struct JavaCoderConfig {
172176

173177
RegisterType(type: Data.self, javaClassname: ByteBufferClassname, encodableClosure: {
174178
let valueData = $0 as! Data
175-
let byteArray = JNI.api.NewByteArray(JNI.env, valueData.count)!
179+
let byteArray = JNI.api.NewByteArray(JNI.env, valueData.count)
180+
if let throwable = JNI.ExceptionCheck() {
181+
throw EncodingError.invalidValue($0, EncodingError.Context(codingPath: [],
182+
debugDescription: "Can't create NewByteArray \(valueData.count)"))
183+
}
176184
valueData.withUnsafeBytes({ (pointer: UnsafePointer<Int8>) -> Void in
177185
JNI.api.SetByteArrayRegion(JNI.env, byteArray, 0, valueData.count, pointer)
178186
})
187+
if let throwable = JNI.ExceptionCheck() {
188+
throw EncodingError.invalidValue($0, EncodingError.Context(codingPath: [],
189+
debugDescription: "SetByteArrayRegion failed \(valueData.count)"))
190+
}
191+
JNI.SaveFatalErrorMessage("java/nio/ByteBuffer wrap")
192+
defer {
193+
JNI.RemoveFatalErrorMessage()
194+
}
179195
return JNI.CallStaticObjectMethod(ByteBufferClass, methodID: ByteBufferWrap, args: [jvalue(l: byteArray)])!
180196
}, decodableClosure: {
181197
let byteArray = JNI.CallObjectMethod($0, methodID: ByteBufferArray)
@@ -186,7 +202,7 @@ public struct JavaCoderConfig {
186202
defer {
187203
JNI.api.ReleaseByteArrayElements(JNI.env, byteArray, pointer, 0)
188204
}
189-
return Data.init(bytes: pointer, count: length)
205+
return Data(bytes: pointer, count: length)
190206
})
191207
}
192208

Sources/JavaEncoder.swift

+4
Original file line numberDiff line numberDiff line change
@@ -419,6 +419,10 @@ class JavaEnumValueEncodingContainer: SingleValueEncodingContainer {
419419
// If jniStorage.javaObject == nil its enum, else optionSet
420420
if jniStorage.javaObject == nil {
421421
let valueOfMethodID = try JNI.getStaticJavaMethod(forClass: javaClass, method: "valueOf", sig: "(\(rawValue.type.sig))L\(javaClass);")
422+
JNI.SaveFatalErrorMessage("\(javaClass) valueOf \(rawValue.type.sig)")
423+
defer {
424+
JNI.RemoveFatalErrorMessage()
425+
}
422426
guard let javaObject = JNI.CallStaticObjectMethod(clazz, methodID: valueOfMethodID, args: [jvalue(l: rawValue.javaObject)]) else {
423427
throw JavaCodingError.nilNotSupported("\(javaClass).valueOf()")
424428
}

0 commit comments

Comments
 (0)