Merge pull request #3 from readdle/fix/improve-error-messages

Dev: improve error messages for NoSuchFieldException
This commit is contained in:
Andriy Druk 2018-10-21 17:52:21 +03:00 committed by GitHub
commit 0dd2f9bb4f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 6 additions and 1 deletions

View File

@ -202,7 +202,12 @@ fileprivate class JavaObjectContainer<K : CodingKey> : KeyedDecodingContainerPro
var locals = [jobject]()
let cls = JNI.api.GetObjectClass(JNI.env, javaObject)!
let javaTypename = key.stringValue.localJavaObject(&locals)
let field = JNI.CallObjectMethod(cls, methodID: ClassGetFieldMethod, args: [jvalue(l: javaTypename)])!
guard let field = JNI.CallObjectMethod(cls, ClassGetFieldMethod, javaTypename!) else {
JNI.ExceptionReset()
let errorMessage = "\(javaClass).\(key.stringValue): JavaDecoder uses reflection for AnyCodable, " +
"probably \(key.stringValue) field not public"
throw JavaCodingError.cantFindObject(errorMessage)
}
let fieldClass = JNI.CallObjectMethod(field, methodID: FieldGetTypedMethod, args: [])!
let javaClassName = JNI.api.CallObjectMethodA(JNI.env, fieldClass, ClassGetNameMethod, nil)!
classname = String(javaObject: javaClassName).replacingOccurrences(of: ".", with: "/")