Fix adapters order
This commit is contained in:
parent
74593538dc
commit
135d71bb44
@ -30,6 +30,7 @@ public abstract class MoshiPolymorphic<OBJ> {
|
||||
private Moshi abstractMoshi;
|
||||
private final Map<Class<?>, JsonAdapter<OBJ>> abstractClassesSerializers = new ConcurrentHashMap<>();
|
||||
private final Map<Class<?>, JsonAdapter<OBJ>> concreteClassesSerializers = new ConcurrentHashMap<>();
|
||||
private final Map<Class<?>, JsonAdapter<?>> extraClassesSerializers = new ConcurrentHashMap<>();
|
||||
private final Map<String, JsonAdapter<OBJ>> customAdapters = new ConcurrentHashMap<>();
|
||||
|
||||
public MoshiPolymorphic() {
|
||||
@ -49,14 +50,17 @@ public abstract class MoshiPolymorphic<OBJ> {
|
||||
var concreteClasses = getConcreteClasses();
|
||||
var extraAdapters = getExtraAdapters();
|
||||
|
||||
extraAdapters.forEach(abstractMoshiBuilder::addLast);
|
||||
extraAdapters.forEach((extraClass, jsonAdapter) -> {
|
||||
extraClassesSerializers.put(extraClass, jsonAdapter);
|
||||
abstractMoshiBuilder.add(extraClass, jsonAdapter);
|
||||
});
|
||||
|
||||
for (Class<?> declaredClass : abstractClasses) {
|
||||
var name = fixType(declaredClass.getSimpleName());
|
||||
JsonAdapter<OBJ> adapter = new PolymorphicAdapter<>(name);
|
||||
abstractClassesSerializers.put(declaredClass, adapter);
|
||||
customAdapters.put(name, adapter);
|
||||
abstractMoshiBuilder.addLast(declaredClass, adapter);
|
||||
abstractMoshiBuilder.add(declaredClass, adapter);
|
||||
}
|
||||
|
||||
for (Class<?> declaredClass : concreteClasses) {
|
||||
@ -64,7 +68,7 @@ public abstract class MoshiPolymorphic<OBJ> {
|
||||
JsonAdapter<OBJ> adapter = new NormalValueAdapter<>(name, declaredClass);
|
||||
concreteClassesSerializers.put(declaredClass, adapter);
|
||||
customAdapters.put(name, adapter);
|
||||
abstractMoshiBuilder.addLast(declaredClass, adapter);
|
||||
abstractMoshiBuilder.add(declaredClass, adapter);
|
||||
}
|
||||
|
||||
abstractMoshiBuilder.addLast(new RecordsJsonAdapterFactory());
|
||||
@ -85,6 +89,7 @@ public abstract class MoshiPolymorphic<OBJ> {
|
||||
|
||||
public Moshi.Builder registerAdapters(Moshi.Builder moshiBuilder) {
|
||||
initialize();
|
||||
extraClassesSerializers.forEach(moshiBuilder::add);
|
||||
abstractClassesSerializers.forEach(moshiBuilder::add);
|
||||
concreteClassesSerializers.forEach(moshiBuilder::add);
|
||||
return moshiBuilder;
|
||||
|
Loading…
x
Reference in New Issue
Block a user