Dev: add check for Fatal errors
This commit is contained in:
parent
0d2bd2b6a8
commit
86d270a328
|
@ -11,7 +11,7 @@ let package = Package(
|
||||||
)
|
)
|
||||||
],
|
],
|
||||||
dependencies: [
|
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")),
|
.package(url: "https://github.com/readdle/swift-anycodable.git", .upToNextMinor(from: "1.0.2")),
|
||||||
],
|
],
|
||||||
targets: [
|
targets: [
|
||||||
|
|
|
@ -164,6 +164,10 @@ public struct JavaCoderConfig {
|
||||||
var locals = [jobject]()
|
var locals = [jobject]()
|
||||||
let javaString = ($0 as! URL).absoluteString.localJavaObject(&locals)
|
let javaString = ($0 as! URL).absoluteString.localJavaObject(&locals)
|
||||||
let args = [jvalue(l: javaString)]
|
let args = [jvalue(l: javaString)]
|
||||||
|
JNI.SaveFatalErrorMessage("UriConstructor")
|
||||||
|
defer {
|
||||||
|
JNI.RemoveFatalErrorMessage()
|
||||||
|
}
|
||||||
return JNI.check(JNI.CallStaticObjectMethod(UriClass, methodID: UriConstructor!, args: args)!, &locals)
|
return JNI.check(JNI.CallStaticObjectMethod(UriClass, methodID: UriConstructor!, args: args)!, &locals)
|
||||||
}, decodableClosure: {
|
}, decodableClosure: {
|
||||||
let pathString = JNI.api.CallObjectMethodA(JNI.env, $0, ObjectToStringMethod, nil)
|
let pathString = JNI.api.CallObjectMethodA(JNI.env, $0, ObjectToStringMethod, nil)
|
||||||
|
@ -172,10 +176,22 @@ public struct JavaCoderConfig {
|
||||||
|
|
||||||
RegisterType(type: Data.self, javaClassname: ByteBufferClassname, encodableClosure: {
|
RegisterType(type: Data.self, javaClassname: ByteBufferClassname, encodableClosure: {
|
||||||
let valueData = $0 as! Data
|
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
|
valueData.withUnsafeBytes({ (pointer: UnsafePointer<Int8>) -> Void in
|
||||||
JNI.api.SetByteArrayRegion(JNI.env, byteArray, 0, valueData.count, pointer)
|
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)])!
|
return JNI.CallStaticObjectMethod(ByteBufferClass, methodID: ByteBufferWrap, args: [jvalue(l: byteArray)])!
|
||||||
}, decodableClosure: {
|
}, decodableClosure: {
|
||||||
let byteArray = JNI.CallObjectMethod($0, methodID: ByteBufferArray)
|
let byteArray = JNI.CallObjectMethod($0, methodID: ByteBufferArray)
|
||||||
|
@ -186,7 +202,7 @@ public struct JavaCoderConfig {
|
||||||
defer {
|
defer {
|
||||||
JNI.api.ReleaseByteArrayElements(JNI.env, byteArray, pointer, 0)
|
JNI.api.ReleaseByteArrayElements(JNI.env, byteArray, pointer, 0)
|
||||||
}
|
}
|
||||||
return Data.init(bytes: pointer, count: length)
|
return Data(bytes: pointer, count: length)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -419,6 +419,10 @@ class JavaEnumValueEncodingContainer: SingleValueEncodingContainer {
|
||||||
// If jniStorage.javaObject == nil its enum, else optionSet
|
// If jniStorage.javaObject == nil its enum, else optionSet
|
||||||
if jniStorage.javaObject == nil {
|
if jniStorage.javaObject == nil {
|
||||||
let valueOfMethodID = try JNI.getStaticJavaMethod(forClass: javaClass, method: "valueOf", sig: "(\(rawValue.type.sig))L\(javaClass);")
|
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 {
|
guard let javaObject = JNI.CallStaticObjectMethod(clazz, methodID: valueOfMethodID, args: [jvalue(l: rawValue.javaObject)]) else {
|
||||||
throw JavaCodingError.nilNotSupported("\(javaClass).valueOf()")
|
throw JavaCodingError.nilNotSupported("\(javaClass).valueOf()")
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue