package com.google.gson.internal; import com.google.gson.InstanceCreator; import com.google.gson.JsonIOException; import com.google.gson.reflect.TypeToken; import java.lang.reflect.Constructor; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.ParameterizedType; import java.lang.reflect.Type; import java.util.ArrayDeque; import java.util.ArrayList; import java.util.Collection; import java.util.EnumSet; import java.util.LinkedHashMap; import java.util.LinkedHashSet; import java.util.Map; import java.util.Queue; import java.util.Set; import java.util.SortedMap; import java.util.SortedSet; import java.util.TreeMap; import java.util.TreeSet; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentMap; import java.util.concurrent.ConcurrentNavigableMap; import java.util.concurrent.ConcurrentSkipListMap; /* loaded from: classes.dex */ public final class ConstructorConstructor { private final Map> instanceCreators; public ConstructorConstructor(Map> map) { this.instanceCreators = map; } private ObjectConstructor newDefaultConstructor(Class cls) { try { final Constructor declaredConstructor = cls.getDeclaredConstructor(new Class[0]); if (!declaredConstructor.isAccessible()) { declaredConstructor.setAccessible(true); } return new ObjectConstructor() { // from class: com.google.gson.internal.ConstructorConstructor.3 @Override // com.google.gson.internal.ObjectConstructor public T construct() { try { return (T) declaredConstructor.newInstance(null); } catch (IllegalAccessException e) { throw new AssertionError(e); } catch (InstantiationException e2) { throw new RuntimeException("Failed to invoke " + declaredConstructor + " with no args", e2); } catch (InvocationTargetException e3) { throw new RuntimeException("Failed to invoke " + declaredConstructor + " with no args", e3.getTargetException()); } } }; } catch (NoSuchMethodException unused) { return null; } } private ObjectConstructor newDefaultImplementationConstructor(final Type type, Class cls) { if (Collection.class.isAssignableFrom(cls)) { return SortedSet.class.isAssignableFrom(cls) ? new ObjectConstructor() { // from class: com.google.gson.internal.ConstructorConstructor.4 @Override // com.google.gson.internal.ObjectConstructor public T construct() { return (T) new TreeSet(); } } : EnumSet.class.isAssignableFrom(cls) ? new ObjectConstructor() { // from class: com.google.gson.internal.ConstructorConstructor.5 @Override // com.google.gson.internal.ObjectConstructor public T construct() { Type type2 = type; if (!(type2 instanceof ParameterizedType)) { throw new JsonIOException("Invalid EnumSet type: " + type.toString()); } Type type3 = ((ParameterizedType) type2).getActualTypeArguments()[0]; if (type3 instanceof Class) { return (T) EnumSet.noneOf((Class) type3); } throw new JsonIOException("Invalid EnumSet type: " + type.toString()); } } : Set.class.isAssignableFrom(cls) ? new ObjectConstructor() { // from class: com.google.gson.internal.ConstructorConstructor.6 @Override // com.google.gson.internal.ObjectConstructor public T construct() { return (T) new LinkedHashSet(); } } : Queue.class.isAssignableFrom(cls) ? new ObjectConstructor() { // from class: com.google.gson.internal.ConstructorConstructor.7 @Override // com.google.gson.internal.ObjectConstructor public T construct() { return (T) new ArrayDeque(); } } : new ObjectConstructor() { // from class: com.google.gson.internal.ConstructorConstructor.8 @Override // com.google.gson.internal.ObjectConstructor public T construct() { return (T) new ArrayList(); } }; } if (Map.class.isAssignableFrom(cls)) { return ConcurrentNavigableMap.class.isAssignableFrom(cls) ? new ObjectConstructor() { // from class: com.google.gson.internal.ConstructorConstructor.9 @Override // com.google.gson.internal.ObjectConstructor public T construct() { return (T) new ConcurrentSkipListMap(); } } : ConcurrentMap.class.isAssignableFrom(cls) ? new ObjectConstructor() { // from class: com.google.gson.internal.ConstructorConstructor.10 @Override // com.google.gson.internal.ObjectConstructor public T construct() { return (T) new ConcurrentHashMap(); } } : SortedMap.class.isAssignableFrom(cls) ? new ObjectConstructor() { // from class: com.google.gson.internal.ConstructorConstructor.11 @Override // com.google.gson.internal.ObjectConstructor public T construct() { return (T) new TreeMap(); } } : (!(type instanceof ParameterizedType) || String.class.isAssignableFrom(TypeToken.get(((ParameterizedType) type).getActualTypeArguments()[0]).getRawType())) ? new ObjectConstructor() { // from class: com.google.gson.internal.ConstructorConstructor.13 @Override // com.google.gson.internal.ObjectConstructor public T construct() { return (T) new LinkedTreeMap(); } } : new ObjectConstructor() { // from class: com.google.gson.internal.ConstructorConstructor.12 @Override // com.google.gson.internal.ObjectConstructor public T construct() { return (T) new LinkedHashMap(); } }; } return null; } private ObjectConstructor newUnsafeAllocator(final Type type, final Class cls) { return new ObjectConstructor() { // from class: com.google.gson.internal.ConstructorConstructor.14 private final UnsafeAllocator unsafeAllocator = UnsafeAllocator.create(); @Override // com.google.gson.internal.ObjectConstructor public T construct() { try { return (T) this.unsafeAllocator.newInstance(cls); } catch (Exception e) { throw new RuntimeException("Unable to invoke no-args constructor for " + type + ". Registering an InstanceCreator with Gson for this type may fix this problem.", e); } } }; } public ObjectConstructor get(TypeToken typeToken) { final Type type = typeToken.getType(); Class rawType = typeToken.getRawType(); final InstanceCreator instanceCreator = this.instanceCreators.get(type); if (instanceCreator != null) { return new ObjectConstructor() { // from class: com.google.gson.internal.ConstructorConstructor.1 @Override // com.google.gson.internal.ObjectConstructor public T construct() { return (T) instanceCreator.createInstance(type); } }; } final InstanceCreator instanceCreator2 = this.instanceCreators.get(rawType); if (instanceCreator2 != null) { return new ObjectConstructor() { // from class: com.google.gson.internal.ConstructorConstructor.2 @Override // com.google.gson.internal.ObjectConstructor public T construct() { return (T) instanceCreator2.createInstance(type); } }; } ObjectConstructor newDefaultConstructor = newDefaultConstructor(rawType); if (newDefaultConstructor != null) { return newDefaultConstructor; } ObjectConstructor newDefaultImplementationConstructor = newDefaultImplementationConstructor(type, rawType); return newDefaultImplementationConstructor != null ? newDefaultImplementationConstructor : newUnsafeAllocator(type, rawType); } public String toString() { return this.instanceCreators.toString(); } }