Dev: fix AnyCodable basic type encoding
This commit is contained in:
parent
6883ee4c5c
commit
fc83412915
|
@ -520,32 +520,35 @@ extension JavaEncoder {
|
||||||
}
|
}
|
||||||
else if T.self == AnyCodable.self {
|
else if T.self == AnyCodable.self {
|
||||||
let anyCodableValue = value as! AnyCodable
|
let anyCodableValue = value as! AnyCodable
|
||||||
let storageType: JNIStorageType
|
if let javaClassname = JavaCoderConfig.codableClassNames[anyCodableValue.typeName] {
|
||||||
let fullClassName: String
|
let encodableClosure = JavaCoderConfig.encodableClosures[anyCodableValue.typeName]!
|
||||||
if anyCodableValue.typeName == AnyCodable.DictionaryTypeName {
|
let javaObject = try encodableClosure(anyCodableValue.value)
|
||||||
fullClassName = HashMapClassname
|
storage = JNIStorageObject(type: .object(className: javaClassname), javaObject: javaObject)
|
||||||
storageType = .anyCodable(codable: .dictionary)
|
|
||||||
}
|
|
||||||
else if anyCodableValue.typeName == AnyCodable.ArrayTypeName {
|
|
||||||
fullClassName = ArrayListClassname
|
|
||||||
storageType = .anyCodable(codable: .array)
|
|
||||||
}
|
|
||||||
else if let javaClassname = JavaCoderConfig.codableClassNames[anyCodableValue.typeName] {
|
|
||||||
fullClassName = javaClassname
|
|
||||||
storageType = .anyCodable(codable: .object(className: fullClassName))
|
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
fullClassName = package + "/" + anyCodableValue.typeName
|
let storageType: JNIStorageType
|
||||||
storageType = .anyCodable(codable: .object(className: fullClassName))
|
let fullClassName: String
|
||||||
|
if anyCodableValue.typeName == AnyCodable.DictionaryTypeName {
|
||||||
|
fullClassName = HashMapClassname
|
||||||
|
storageType = .anyCodable(codable: .dictionary)
|
||||||
|
}
|
||||||
|
else if anyCodableValue.typeName == AnyCodable.ArrayTypeName {
|
||||||
|
fullClassName = ArrayListClassname
|
||||||
|
storageType = .anyCodable(codable: .array)
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
fullClassName = package + "/" + anyCodableValue.typeName
|
||||||
|
storageType = .anyCodable(codable: .object(className: fullClassName))
|
||||||
|
}
|
||||||
|
let javaClass = try JNI.getJavaClass(fullClassName)
|
||||||
|
let emptyConstructor = try JNI.getJavaEmptyConstructor(forClass: fullClassName)
|
||||||
|
guard let javaObject = JNI.api.NewObjectA(JNI.env, javaClass, emptyConstructor, nil) else {
|
||||||
|
throw JavaCodingError.cantCreateObject(fullClassName)
|
||||||
|
}
|
||||||
|
storage = JNIStorageObject(type: storageType, javaObject: javaObject)
|
||||||
|
javaObjects.append(storage)
|
||||||
|
try anyCodableValue.encode(to: self)
|
||||||
}
|
}
|
||||||
let javaClass = try JNI.getJavaClass(fullClassName)
|
|
||||||
let emptyConstructor = try JNI.getJavaEmptyConstructor(forClass: fullClassName)
|
|
||||||
guard let javaObject = JNI.api.NewObjectA(JNI.env, javaClass, emptyConstructor, nil) else {
|
|
||||||
throw JavaCodingError.cantCreateObject(fullClassName)
|
|
||||||
}
|
|
||||||
storage = JNIStorageObject(type: storageType, javaObject: javaObject)
|
|
||||||
javaObjects.append(storage)
|
|
||||||
try anyCodableValue.encode(to: self)
|
|
||||||
}
|
}
|
||||||
else if Mirror(reflecting: value).displayStyle == .enum {
|
else if Mirror(reflecting: value).displayStyle == .enum {
|
||||||
let fullClassName = package + "/" + String(describing: type(of: value))
|
let fullClassName = package + "/" + String(describing: type(of: value))
|
||||||
|
|
Loading…
Reference in New Issue