Dev: fix typeName compatibility with AnyCodable
This commit is contained in:
parent
0d15cf94df
commit
3b4391a193
|
@ -5,8 +5,8 @@
|
|||
import Foundation
|
||||
import java_swift
|
||||
|
||||
public typealias JavaDecodableClosure = (jobject) throws -> Decodable
|
||||
public typealias JavaEncodableClosure = (Encodable) throws -> jobject
|
||||
public typealias JavaDecodableClosure = (jobject) throws -> Decodable
|
||||
|
||||
public struct JavaCoderConfig {
|
||||
|
||||
|
@ -24,7 +24,7 @@ public struct JavaCoderConfig {
|
|||
defer {
|
||||
closuresLock.unlock()
|
||||
}
|
||||
let typeName = String(reflecting: type)
|
||||
let typeName = String(describing: type)
|
||||
NSLog("JavaCoderConfig register: \(typeName)")
|
||||
codableClassNames[typeName] = javaClassname
|
||||
encodableClosures[typeName] = encodableClosure
|
||||
|
|
|
@ -605,7 +605,7 @@ fileprivate class JavaAnyCodableContainer<K : CodingKey> : KeyedDecodingContaine
|
|||
extension JavaDecoder {
|
||||
|
||||
fileprivate func unbox<T: Decodable>(type: T.Type, javaObject: jobject) throws -> T {
|
||||
let typeName = String(reflecting: type)
|
||||
let typeName = String(describing: type)
|
||||
if let decodableClosure = JavaCoderConfig.decodableClosures[typeName] {
|
||||
return try decodableClosure(javaObject) as! T
|
||||
}
|
||||
|
@ -653,7 +653,7 @@ extension JavaDecoder {
|
|||
}
|
||||
|
||||
fileprivate func getJavaClassname<T>(forType: T.Type) -> String {
|
||||
let typeName = String(reflecting: forType)
|
||||
let typeName = String(describing: forType)
|
||||
if let className = JavaCoderConfig.codableClassNames[typeName] {
|
||||
return className
|
||||
}
|
||||
|
|
|
@ -513,7 +513,7 @@ extension JavaEncoder {
|
|||
|
||||
fileprivate func box<T: Encodable>(_ value: T) throws -> JNIStorageObject {
|
||||
let storage: JNIStorageObject
|
||||
let typeName = String(reflecting: type(of: value))
|
||||
let typeName = String(describing: type(of: value))
|
||||
if let encodableClosure = JavaCoderConfig.encodableClosures[typeName] {
|
||||
let javaObject = try encodableClosure(value)
|
||||
storage = JNIStorageObject(type: .object(className: JavaCoderConfig.codableClassNames[typeName]!), javaObject: javaObject)
|
||||
|
@ -530,6 +530,10 @@ extension JavaEncoder {
|
|||
fullClassName = ArrayListClassname
|
||||
storageType = .anyCodable(codable: .array)
|
||||
}
|
||||
else if let javaClassname = JavaCoderConfig.codableClassNames[anyCodableValue.typeName] {
|
||||
fullClassName = javaClassname
|
||||
storageType = .anyCodable(codable: .object(className: fullClassName))
|
||||
}
|
||||
else {
|
||||
fullClassName = package + "/" + anyCodableValue.typeName
|
||||
storageType = .anyCodable(codable: .object(className: fullClassName))
|
||||
|
|
Loading…
Reference in New Issue