663 lines
27 KiB
Java
663 lines
27 KiB
Java
package com.google.gson;
|
|
|
|
import com.airbnb.deeplinkdispatch.UrlTreeKt;
|
|
import com.google.gson.internal.ConstructorConstructor;
|
|
import com.google.gson.internal.Excluder;
|
|
import com.google.gson.internal.Primitives;
|
|
import com.google.gson.internal.Streams;
|
|
import com.google.gson.internal.bind.ArrayTypeAdapter;
|
|
import com.google.gson.internal.bind.CollectionTypeAdapterFactory;
|
|
import com.google.gson.internal.bind.DateTypeAdapter;
|
|
import com.google.gson.internal.bind.JsonAdapterAnnotationTypeAdapterFactory;
|
|
import com.google.gson.internal.bind.JsonTreeReader;
|
|
import com.google.gson.internal.bind.JsonTreeWriter;
|
|
import com.google.gson.internal.bind.MapTypeAdapterFactory;
|
|
import com.google.gson.internal.bind.NumberTypeAdapter;
|
|
import com.google.gson.internal.bind.ObjectTypeAdapter;
|
|
import com.google.gson.internal.bind.ReflectiveTypeAdapterFactory;
|
|
import com.google.gson.internal.bind.TypeAdapters;
|
|
import com.google.gson.internal.sql.SqlTypesSupport;
|
|
import com.google.gson.reflect.TypeToken;
|
|
import com.google.gson.stream.JsonReader;
|
|
import com.google.gson.stream.JsonToken;
|
|
import com.google.gson.stream.JsonWriter;
|
|
import com.google.gson.stream.MalformedJsonException;
|
|
import java.io.EOFException;
|
|
import java.io.IOException;
|
|
import java.io.Reader;
|
|
import java.io.StringReader;
|
|
import java.io.StringWriter;
|
|
import java.io.Writer;
|
|
import java.lang.reflect.Type;
|
|
import java.math.BigDecimal;
|
|
import java.math.BigInteger;
|
|
import java.util.ArrayList;
|
|
import java.util.Collections;
|
|
import java.util.HashMap;
|
|
import java.util.Iterator;
|
|
import java.util.List;
|
|
import java.util.Map;
|
|
import java.util.concurrent.ConcurrentHashMap;
|
|
import java.util.concurrent.atomic.AtomicLong;
|
|
import java.util.concurrent.atomic.AtomicLongArray;
|
|
import o.Vip;
|
|
|
|
/* loaded from: classes.dex */
|
|
public class Gson {
|
|
public static final boolean DEFAULT_COMPLEX_MAP_KEYS = false;
|
|
public static final boolean DEFAULT_ESCAPE_HTML = true;
|
|
public static final boolean DEFAULT_JSON_NON_EXECUTABLE = false;
|
|
public static final boolean DEFAULT_LENIENT = false;
|
|
public static final boolean DEFAULT_PRETTY_PRINT = false;
|
|
public static final boolean DEFAULT_SERIALIZE_NULLS = false;
|
|
public static final boolean DEFAULT_SPECIALIZE_FLOAT_VALUES = false;
|
|
public static final String JSON_NON_EXECUTABLE_PREFIX = ")]}'\n";
|
|
public static final TypeToken<?> NULL_KEY_SURROGATE = TypeToken.get(Object.class);
|
|
public final List<TypeAdapterFactory> builderFactories;
|
|
public final List<TypeAdapterFactory> builderHierarchyFactories;
|
|
public final ThreadLocal<Map<TypeToken<?>, FutureTypeAdapter<?>>> calls;
|
|
public final boolean complexMapKeySerialization;
|
|
public final ConstructorConstructor constructorConstructor;
|
|
public final String datePattern;
|
|
public final int dateStyle;
|
|
public final Excluder excluder;
|
|
public final List<TypeAdapterFactory> factories;
|
|
public final FieldNamingStrategy fieldNamingStrategy;
|
|
public final boolean generateNonExecutableJson;
|
|
public final boolean htmlSafe;
|
|
public final Map<Type, InstanceCreator<?>> instanceCreators;
|
|
public final JsonAdapterAnnotationTypeAdapterFactory jsonAdapterFactory;
|
|
public final boolean lenient;
|
|
public final LongSerializationPolicy longSerializationPolicy;
|
|
public final ToNumberStrategy numberToNumberStrategy;
|
|
public final ToNumberStrategy objectToNumberStrategy;
|
|
public final boolean prettyPrinting;
|
|
public final boolean serializeNulls;
|
|
public final boolean serializeSpecialFloatingPointValues;
|
|
public final int timeStyle;
|
|
public final Map<TypeToken<?>, TypeAdapter<?>> typeTokenCache;
|
|
|
|
public Gson() {
|
|
this(Excluder.DEFAULT, FieldNamingPolicy.IDENTITY, Collections.emptyMap(), false, false, false, true, false, false, false, LongSerializationPolicy.DEFAULT, null, 2, 2, Collections.emptyList(), Collections.emptyList(), Collections.emptyList(), ToNumberPolicy.DOUBLE, ToNumberPolicy.LAZILY_PARSED_NUMBER);
|
|
}
|
|
|
|
/* JADX INFO: Access modifiers changed from: package-private */
|
|
public Gson(Excluder excluder, FieldNamingStrategy fieldNamingStrategy, Map<Type, InstanceCreator<?>> map, boolean z, boolean z2, boolean z3, boolean z4, boolean z5, boolean z6, boolean z7, LongSerializationPolicy longSerializationPolicy, String str, int i, int i2, List<TypeAdapterFactory> list, List<TypeAdapterFactory> list2, List<TypeAdapterFactory> list3, ToNumberStrategy toNumberStrategy, ToNumberStrategy toNumberStrategy2) {
|
|
ArrayList arrayList = new ArrayList(list3);
|
|
arrayList.add(new Vip());
|
|
this.calls = new ThreadLocal<>();
|
|
this.typeTokenCache = new ConcurrentHashMap();
|
|
this.excluder = excluder;
|
|
this.fieldNamingStrategy = fieldNamingStrategy;
|
|
this.instanceCreators = map;
|
|
ConstructorConstructor constructorConstructor = new ConstructorConstructor(map);
|
|
this.constructorConstructor = constructorConstructor;
|
|
this.serializeNulls = z;
|
|
this.complexMapKeySerialization = z2;
|
|
this.generateNonExecutableJson = z3;
|
|
this.htmlSafe = z4;
|
|
this.prettyPrinting = z5;
|
|
this.lenient = z6;
|
|
this.serializeSpecialFloatingPointValues = z7;
|
|
this.longSerializationPolicy = longSerializationPolicy;
|
|
this.datePattern = str;
|
|
this.dateStyle = i;
|
|
this.timeStyle = i2;
|
|
this.builderFactories = list;
|
|
this.builderHierarchyFactories = list2;
|
|
this.objectToNumberStrategy = toNumberStrategy;
|
|
this.numberToNumberStrategy = toNumberStrategy2;
|
|
ArrayList arrayList2 = new ArrayList();
|
|
arrayList2.add(TypeAdapters.JSON_ELEMENT_FACTORY);
|
|
arrayList2.add(ObjectTypeAdapter.getFactory(toNumberStrategy));
|
|
arrayList2.add(excluder);
|
|
arrayList2.addAll(arrayList);
|
|
arrayList2.add(TypeAdapters.STRING_FACTORY);
|
|
arrayList2.add(TypeAdapters.INTEGER_FACTORY);
|
|
arrayList2.add(TypeAdapters.BOOLEAN_FACTORY);
|
|
arrayList2.add(TypeAdapters.BYTE_FACTORY);
|
|
arrayList2.add(TypeAdapters.SHORT_FACTORY);
|
|
TypeAdapter<Number> longAdapter = longAdapter(longSerializationPolicy);
|
|
arrayList2.add(TypeAdapters.newFactory(Long.TYPE, Long.class, longAdapter));
|
|
arrayList2.add(TypeAdapters.newFactory(Double.TYPE, Double.class, doubleAdapter(z7)));
|
|
arrayList2.add(TypeAdapters.newFactory(Float.TYPE, Float.class, floatAdapter(z7)));
|
|
arrayList2.add(NumberTypeAdapter.getFactory(toNumberStrategy2));
|
|
arrayList2.add(TypeAdapters.ATOMIC_INTEGER_FACTORY);
|
|
arrayList2.add(TypeAdapters.ATOMIC_BOOLEAN_FACTORY);
|
|
arrayList2.add(TypeAdapters.newFactory(AtomicLong.class, atomicLongAdapter(longAdapter)));
|
|
arrayList2.add(TypeAdapters.newFactory(AtomicLongArray.class, atomicLongArrayAdapter(longAdapter)));
|
|
arrayList2.add(TypeAdapters.ATOMIC_INTEGER_ARRAY_FACTORY);
|
|
arrayList2.add(TypeAdapters.CHARACTER_FACTORY);
|
|
arrayList2.add(TypeAdapters.STRING_BUILDER_FACTORY);
|
|
arrayList2.add(TypeAdapters.STRING_BUFFER_FACTORY);
|
|
arrayList2.add(TypeAdapters.newFactory(BigDecimal.class, TypeAdapters.BIG_DECIMAL));
|
|
arrayList2.add(TypeAdapters.newFactory(BigInteger.class, TypeAdapters.BIG_INTEGER));
|
|
arrayList2.add(TypeAdapters.URL_FACTORY);
|
|
arrayList2.add(TypeAdapters.URI_FACTORY);
|
|
arrayList2.add(TypeAdapters.UUID_FACTORY);
|
|
arrayList2.add(TypeAdapters.CURRENCY_FACTORY);
|
|
arrayList2.add(TypeAdapters.LOCALE_FACTORY);
|
|
arrayList2.add(TypeAdapters.INET_ADDRESS_FACTORY);
|
|
arrayList2.add(TypeAdapters.BIT_SET_FACTORY);
|
|
arrayList2.add(DateTypeAdapter.FACTORY);
|
|
arrayList2.add(TypeAdapters.CALENDAR_FACTORY);
|
|
if (SqlTypesSupport.SUPPORTS_SQL_TYPES) {
|
|
arrayList2.add(SqlTypesSupport.TIME_FACTORY);
|
|
arrayList2.add(SqlTypesSupport.DATE_FACTORY);
|
|
arrayList2.add(SqlTypesSupport.TIMESTAMP_FACTORY);
|
|
}
|
|
arrayList2.add(ArrayTypeAdapter.FACTORY);
|
|
arrayList2.add(TypeAdapters.CLASS_FACTORY);
|
|
arrayList2.add(new CollectionTypeAdapterFactory(constructorConstructor));
|
|
arrayList2.add(new MapTypeAdapterFactory(constructorConstructor, z2));
|
|
JsonAdapterAnnotationTypeAdapterFactory jsonAdapterAnnotationTypeAdapterFactory = new JsonAdapterAnnotationTypeAdapterFactory(constructorConstructor);
|
|
this.jsonAdapterFactory = jsonAdapterAnnotationTypeAdapterFactory;
|
|
arrayList2.add(jsonAdapterAnnotationTypeAdapterFactory);
|
|
arrayList2.add(TypeAdapters.ENUM_FACTORY);
|
|
arrayList2.add(new ReflectiveTypeAdapterFactory(constructorConstructor, fieldNamingStrategy, excluder, jsonAdapterAnnotationTypeAdapterFactory));
|
|
this.factories = Collections.unmodifiableList(arrayList2);
|
|
}
|
|
|
|
public GsonBuilder newBuilder() {
|
|
return new GsonBuilder(this);
|
|
}
|
|
|
|
private TypeAdapter<Number> doubleAdapter(boolean z) {
|
|
if (z) {
|
|
return TypeAdapters.DOUBLE;
|
|
}
|
|
return new TypeAdapter<Number>(this) { // from class: com.google.gson.Gson.1
|
|
final Gson this$0;
|
|
|
|
{
|
|
this.this$0 = this;
|
|
}
|
|
|
|
@Override // com.google.gson.TypeAdapter
|
|
/* renamed from: read, reason: merged with bridge method [inline-methods] */
|
|
public Number read2(JsonReader jsonReader) throws IOException {
|
|
if (jsonReader.peek() == JsonToken.NULL) {
|
|
jsonReader.nextNull();
|
|
return null;
|
|
}
|
|
return Double.valueOf(jsonReader.nextDouble());
|
|
}
|
|
|
|
@Override // com.google.gson.TypeAdapter
|
|
public void write(JsonWriter jsonWriter, Number number) throws IOException {
|
|
if (number == null) {
|
|
jsonWriter.nullValue();
|
|
} else {
|
|
Gson.checkValidFloatingPoint(number.doubleValue());
|
|
jsonWriter.value(number);
|
|
}
|
|
}
|
|
};
|
|
}
|
|
|
|
private TypeAdapter<Number> floatAdapter(boolean z) {
|
|
if (z) {
|
|
return TypeAdapters.FLOAT;
|
|
}
|
|
return new TypeAdapter<Number>(this) { // from class: com.google.gson.Gson.2
|
|
final Gson this$0;
|
|
|
|
{
|
|
this.this$0 = this;
|
|
}
|
|
|
|
@Override // com.google.gson.TypeAdapter
|
|
/* renamed from: read */
|
|
public Number read2(JsonReader jsonReader) throws IOException {
|
|
if (jsonReader.peek() == JsonToken.NULL) {
|
|
jsonReader.nextNull();
|
|
return null;
|
|
}
|
|
return Float.valueOf((float) jsonReader.nextDouble());
|
|
}
|
|
|
|
@Override // com.google.gson.TypeAdapter
|
|
public void write(JsonWriter jsonWriter, Number number) throws IOException {
|
|
if (number == null) {
|
|
jsonWriter.nullValue();
|
|
} else {
|
|
Gson.checkValidFloatingPoint(number.floatValue());
|
|
jsonWriter.value(number);
|
|
}
|
|
}
|
|
};
|
|
}
|
|
|
|
static void checkValidFloatingPoint(double d) {
|
|
if (Double.isNaN(d) || Double.isInfinite(d)) {
|
|
StringBuilder sb = new StringBuilder();
|
|
sb.append(d);
|
|
sb.append(" is not a valid double value as per JSON specification. To override this behavior, use GsonBuilder.serializeSpecialFloatingPointValues() method.");
|
|
throw new IllegalArgumentException(sb.toString());
|
|
}
|
|
}
|
|
|
|
private static TypeAdapter<Number> longAdapter(LongSerializationPolicy longSerializationPolicy) {
|
|
if (longSerializationPolicy == LongSerializationPolicy.DEFAULT) {
|
|
return TypeAdapters.LONG;
|
|
}
|
|
return new TypeAdapter<Number>() { // from class: com.google.gson.Gson.3
|
|
/* JADX WARN: Can't rename method to resolve collision */
|
|
@Override // com.google.gson.TypeAdapter
|
|
/* renamed from: read */
|
|
public Number read2(JsonReader jsonReader) throws IOException {
|
|
if (jsonReader.peek() == JsonToken.NULL) {
|
|
jsonReader.nextNull();
|
|
return null;
|
|
}
|
|
return Long.valueOf(jsonReader.nextLong());
|
|
}
|
|
|
|
@Override // com.google.gson.TypeAdapter
|
|
public void write(JsonWriter jsonWriter, Number number) throws IOException {
|
|
if (number == null) {
|
|
jsonWriter.nullValue();
|
|
} else {
|
|
jsonWriter.value(number.toString());
|
|
}
|
|
}
|
|
};
|
|
}
|
|
|
|
private static TypeAdapter<AtomicLong> atomicLongAdapter(TypeAdapter<Number> typeAdapter) {
|
|
return new TypeAdapter<AtomicLong>(typeAdapter) { // from class: com.google.gson.Gson.4
|
|
final TypeAdapter val$longAdapter;
|
|
|
|
{
|
|
this.val$longAdapter = typeAdapter;
|
|
}
|
|
|
|
@Override // com.google.gson.TypeAdapter
|
|
public void write(JsonWriter jsonWriter, AtomicLong atomicLong) throws IOException {
|
|
this.val$longAdapter.write(jsonWriter, Long.valueOf(atomicLong.get()));
|
|
}
|
|
|
|
@Override // com.google.gson.TypeAdapter
|
|
/* renamed from: read, reason: avoid collision after fix types in other method */
|
|
public AtomicLong read2(JsonReader jsonReader) throws IOException {
|
|
return new AtomicLong(((Number) this.val$longAdapter.read2(jsonReader)).longValue());
|
|
}
|
|
}.nullSafe();
|
|
}
|
|
|
|
private static TypeAdapter<AtomicLongArray> atomicLongArrayAdapter(TypeAdapter<Number> typeAdapter) {
|
|
return new TypeAdapter<AtomicLongArray>(typeAdapter) { // from class: com.google.gson.Gson.5
|
|
final TypeAdapter val$longAdapter;
|
|
|
|
{
|
|
this.val$longAdapter = typeAdapter;
|
|
}
|
|
|
|
@Override // com.google.gson.TypeAdapter
|
|
public void write(JsonWriter jsonWriter, AtomicLongArray atomicLongArray) throws IOException {
|
|
jsonWriter.beginArray();
|
|
int length = atomicLongArray.length();
|
|
for (int i = 0; i < length; i++) {
|
|
this.val$longAdapter.write(jsonWriter, Long.valueOf(atomicLongArray.get(i)));
|
|
}
|
|
jsonWriter.endArray();
|
|
}
|
|
|
|
@Override // com.google.gson.TypeAdapter
|
|
/* renamed from: read, reason: avoid collision after fix types in other method */
|
|
public AtomicLongArray read2(JsonReader jsonReader) throws IOException {
|
|
ArrayList arrayList = new ArrayList();
|
|
jsonReader.beginArray();
|
|
while (jsonReader.hasNext()) {
|
|
arrayList.add(Long.valueOf(((Number) this.val$longAdapter.read2(jsonReader)).longValue()));
|
|
}
|
|
jsonReader.endArray();
|
|
int size = arrayList.size();
|
|
AtomicLongArray atomicLongArray = new AtomicLongArray(size);
|
|
for (int i = 0; i < size; i++) {
|
|
atomicLongArray.set(i, ((Long) arrayList.get(i)).longValue());
|
|
}
|
|
return atomicLongArray;
|
|
}
|
|
}.nullSafe();
|
|
}
|
|
|
|
public <T> TypeAdapter<T> getAdapter(TypeToken<T> typeToken) {
|
|
boolean z;
|
|
TypeAdapter<T> typeAdapter = (TypeAdapter) this.typeTokenCache.get(typeToken == null ? NULL_KEY_SURROGATE : typeToken);
|
|
if (typeAdapter != null) {
|
|
return typeAdapter;
|
|
}
|
|
Map<TypeToken<?>, FutureTypeAdapter<?>> map = this.calls.get();
|
|
if (map == null) {
|
|
map = new HashMap<>();
|
|
this.calls.set(map);
|
|
z = true;
|
|
} else {
|
|
z = false;
|
|
}
|
|
FutureTypeAdapter<?> futureTypeAdapter = map.get(typeToken);
|
|
if (futureTypeAdapter != null) {
|
|
return futureTypeAdapter;
|
|
}
|
|
try {
|
|
FutureTypeAdapter<?> futureTypeAdapter2 = new FutureTypeAdapter<>();
|
|
map.put(typeToken, futureTypeAdapter2);
|
|
Iterator<TypeAdapterFactory> it = this.factories.iterator();
|
|
while (it.hasNext()) {
|
|
TypeAdapter<T> create = it.next().create(this, typeToken);
|
|
if (create != null) {
|
|
futureTypeAdapter2.setDelegate(create);
|
|
this.typeTokenCache.put(typeToken, create);
|
|
return create;
|
|
}
|
|
}
|
|
StringBuilder sb = new StringBuilder();
|
|
sb.append("GSON (2.8.9) cannot handle ");
|
|
sb.append(typeToken);
|
|
throw new IllegalArgumentException(sb.toString());
|
|
} finally {
|
|
map.remove(typeToken);
|
|
if (z) {
|
|
this.calls.remove();
|
|
}
|
|
}
|
|
}
|
|
|
|
public <T> TypeAdapter<T> getDelegateAdapter(TypeAdapterFactory typeAdapterFactory, TypeToken<T> typeToken) {
|
|
if (!this.factories.contains(typeAdapterFactory)) {
|
|
typeAdapterFactory = this.jsonAdapterFactory;
|
|
}
|
|
boolean z = false;
|
|
for (TypeAdapterFactory typeAdapterFactory2 : this.factories) {
|
|
if (z) {
|
|
TypeAdapter<T> create = typeAdapterFactory2.create(this, typeToken);
|
|
if (create != null) {
|
|
return create;
|
|
}
|
|
} else if (typeAdapterFactory2 == typeAdapterFactory) {
|
|
z = true;
|
|
}
|
|
}
|
|
throw new IllegalArgumentException("GSON cannot serialize ".concat(String.valueOf(typeToken)));
|
|
}
|
|
|
|
public <T> TypeAdapter<T> getAdapter(Class<T> cls) {
|
|
return getAdapter(TypeToken.get((Class) cls));
|
|
}
|
|
|
|
public JsonElement toJsonTree(Object obj) {
|
|
if (obj == null) {
|
|
return JsonNull.INSTANCE;
|
|
}
|
|
return toJsonTree(obj, obj.getClass());
|
|
}
|
|
|
|
public JsonElement toJsonTree(Object obj, Type type) {
|
|
JsonTreeWriter jsonTreeWriter = new JsonTreeWriter();
|
|
toJson(obj, type, jsonTreeWriter);
|
|
return jsonTreeWriter.get();
|
|
}
|
|
|
|
public String toJson(Object obj) {
|
|
if (obj == null) {
|
|
return toJson((JsonElement) JsonNull.INSTANCE);
|
|
}
|
|
return toJson(obj, obj.getClass());
|
|
}
|
|
|
|
public String toJson(Object obj, Type type) {
|
|
StringWriter stringWriter = new StringWriter();
|
|
toJson(obj, type, stringWriter);
|
|
return stringWriter.toString();
|
|
}
|
|
|
|
public void toJson(Object obj, Appendable appendable) throws JsonIOException {
|
|
if (obj != null) {
|
|
toJson(obj, obj.getClass(), appendable);
|
|
} else {
|
|
toJson((JsonElement) JsonNull.INSTANCE, appendable);
|
|
}
|
|
}
|
|
|
|
public void toJson(Object obj, Type type, Appendable appendable) throws JsonIOException {
|
|
try {
|
|
toJson(obj, type, newJsonWriter(Streams.writerForAppendable(appendable)));
|
|
} catch (IOException e) {
|
|
throw new JsonIOException(e);
|
|
}
|
|
}
|
|
|
|
public void toJson(Object obj, Type type, JsonWriter jsonWriter) throws JsonIOException {
|
|
TypeAdapter adapter = getAdapter(TypeToken.get(type));
|
|
boolean isLenient = jsonWriter.isLenient();
|
|
jsonWriter.setLenient(true);
|
|
boolean isHtmlSafe = jsonWriter.isHtmlSafe();
|
|
jsonWriter.setHtmlSafe(this.htmlSafe);
|
|
boolean serializeNulls = jsonWriter.getSerializeNulls();
|
|
jsonWriter.setSerializeNulls(this.serializeNulls);
|
|
try {
|
|
try {
|
|
adapter.write(jsonWriter, obj);
|
|
} catch (IOException e) {
|
|
throw new JsonIOException(e);
|
|
} catch (AssertionError e2) {
|
|
StringBuilder sb = new StringBuilder("AssertionError (GSON 2.8.9): ");
|
|
sb.append(e2.getMessage());
|
|
AssertionError assertionError = new AssertionError(sb.toString());
|
|
assertionError.initCause(e2);
|
|
throw assertionError;
|
|
}
|
|
} finally {
|
|
jsonWriter.setLenient(isLenient);
|
|
jsonWriter.setHtmlSafe(isHtmlSafe);
|
|
jsonWriter.setSerializeNulls(serializeNulls);
|
|
}
|
|
}
|
|
|
|
public String toJson(JsonElement jsonElement) {
|
|
StringWriter stringWriter = new StringWriter();
|
|
toJson(jsonElement, (Appendable) stringWriter);
|
|
return stringWriter.toString();
|
|
}
|
|
|
|
public void toJson(JsonElement jsonElement, Appendable appendable) throws JsonIOException {
|
|
try {
|
|
toJson(jsonElement, newJsonWriter(Streams.writerForAppendable(appendable)));
|
|
} catch (IOException e) {
|
|
throw new JsonIOException(e);
|
|
}
|
|
}
|
|
|
|
public JsonWriter newJsonWriter(Writer writer) throws IOException {
|
|
if (this.generateNonExecutableJson) {
|
|
writer.write(JSON_NON_EXECUTABLE_PREFIX);
|
|
}
|
|
JsonWriter jsonWriter = new JsonWriter(writer);
|
|
if (this.prettyPrinting) {
|
|
jsonWriter.setIndent(" ");
|
|
}
|
|
jsonWriter.setSerializeNulls(this.serializeNulls);
|
|
return jsonWriter;
|
|
}
|
|
|
|
public JsonReader newJsonReader(Reader reader) {
|
|
JsonReader jsonReader = new JsonReader(reader);
|
|
jsonReader.setLenient(this.lenient);
|
|
return jsonReader;
|
|
}
|
|
|
|
public void toJson(JsonElement jsonElement, JsonWriter jsonWriter) throws JsonIOException {
|
|
boolean isLenient = jsonWriter.isLenient();
|
|
jsonWriter.setLenient(true);
|
|
boolean isHtmlSafe = jsonWriter.isHtmlSafe();
|
|
jsonWriter.setHtmlSafe(this.htmlSafe);
|
|
boolean serializeNulls = jsonWriter.getSerializeNulls();
|
|
jsonWriter.setSerializeNulls(this.serializeNulls);
|
|
try {
|
|
try {
|
|
Streams.write(jsonElement, jsonWriter);
|
|
} catch (IOException e) {
|
|
throw new JsonIOException(e);
|
|
} catch (AssertionError e2) {
|
|
StringBuilder sb = new StringBuilder("AssertionError (GSON 2.8.9): ");
|
|
sb.append(e2.getMessage());
|
|
AssertionError assertionError = new AssertionError(sb.toString());
|
|
assertionError.initCause(e2);
|
|
throw assertionError;
|
|
}
|
|
} finally {
|
|
jsonWriter.setLenient(isLenient);
|
|
jsonWriter.setHtmlSafe(isHtmlSafe);
|
|
jsonWriter.setSerializeNulls(serializeNulls);
|
|
}
|
|
}
|
|
|
|
public <T> T fromJson(String str, Class<T> cls) throws JsonSyntaxException {
|
|
return (T) Primitives.wrap(cls).cast(fromJson(str, (Type) cls));
|
|
}
|
|
|
|
public <T> T fromJson(String str, Type type) throws JsonSyntaxException {
|
|
if (str == null) {
|
|
return null;
|
|
}
|
|
return (T) fromJson(new StringReader(str), type);
|
|
}
|
|
|
|
public <T> T fromJson(Reader reader, Class<T> cls) throws JsonSyntaxException, JsonIOException {
|
|
JsonReader newJsonReader = newJsonReader(reader);
|
|
Object fromJson = fromJson(newJsonReader, cls);
|
|
assertFullConsumption(fromJson, newJsonReader);
|
|
return (T) Primitives.wrap(cls).cast(fromJson);
|
|
}
|
|
|
|
public <T> T fromJson(Reader reader, Type type) throws JsonIOException, JsonSyntaxException {
|
|
JsonReader newJsonReader = newJsonReader(reader);
|
|
T t = (T) fromJson(newJsonReader, type);
|
|
assertFullConsumption(t, newJsonReader);
|
|
return t;
|
|
}
|
|
|
|
private static void assertFullConsumption(Object obj, JsonReader jsonReader) {
|
|
if (obj != null) {
|
|
try {
|
|
if (jsonReader.peek() == JsonToken.END_DOCUMENT) {
|
|
} else {
|
|
throw new JsonIOException("JSON document was not fully consumed.");
|
|
}
|
|
} catch (MalformedJsonException e) {
|
|
throw new JsonSyntaxException(e);
|
|
} catch (IOException e2) {
|
|
throw new JsonIOException(e2);
|
|
}
|
|
}
|
|
}
|
|
|
|
public <T> T fromJson(JsonReader jsonReader, Type type) throws JsonIOException, JsonSyntaxException {
|
|
boolean isLenient = jsonReader.isLenient();
|
|
boolean z = true;
|
|
jsonReader.setLenient(true);
|
|
try {
|
|
try {
|
|
try {
|
|
jsonReader.peek();
|
|
z = false;
|
|
return getAdapter(TypeToken.get(type)).read2(jsonReader);
|
|
} catch (IOException e) {
|
|
throw new JsonSyntaxException(e);
|
|
} catch (IllegalStateException e2) {
|
|
throw new JsonSyntaxException(e2);
|
|
}
|
|
} catch (EOFException e3) {
|
|
if (!z) {
|
|
throw new JsonSyntaxException(e3);
|
|
}
|
|
jsonReader.setLenient(isLenient);
|
|
return null;
|
|
} catch (AssertionError e4) {
|
|
StringBuilder sb = new StringBuilder("AssertionError (GSON 2.8.9): ");
|
|
sb.append(e4.getMessage());
|
|
AssertionError assertionError = new AssertionError(sb.toString());
|
|
assertionError.initCause(e4);
|
|
throw assertionError;
|
|
}
|
|
} finally {
|
|
jsonReader.setLenient(isLenient);
|
|
}
|
|
}
|
|
|
|
public <T> T fromJson(JsonElement jsonElement, Class<T> cls) throws JsonSyntaxException {
|
|
return (T) Primitives.wrap(cls).cast(fromJson(jsonElement, (Type) cls));
|
|
}
|
|
|
|
public <T> T fromJson(JsonElement jsonElement, Type type) throws JsonSyntaxException {
|
|
if (jsonElement == null) {
|
|
return null;
|
|
}
|
|
return (T) fromJson(new JsonTreeReader(jsonElement), type);
|
|
}
|
|
|
|
/* JADX INFO: Access modifiers changed from: package-private */
|
|
/* loaded from: classes.dex */
|
|
public static class FutureTypeAdapter<T> extends TypeAdapter<T> {
|
|
private TypeAdapter<T> delegate;
|
|
|
|
FutureTypeAdapter() {
|
|
}
|
|
|
|
public void setDelegate(TypeAdapter<T> typeAdapter) {
|
|
if (this.delegate != null) {
|
|
throw new AssertionError();
|
|
}
|
|
this.delegate = typeAdapter;
|
|
}
|
|
|
|
@Override // com.google.gson.TypeAdapter
|
|
/* renamed from: read */
|
|
public T read2(JsonReader jsonReader) throws IOException {
|
|
TypeAdapter<T> typeAdapter = this.delegate;
|
|
if (typeAdapter == null) {
|
|
throw new IllegalStateException();
|
|
}
|
|
return typeAdapter.read2(jsonReader);
|
|
}
|
|
|
|
@Override // com.google.gson.TypeAdapter
|
|
public void write(JsonWriter jsonWriter, T t) throws IOException {
|
|
TypeAdapter<T> typeAdapter = this.delegate;
|
|
if (typeAdapter == null) {
|
|
throw new IllegalStateException();
|
|
}
|
|
typeAdapter.write(jsonWriter, t);
|
|
}
|
|
}
|
|
|
|
public String toString() {
|
|
StringBuilder sb = new StringBuilder("{serializeNulls:");
|
|
sb.append(this.serializeNulls);
|
|
sb.append(",factories:");
|
|
sb.append(this.factories);
|
|
sb.append(",instanceCreators:");
|
|
sb.append(this.constructorConstructor);
|
|
sb.append(UrlTreeKt.componentParamSuffix);
|
|
return sb.toString();
|
|
}
|
|
|
|
public boolean serializeNulls() {
|
|
return this.serializeNulls;
|
|
}
|
|
|
|
public boolean htmlSafe() {
|
|
return this.htmlSafe;
|
|
}
|
|
|
|
public FieldNamingStrategy fieldNamingStrategy() {
|
|
return this.fieldNamingStrategy;
|
|
}
|
|
|
|
@Deprecated
|
|
public Excluder excluder() {
|
|
return this.excluder;
|
|
}
|
|
}
|