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); } }