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 serializationStrategies = Collections.emptyList(); public List 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 TypeAdapter create(Gson gson, TypeToken typeToken) { Class 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(this, z2, z, gson, typeToken) { // from class: com.google.gson.internal.Excluder.1 private TypeAdapter 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 delegate() { TypeAdapter typeAdapter = this.delegate; if (typeAdapter != null) { return typeAdapter; } TypeAdapter 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 list = z ? this.serializationStrategies : this.deserializationStrategies; if (list.isEmpty()) { return false; } FieldAttributes fieldAttributes = new FieldAttributes(field); Iterator 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 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; } }