Dev: add check for Fatal errors

This commit is contained in:
Andrew Druk 2019-04-09 14:36:21 +03:00
parent 0d2bd2b6a8
commit 86d270a328
3 changed files with 23 additions and 3 deletions

View File

@ -11,7 +11,7 @@ let package = Package(
)
],
dependencies: [
.package(url: "https://github.com/readdle/java_swift.git", .upToNextMinor(from: "2.1.4")),
.package(url: "https://github.com/readdle/java_swift.git", .upToNextMinor(from: "2.1.5")),
.package(url: "https://github.com/readdle/swift-anycodable.git", .upToNextMinor(from: "1.0.2")),
],
targets: [

View File

@ -164,6 +164,10 @@ public struct JavaCoderConfig {
var locals = [jobject]()
let javaString = ($0 as! URL).absoluteString.localJavaObject(&locals)
let args = [jvalue(l: javaString)]
JNI.SaveFatalErrorMessage("UriConstructor")
defer {
JNI.RemoveFatalErrorMessage()
}
return JNI.check(JNI.CallStaticObjectMethod(UriClass, methodID: UriConstructor!, args: args)!, &locals)
}, decodableClosure: {
let pathString = JNI.api.CallObjectMethodA(JNI.env, $0, ObjectToStringMethod, nil)
@ -172,10 +176,22 @@ public struct JavaCoderConfig {
RegisterType(type: Data.self, javaClassname: ByteBufferClassname, encodableClosure: {
let valueData = $0 as! Data
let byteArray = JNI.api.NewByteArray(JNI.env, valueData.count)!
let byteArray = JNI.api.NewByteArray(JNI.env, valueData.count)
if let throwable = JNI.ExceptionCheck() {
throw EncodingError.invalidValue($0, EncodingError.Context(codingPath: [],
debugDescription: "Can't create NewByteArray \(valueData.count)"))
}
valueData.withUnsafeBytes({ (pointer: UnsafePointer<Int8>) -> Void in
JNI.api.SetByteArrayRegion(JNI.env, byteArray, 0, valueData.count, pointer)
})
if let throwable = JNI.ExceptionCheck() {
throw EncodingError.invalidValue($0, EncodingError.Context(codingPath: [],
debugDescription: "SetByteArrayRegion failed \(valueData.count)"))
}
JNI.SaveFatalErrorMessage("java/nio/ByteBuffer wrap")
defer {
JNI.RemoveFatalErrorMessage()
}
return JNI.CallStaticObjectMethod(ByteBufferClass, methodID: ByteBufferWrap, args: [jvalue(l: byteArray)])!
}, decodableClosure: {
let byteArray = JNI.CallObjectMethod($0, methodID: ByteBufferArray)
@ -186,7 +202,7 @@ public struct JavaCoderConfig {
defer {
JNI.api.ReleaseByteArrayElements(JNI.env, byteArray, pointer, 0)
}
return Data.init(bytes: pointer, count: length)
return Data(bytes: pointer, count: length)
})
}

View File

@ -419,6 +419,10 @@ class JavaEnumValueEncodingContainer: SingleValueEncodingContainer {
// If jniStorage.javaObject == nil its enum, else optionSet
if jniStorage.javaObject == nil {
let valueOfMethodID = try JNI.getStaticJavaMethod(forClass: javaClass, method: "valueOf", sig: "(\(rawValue.type.sig))L\(javaClass);")
JNI.SaveFatalErrorMessage("\(javaClass) valueOf \(rawValue.type.sig)")
defer {
JNI.RemoveFatalErrorMessage()
}
guard let javaObject = JNI.CallStaticObjectMethod(clazz, methodID: valueOfMethodID, args: [jvalue(l: rawValue.javaObject)]) else {
throw JavaCodingError.nilNotSupported("\(javaClass).valueOf()")
}