what-the-bank/sources/org/simpleframework/xml/strategy/ReadGraph.java

77 lines
2.6 KiB
Java
Raw Normal View History

2024-07-27 18:17:47 +07:00
package org.simpleframework.xml.strategy;
import java.util.HashMap;
import org.simpleframework.xml.stream.Node;
import org.simpleframework.xml.stream.NodeMap;
/* loaded from: classes6.dex */
class ReadGraph extends HashMap {
private final String label;
private final String length;
private final Loader loader;
private final String mark;
private final String refer;
public ReadGraph(Contract contract, Loader loader) {
this.refer = contract.getReference();
this.mark = contract.getIdentity();
this.length = contract.getLength();
this.label = contract.getLabel();
this.loader = loader;
}
public Value read(Type type, NodeMap nodeMap) throws Exception {
Node remove = nodeMap.remove(this.label);
Class type2 = type.getType();
if (type2.isArray()) {
type2 = type2.getComponentType();
}
if (remove != null) {
type2 = this.loader.load(remove.getValue());
}
return readInstance(type, type2, nodeMap);
}
private Value readInstance(Type type, Class cls, NodeMap nodeMap) throws Exception {
Node remove = nodeMap.remove(this.mark);
if (remove == null) {
return readReference(type, cls, nodeMap);
}
String value = remove.getValue();
if (containsKey(value)) {
throw new CycleException("Element '%s' already exists", value);
}
return readValue(type, cls, nodeMap, value);
}
private Value readReference(Type type, Class cls, NodeMap nodeMap) throws Exception {
Node remove = nodeMap.remove(this.refer);
if (remove == null) {
return readValue(type, cls, nodeMap);
}
String value = remove.getValue();
V v = get(value);
if (!containsKey(value)) {
throw new CycleException("Invalid reference '%s' found", value);
}
return new Reference(v, cls);
}
private Value readValue(Type type, Class cls, NodeMap nodeMap) throws Exception {
if (type.getType().isArray()) {
return readArray(type, cls, nodeMap);
}
return new ObjectValue(cls);
}
private Value readValue(Type type, Class cls, NodeMap nodeMap, String str) throws Exception {
Value readValue = readValue(type, cls, nodeMap);
return str != null ? new Allocate(readValue, this, str) : readValue;
}
private Value readArray(Type type, Class cls, NodeMap nodeMap) throws Exception {
Node remove = nodeMap.remove(this.length);
return new ArrayValue(cls, remove != null ? Integer.parseInt(remove.getValue()) : 0);
}
}