Dev: improve error messages for NoSuchFieldException for AnyCodable fields in Java class

For discovering any-codable type we use reflection for java class field, that's why this field should be public
This commit is contained in:
Andrew Druk 2018-10-07 12:22:01 +03:00
parent d765698717
commit 58ae49660a
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: "/")