what-the-bank/sources/com/google/gson/internal/Excluder.java

213 lines
8.0 KiB
Java
Raw Normal View History

2024-07-27 18:17:47 +07:00
package com.google.gson.internal;
import com.google.gson.ExclusionStrategy;
import com.google.gson.FieldAttributes;
import com.google.gson.Gson;
import com.google.gson.TypeAdapter;
import com.google.gson.TypeAdapterFactory;
import com.google.gson.annotations.Expose;
import com.google.gson.annotations.Since;
import com.google.gson.annotations.Until;
import com.google.gson.reflect.TypeToken;
import com.google.gson.stream.JsonReader;
import com.google.gson.stream.JsonWriter;
import java.io.IOException;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
/* loaded from: classes.dex */
public final class Excluder implements TypeAdapterFactory, Cloneable {
public static final Excluder DEFAULT = new Excluder();
public static final double IGNORE_VERSIONS = -1.0d;
public boolean requireExpose;
public double version = -1.0d;
public int modifiers = 136;
public boolean serializeInnerClasses = true;
public List<ExclusionStrategy> serializationStrategies = Collections.emptyList();
public List<ExclusionStrategy> deserializationStrategies = Collections.emptyList();
/* JADX INFO: Access modifiers changed from: protected */
/* renamed from: clone, reason: merged with bridge method [inline-methods] */
public final Excluder m264clone() {
try {
return (Excluder) super.clone();
} catch (CloneNotSupportedException e) {
throw new AssertionError(e);
}
}
public final Excluder withVersion(double d) {
Excluder m264clone = m264clone();
m264clone.version = d;
return m264clone;
}
public final Excluder withModifiers(int... iArr) {
Excluder m264clone = m264clone();
m264clone.modifiers = 0;
for (int i : iArr) {
m264clone.modifiers = i | m264clone.modifiers;
}
return m264clone;
}
public final Excluder disableInnerClassSerialization() {
Excluder m264clone = m264clone();
m264clone.serializeInnerClasses = false;
return m264clone;
}
public final Excluder excludeFieldsWithoutExposeAnnotation() {
Excluder m264clone = m264clone();
m264clone.requireExpose = true;
return m264clone;
}
public final Excluder withExclusionStrategy(ExclusionStrategy exclusionStrategy, boolean z, boolean z2) {
Excluder m264clone = m264clone();
if (z) {
ArrayList arrayList = new ArrayList(this.serializationStrategies);
m264clone.serializationStrategies = arrayList;
arrayList.add(exclusionStrategy);
}
if (z2) {
ArrayList arrayList2 = new ArrayList(this.deserializationStrategies);
m264clone.deserializationStrategies = arrayList2;
arrayList2.add(exclusionStrategy);
}
return m264clone;
}
@Override // com.google.gson.TypeAdapterFactory
public final <T> TypeAdapter<T> create(Gson gson, TypeToken<T> typeToken) {
Class<? super T> rawType = typeToken.getRawType();
boolean excludeClassChecks = excludeClassChecks(rawType);
boolean z = excludeClassChecks || excludeClassInStrategy(rawType, true);
boolean z2 = excludeClassChecks || excludeClassInStrategy(rawType, false);
if (z || z2) {
return new TypeAdapter<T>(this, z2, z, gson, typeToken) { // from class: com.google.gson.internal.Excluder.1
private TypeAdapter<T> delegate;
final Excluder this$0;
final Gson val$gson;
final boolean val$skipDeserialize;
final boolean val$skipSerialize;
final TypeToken val$type;
{
this.this$0 = this;
this.val$skipDeserialize = z2;
this.val$skipSerialize = z;
this.val$gson = gson;
this.val$type = typeToken;
}
@Override // com.google.gson.TypeAdapter
/* renamed from: read */
public T read2(JsonReader jsonReader) throws IOException {
if (this.val$skipDeserialize) {
jsonReader.skipValue();
return null;
}
return delegate().read2(jsonReader);
}
@Override // com.google.gson.TypeAdapter
public void write(JsonWriter jsonWriter, T t) throws IOException {
if (this.val$skipSerialize) {
jsonWriter.nullValue();
} else {
delegate().write(jsonWriter, t);
}
}
private TypeAdapter<T> delegate() {
TypeAdapter<T> typeAdapter = this.delegate;
if (typeAdapter != null) {
return typeAdapter;
}
TypeAdapter<T> delegateAdapter = this.val$gson.getDelegateAdapter(this.this$0, this.val$type);
this.delegate = delegateAdapter;
return delegateAdapter;
}
};
}
return null;
}
public final boolean excludeField(Field field, boolean z) {
Expose expose;
if ((this.modifiers & field.getModifiers()) != 0) {
return true;
}
if ((this.version != -1.0d && !isValidVersion((Since) field.getAnnotation(Since.class), (Until) field.getAnnotation(Until.class))) || field.isSynthetic()) {
return true;
}
if (this.requireExpose && ((expose = (Expose) field.getAnnotation(Expose.class)) == null || (!z ? expose.deserialize() : expose.serialize()))) {
return true;
}
if ((!this.serializeInnerClasses && isInnerClass(field.getType())) || isAnonymousOrNonStaticLocal(field.getType())) {
return true;
}
List<ExclusionStrategy> list = z ? this.serializationStrategies : this.deserializationStrategies;
if (list.isEmpty()) {
return false;
}
FieldAttributes fieldAttributes = new FieldAttributes(field);
Iterator<ExclusionStrategy> it = list.iterator();
while (it.hasNext()) {
if (it.next().shouldSkipField(fieldAttributes)) {
return true;
}
}
return false;
}
private boolean excludeClassChecks(Class<?> cls) {
if (this.version == -1.0d || isValidVersion((Since) cls.getAnnotation(Since.class), (Until) cls.getAnnotation(Until.class))) {
return (!this.serializeInnerClasses && isInnerClass(cls)) || isAnonymousOrNonStaticLocal(cls);
}
return true;
}
public final boolean excludeClass(Class<?> cls, boolean z) {
return excludeClassChecks(cls) || excludeClassInStrategy(cls, z);
}
private boolean excludeClassInStrategy(Class<?> cls, boolean z) {
Iterator<ExclusionStrategy> it = (z ? this.serializationStrategies : this.deserializationStrategies).iterator();
while (it.hasNext()) {
if (it.next().shouldSkipClass(cls)) {
return true;
}
}
return false;
}
private boolean isAnonymousOrNonStaticLocal(Class<?> cls) {
return (Enum.class.isAssignableFrom(cls) || isStatic(cls) || (!cls.isAnonymousClass() && !cls.isLocalClass())) ? false : true;
}
private boolean isInnerClass(Class<?> cls) {
return cls.isMemberClass() && !isStatic(cls);
}
private boolean isStatic(Class<?> cls) {
return (cls.getModifiers() & 8) != 0;
}
private boolean isValidVersion(Since since, Until until) {
return isValidSince(since) && isValidUntil(until);
}
private boolean isValidSince(Since since) {
return since == null || since.value() <= this.version;
}
private boolean isValidUntil(Until until) {
return until == null || until.value() > this.version;
}
}