Dev: fix AnyCodable basic type encoding

This commit is contained in:
Andrew Druk 2017-12-27 17:51:04 +02:00
parent 6883ee4c5c
commit fc83412915
1 changed files with 26 additions and 23 deletions

View File

@ -520,6 +520,12 @@ extension JavaEncoder {
} }
else if T.self == AnyCodable.self { else if T.self == AnyCodable.self {
let anyCodableValue = value as! AnyCodable let anyCodableValue = value as! AnyCodable
if let javaClassname = JavaCoderConfig.codableClassNames[anyCodableValue.typeName] {
let encodableClosure = JavaCoderConfig.encodableClosures[anyCodableValue.typeName]!
let javaObject = try encodableClosure(anyCodableValue.value)
storage = JNIStorageObject(type: .object(className: javaClassname), javaObject: javaObject)
}
else {
let storageType: JNIStorageType let storageType: JNIStorageType
let fullClassName: String let fullClassName: String
if anyCodableValue.typeName == AnyCodable.DictionaryTypeName { if anyCodableValue.typeName == AnyCodable.DictionaryTypeName {
@ -530,10 +536,6 @@ extension JavaEncoder {
fullClassName = ArrayListClassname fullClassName = ArrayListClassname
storageType = .anyCodable(codable: .array) 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 fullClassName = package + "/" + anyCodableValue.typeName
storageType = .anyCodable(codable: .object(className: fullClassName)) storageType = .anyCodable(codable: .object(className: fullClassName))
@ -547,6 +549,7 @@ extension JavaEncoder {
javaObjects.append(storage) javaObjects.append(storage)
try anyCodableValue.encode(to: self) 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))
// We don't create object for enum. Should be created at JavaEnumValueEncodingContainer // We don't create object for enum. Should be created at JavaEnumValueEncodingContainer