// Decompiled by Jad v1.5.8e. Copyright 2001 Pavel Kouznetsov.
// Jad home page: http://www.geocities.com/kpdus/jad.html
// Decompiler options: braces fieldsfirst space lnc 

package com.google.gson;

import com.google.gson.internal.Excluder;
import com.google.gson.internal.bind.TypeAdapters;
import com.google.gson.reflect.TypeToken;
import java.lang.reflect.Type;
import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

// Referenced classes of package com.google.gson:
//            LongSerializationPolicy, FieldNamingPolicy, a, o, 
//            Gson, JsonSerializer, JsonDeserializer, InstanceCreator, 
//            TypeAdapter, FieldNamingStrategy, ExclusionStrategy, TypeAdapterFactory

public final class GsonBuilder
{

    private Excluder a;
    private LongSerializationPolicy b;
    private FieldNamingStrategy c;
    private final Map d = new HashMap();
    private final List e = new ArrayList();
    private final List f = new ArrayList();
    private boolean g;
    private String h;
    private int i;
    private int j;
    private boolean k;
    private boolean l;
    private boolean m;
    private boolean n;
    private boolean o;

    public GsonBuilder()
    {
        a = Excluder.DEFAULT;
        b = LongSerializationPolicy.DEFAULT;
        c = FieldNamingPolicy.IDENTITY;
        i = 2;
        j = 2;
        m = true;
    }

    private void a(String s, int i1, int j1, List list)
    {
        if (s == null || "".equals(s.trim())) goto _L2; else goto _L1
_L1:
        a a1 = new a(s);
_L6:
        list.add(com.google.gson.o.a(TypeToken.get(java/util/Date), a1));
        list.add(com.google.gson.o.a(TypeToken.get(java/sql/Timestamp), a1));
        list.add(com.google.gson.o.a(TypeToken.get(java/sql/Date), a1));
_L4:
        return;
_L2:
        if (i1 == 2 || j1 == 2) goto _L4; else goto _L3
_L3:
        a1 = new a(i1, j1);
        if (true) goto _L6; else goto _L5
_L5:
    }

    public GsonBuilder addDeserializationExclusionStrategy(ExclusionStrategy exclusionstrategy)
    {
        a = a.withExclusionStrategy(exclusionstrategy, false, true);
        return this;
    }

    public GsonBuilder addSerializationExclusionStrategy(ExclusionStrategy exclusionstrategy)
    {
        a = a.withExclusionStrategy(exclusionstrategy, true, false);
        return this;
    }

    public Gson create()
    {
        ArrayList arraylist = new ArrayList();
        arraylist.addAll(e);
        Collections.reverse(arraylist);
        arraylist.addAll(f);
        a(h, i, j, arraylist);
        return new Gson(a, c, d, g, k, o, m, n, l, b, arraylist);
    }

    public GsonBuilder disableHtmlEscaping()
    {
        m = false;
        return this;
    }

    public GsonBuilder disableInnerClassSerialization()
    {
        a = a.disableInnerClassSerialization();
        return this;
    }

    public GsonBuilder enableComplexMapKeySerialization()
    {
        k = true;
        return this;
    }

    public transient GsonBuilder excludeFieldsWithModifiers(int ai[])
    {
        a = a.withModifiers(ai);
        return this;
    }

    public GsonBuilder excludeFieldsWithoutExposeAnnotation()
    {
        a = a.excludeFieldsWithoutExposeAnnotation();
        return this;
    }

    public GsonBuilder generateNonExecutableJson()
    {
        o = true;
        return this;
    }

    public GsonBuilder registerTypeAdapter(Type type, Object obj)
    {
        boolean flag;
        if ((obj instanceof JsonSerializer) || (obj instanceof JsonDeserializer) || (obj instanceof InstanceCreator) || (obj instanceof TypeAdapter))
        {
            flag = true;
        } else
        {
            flag = false;
        }
        com.google.gson.internal..Gson.Preconditions.checkArgument(flag);
        if (obj instanceof InstanceCreator)
        {
            d.put(type, (InstanceCreator)obj);
        }
        if ((obj instanceof JsonSerializer) || (obj instanceof JsonDeserializer))
        {
            TypeToken typetoken = TypeToken.get(type);
            e.add(com.google.gson.o.b(typetoken, obj));
        }
        if (obj instanceof TypeAdapter)
        {
            e.add(TypeAdapters.newFactory(TypeToken.get(type), (TypeAdapter)obj));
        }
        return this;
    }

    public GsonBuilder registerTypeAdapterFactory(TypeAdapterFactory typeadapterfactory)
    {
        e.add(typeadapterfactory);
        return this;
    }

    public GsonBuilder registerTypeHierarchyAdapter(Class class1, Object obj)
    {
        boolean flag;
        if ((obj instanceof JsonSerializer) || (obj instanceof JsonDeserializer) || (obj instanceof TypeAdapter))
        {
            flag = true;
        } else
        {
            flag = false;
        }
        com.google.gson.internal..Gson.Preconditions.checkArgument(flag);
        if ((obj instanceof JsonDeserializer) || (obj instanceof JsonSerializer))
        {
            f.add(0, com.google.gson.o.a(class1, obj));
        }
        if (obj instanceof TypeAdapter)
        {
            e.add(TypeAdapters.newTypeHierarchyFactory(class1, (TypeAdapter)obj));
        }
        return this;
    }

    public GsonBuilder serializeNulls()
    {
        g = true;
        return this;
    }

    public GsonBuilder serializeSpecialFloatingPointValues()
    {
        l = true;
        return this;
    }

    public GsonBuilder setDateFormat(int i1)
    {
        i = i1;
        h = null;
        return this;
    }

    public GsonBuilder setDateFormat(int i1, int j1)
    {
        i = i1;
        j = j1;
        h = null;
        return this;
    }

    public GsonBuilder setDateFormat(String s)
    {
        h = s;
        return this;
    }

    public transient GsonBuilder setExclusionStrategies(ExclusionStrategy aexclusionstrategy[])
    {
        int i1 = aexclusionstrategy.length;
        for (int j1 = 0; j1 < i1; j1++)
        {
            ExclusionStrategy exclusionstrategy = aexclusionstrategy[j1];
            a = a.withExclusionStrategy(exclusionstrategy, true, true);
        }

        return this;
    }

    public GsonBuilder setFieldNamingPolicy(FieldNamingPolicy fieldnamingpolicy)
    {
        c = fieldnamingpolicy;
        return this;
    }

    public GsonBuilder setFieldNamingStrategy(FieldNamingStrategy fieldnamingstrategy)
    {
        c = fieldnamingstrategy;
        return this;
    }

    public GsonBuilder setLongSerializationPolicy(LongSerializationPolicy longserializationpolicy)
    {
        b = longserializationpolicy;
        return this;
    }

    public GsonBuilder setPrettyPrinting()
    {
        n = true;
        return this;
    }

    public GsonBuilder setVersion(double d1)
    {
        a = a.withVersion(d1);
        return this;
    }
}