ThrowableDeserializer.smali

.class public Lcom/alibaba/fastjson/parser/ThrowableDeserializer;
.super Lcom/alibaba/fastjson/parser/JavaBeanDeserializer;
.source "ThrowableDeserializer.java"


# direct methods
.method public constructor <init>(Lcom/alibaba/fastjson/parser/ParserConfig;Ljava/lang/Class;)V
    .registers 3
    .annotation system Ldalvik/annotation/Signature;
        value = {
            "(",
            "Lcom/alibaba/fastjson/parser/ParserConfig;",
            "Ljava/lang/Class<",
            "*>;)V"
        }
    .end annotation

    .line 1
    invoke-direct {p0, p1, p2, p2}, Lcom/alibaba/fastjson/parser/JavaBeanDeserializer;-><init>(Lcom/alibaba/fastjson/parser/ParserConfig;Ljava/lang/Class;Ljava/lang/reflect/Type;)V

    return-void
.end method


# virtual methods
.method public deserialze(Lcom/alibaba/fastjson/parser/DefaultJSONParser;Ljava/lang/reflect/Type;Ljava/lang/Object;)Ljava/lang/Object;
    .registers 21
    .annotation system Ldalvik/annotation/Signature;
        value = {
            "<T:",
            "Ljava/lang/Object;",
            ">(",
            "Lcom/alibaba/fastjson/parser/DefaultJSONParser;",
            "Ljava/lang/reflect/Type;",
            "Ljava/lang/Object;",
            ")TT;"
        }
    .end annotation

    move-object/from16 v1, p0

    move-object/from16 v0, p1

    move-object/from16 v2, p2

    .line 1
    iget-object v3, v0, Lcom/alibaba/fastjson/parser/DefaultJSONParser;->lexer:Lcom/alibaba/fastjson/parser/JSONLexer;

    .line 2
    iget v4, v3, Lcom/alibaba/fastjson/parser/JSONLexer;->token:I

    const/16 v5, 0x8

    const/4 v6, 0x0

    if-ne v4, v5, :cond_13

    .line 3
    invoke-virtual {v3}, Lcom/alibaba/fastjson/parser/JSONLexer;->nextToken()V

    return-object v6

    .line 4
    :cond_13
    iget v7, v0, Lcom/alibaba/fastjson/parser/DefaultJSONParser;->resolveStatus:I

    const-string v8, "syntax error"

    const/4 v9, 0x2

    const/4 v10, 0x0

    if-ne v7, v9, :cond_1e

    .line 5
    iput v10, v0, Lcom/alibaba/fastjson/parser/DefaultJSONParser;->resolveStatus:I

    goto :goto_22

    :cond_1e
    const/16 v7, 0xc

    if-ne v4, v7, :cond_1b1

    :goto_22
    if-eqz v2, :cond_33

    .line 6
    instance-of v4, v2, Ljava/lang/Class;

    if-eqz v4, :cond_33

    .line 7
    check-cast v2, Ljava/lang/Class;

    .line 8
    const-class v4, Ljava/lang/Throwable;

    invoke-virtual {v4, v2}, Ljava/lang/Class;->isAssignableFrom(Ljava/lang/Class;)Z

    move-result v4

    if-eqz v4, :cond_33

    goto :goto_34

    :cond_33
    move-object v2, v6

    :goto_34
    move-object v7, v2

    move-object v2, v6

    move-object v4, v2

    move-object v11, v4

    move-object v12, v11

    .line 9
    :goto_39
    iget-object v13, v0, Lcom/alibaba/fastjson/parser/DefaultJSONParser;->symbolTable:Lcom/alibaba/fastjson/parser/SymbolTable;

    invoke-virtual {v3, v13}, Lcom/alibaba/fastjson/parser/JSONLexer;->scanSymbol(Lcom/alibaba/fastjson/parser/SymbolTable;)Ljava/lang/String;

    move-result-object v13

    const/16 v14, 0xd

    const/16 v15, 0x10

    if-nez v13, :cond_52

    .line 10
    iget v9, v3, Lcom/alibaba/fastjson/parser/JSONLexer;->token:I

    if-ne v9, v14, :cond_4e

    .line 11
    invoke-virtual {v3, v15}, Lcom/alibaba/fastjson/parser/JSONLexer;->nextToken(I)V

    goto/16 :goto_d1

    :cond_4e
    if-ne v9, v15, :cond_52

    :cond_50
    const/4 v9, 0x2

    goto :goto_39

    :cond_52
    const/16 v9, 0x3a

    .line 12
    invoke-virtual {v3, v9}, Lcom/alibaba/fastjson/parser/JSONLexer;->nextTokenWithChar(C)V

    const-string v9, "@type"

    .line 13
    invoke-virtual {v9, v13}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z

    move-result v9

    const/4 v14, 0x4

    if-eqz v9, :cond_7a

    .line 14
    iget v7, v3, Lcom/alibaba/fastjson/parser/JSONLexer;->token:I

    if-ne v7, v14, :cond_74

    .line 15
    invoke-virtual {v3}, Lcom/alibaba/fastjson/parser/JSONLexer;->stringVal()Ljava/lang/String;

    move-result-object v7

    .line 16
    iget-object v9, v0, Lcom/alibaba/fastjson/parser/DefaultJSONParser;->config:Lcom/alibaba/fastjson/parser/ParserConfig;

    iget-object v9, v9, Lcom/alibaba/fastjson/parser/ParserConfig;->defaultClassLoader:Ljava/lang/ClassLoader;

    invoke-static {v7, v9, v10}, Lcom/alibaba/fastjson/util/TypeUtils;->loadClass(Ljava/lang/String;Ljava/lang/ClassLoader;Z)Ljava/lang/Class;

    move-result-object v7

    .line 17
    invoke-virtual {v3, v15}, Lcom/alibaba/fastjson/parser/JSONLexer;->nextToken(I)V

    goto :goto_c8

    .line 18
    :cond_74
    new-instance v0, Lcom/alibaba/fastjson/JSONException;

    invoke-direct {v0, v8}, Lcom/alibaba/fastjson/JSONException;-><init>(Ljava/lang/String;)V

    throw v0

    :cond_7a
    const-string v9, "message"

    .line 19
    invoke-virtual {v9, v13}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z

    move-result v9

    if-eqz v9, :cond_99

    .line 20
    iget v9, v3, Lcom/alibaba/fastjson/parser/JSONLexer;->token:I

    if-ne v9, v5, :cond_88

    move-object v9, v6

    goto :goto_8e

    :cond_88
    if-ne v9, v14, :cond_93

    .line 21
    invoke-virtual {v3}, Lcom/alibaba/fastjson/parser/JSONLexer;->stringVal()Ljava/lang/String;

    move-result-object v9

    .line 22
    :goto_8e
    invoke-virtual {v3}, Lcom/alibaba/fastjson/parser/JSONLexer;->nextToken()V

    move-object v11, v9

    goto :goto_c8

    .line 23
    :cond_93
    new-instance v0, Lcom/alibaba/fastjson/JSONException;

    invoke-direct {v0, v8}, Lcom/alibaba/fastjson/JSONException;-><init>(Ljava/lang/String;)V

    throw v0

    :cond_99
    const-string v9, "cause"

    .line 24
    invoke-virtual {v9, v13}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z

    move-result v14

    if-eqz v14, :cond_a8

    .line 25
    invoke-virtual {v1, v0, v6, v9}, Lcom/alibaba/fastjson/parser/ThrowableDeserializer;->deserialze(Lcom/alibaba/fastjson/parser/DefaultJSONParser;Ljava/lang/reflect/Type;Ljava/lang/Object;)Ljava/lang/Object;

    move-result-object v4

    check-cast v4, Ljava/lang/Throwable;

    goto :goto_c8

    :cond_a8
    const-string v9, "stackTrace"

    .line 26
    invoke-virtual {v9, v13}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z

    move-result v9

    if-eqz v9, :cond_ba

    .line 27
    const-class v9, [Ljava/lang/StackTraceElement;

    invoke-virtual {v0, v9}, Lcom/alibaba/fastjson/parser/DefaultJSONParser;->parseObject(Ljava/lang/Class;)Ljava/lang/Object;

    move-result-object v9

    check-cast v9, [Ljava/lang/StackTraceElement;

    move-object v12, v9

    goto :goto_c8

    :cond_ba
    if-nez v2, :cond_c1

    .line 28
    new-instance v2, Ljava/util/HashMap;

    invoke-direct {v2}, Ljava/util/HashMap;-><init>()V

    .line 29
    :cond_c1
    invoke-virtual/range {p1 .. p1}, Lcom/alibaba/fastjson/parser/DefaultJSONParser;->parse()Ljava/lang/Object;

    move-result-object v9

    invoke-interface {v2, v13, v9}, Ljava/util/Map;->put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;

    .line 30
    :goto_c8
    iget v9, v3, Lcom/alibaba/fastjson/parser/JSONLexer;->token:I

    const/16 v13, 0xd

    if-ne v9, v13, :cond_50

    .line 31
    invoke-virtual {v3, v15}, Lcom/alibaba/fastjson/parser/JSONLexer;->nextToken(I)V

    :goto_d1
    if-nez v7, :cond_da

    .line 32
    new-instance v3, Ljava/lang/Exception;

    invoke-direct {v3, v11, v4}, Ljava/lang/Exception;-><init>(Ljava/lang/String;Ljava/lang/Throwable;)V

    goto/16 :goto_160

    .line 33
    :cond_da
    :try_start_da
    invoke-virtual {v7}, Ljava/lang/Class;->getConstructors()[Ljava/lang/reflect/Constructor;

    move-result-object v3

    array-length v5, v3

    move-object v9, v6

    move-object v13, v9

    move-object v14, v13

    const/4 v8, 0x0

    :goto_e3
    const/4 v15, 0x1

    if-ge v8, v5, :cond_129

    aget-object v16, v3, v8

    .line 34
    invoke-virtual/range {v16 .. v16}, Ljava/lang/reflect/Constructor;->getParameterTypes()[Ljava/lang/Class;

    move-result-object v6

    array-length v6, v6

    if-nez v6, :cond_f2

    move-object/from16 v14, v16

    goto :goto_125

    .line 35
    :cond_f2
    invoke-virtual/range {v16 .. v16}, Ljava/lang/reflect/Constructor;->getParameterTypes()[Ljava/lang/Class;

    move-result-object v6

    array-length v6, v6

    if-ne v6, v15, :cond_106

    invoke-virtual/range {v16 .. v16}, Ljava/lang/reflect/Constructor;->getParameterTypes()[Ljava/lang/Class;

    move-result-object v6

    aget-object v6, v6, v10

    const-class v15, Ljava/lang/String;

    if-ne v6, v15, :cond_106

    move-object/from16 v13, v16

    goto :goto_125

    .line 36
    :cond_106
    invoke-virtual/range {v16 .. v16}, Ljava/lang/reflect/Constructor;->getParameterTypes()[Ljava/lang/Class;

    move-result-object v6

    array-length v6, v6

    const/4 v15, 0x2

    if-ne v6, v15, :cond_125

    invoke-virtual/range {v16 .. v16}, Ljava/lang/reflect/Constructor;->getParameterTypes()[Ljava/lang/Class;

    move-result-object v6

    aget-object v6, v6, v10

    const-class v15, Ljava/lang/String;

    if-ne v6, v15, :cond_125

    .line 37
    invoke-virtual/range {v16 .. v16}, Ljava/lang/reflect/Constructor;->getParameterTypes()[Ljava/lang/Class;

    move-result-object v6

    const/4 v15, 0x1

    aget-object v6, v6, v15

    const-class v15, Ljava/lang/Throwable;

    if-ne v6, v15, :cond_125

    move-object/from16 v9, v16

    :cond_125
    :goto_125
    add-int/lit8 v8, v8, 0x1

    const/4 v6, 0x0

    goto :goto_e3

    :cond_129
    if-eqz v9, :cond_13b

    const/4 v6, 0x2

    .line 38
    new-array v3, v6, [Ljava/lang/Object;

    aput-object v11, v3, v10

    const/4 v5, 0x1

    aput-object v4, v3, v5

    invoke-virtual {v9, v3}, Ljava/lang/reflect/Constructor;->newInstance([Ljava/lang/Object;)Ljava/lang/Object;

    move-result-object v3

    move-object v6, v3

    check-cast v6, Ljava/lang/Throwable;

    goto :goto_157

    :cond_13b
    if-eqz v13, :cond_14a

    const/4 v3, 0x1

    .line 39
    new-array v3, v3, [Ljava/lang/Object;

    aput-object v11, v3, v10

    invoke-virtual {v13, v3}, Ljava/lang/reflect/Constructor;->newInstance([Ljava/lang/Object;)Ljava/lang/Object;

    move-result-object v3

    move-object v6, v3

    check-cast v6, Ljava/lang/Throwable;

    goto :goto_157

    :cond_14a
    if-eqz v14, :cond_156

    .line 40
    new-array v3, v10, [Ljava/lang/Object;

    invoke-virtual {v14, v3}, Ljava/lang/reflect/Constructor;->newInstance([Ljava/lang/Object;)Ljava/lang/Object;

    move-result-object v3

    move-object v6, v3

    check-cast v6, Ljava/lang/Throwable;

    goto :goto_157

    :cond_156
    const/4 v6, 0x0

    :goto_157
    if-nez v6, :cond_15f

    .line 41
    new-instance v3, Ljava/lang/Exception;

    invoke-direct {v3, v11, v4}, Ljava/lang/Exception;-><init>(Ljava/lang/String;Ljava/lang/Throwable;)V
    :try_end_15e
    .catch Ljava/lang/Exception; {:try_start_da .. :try_end_15e} :catch_1a8

    goto :goto_160

    :cond_15f
    move-object v3, v6

    :goto_160
    if-eqz v12, :cond_165

    .line 42
    invoke-virtual {v3, v12}, Ljava/lang/Throwable;->setStackTrace([Ljava/lang/StackTraceElement;)V

    :cond_165
    if-eqz v2, :cond_1a7

    if-eqz v7, :cond_17c

    .line 43
    iget-object v4, v1, Lcom/alibaba/fastjson/parser/JavaBeanDeserializer;->clazz:Ljava/lang/Class;

    if-ne v7, v4, :cond_16f

    move-object v0, v1

    goto :goto_17d

    .line 44
    :cond_16f
    iget-object v0, v0, Lcom/alibaba/fastjson/parser/DefaultJSONParser;->config:Lcom/alibaba/fastjson/parser/ParserConfig;

    invoke-virtual {v0, v7}, Lcom/alibaba/fastjson/parser/ParserConfig;->getDeserializer(Ljava/lang/reflect/Type;)Lcom/alibaba/fastjson/parser/deserializer/ObjectDeserializer;

    move-result-object v0

    .line 45
    instance-of v4, v0, Lcom/alibaba/fastjson/parser/JavaBeanDeserializer;

    if-eqz v4, :cond_17c

    .line 46
    check-cast v0, Lcom/alibaba/fastjson/parser/JavaBeanDeserializer;

    goto :goto_17d

    :cond_17c
    const/4 v0, 0x0

    :goto_17d
    if-eqz v0, :cond_1a7

    .line 47
    invoke-interface {v2}, Ljava/util/Map;->entrySet()Ljava/util/Set;

    move-result-object v2

    invoke-interface {v2}, Ljava/util/Set;->iterator()Ljava/util/Iterator;

    move-result-object v2

    :cond_187
    :goto_187
    invoke-interface {v2}, Ljava/util/Iterator;->hasNext()Z

    move-result v4

    if-eqz v4, :cond_1a7

    invoke-interface {v2}, Ljava/util/Iterator;->next()Ljava/lang/Object;

    move-result-object v4

    check-cast v4, Ljava/util/Map$Entry;

    .line 48
    invoke-interface {v4}, Ljava/util/Map$Entry;->getKey()Ljava/lang/Object;

    move-result-object v5

    check-cast v5, Ljava/lang/String;

    .line 49
    invoke-interface {v4}, Ljava/util/Map$Entry;->getValue()Ljava/lang/Object;

    move-result-object v4

    .line 50
    invoke-virtual {v0, v5}, Lcom/alibaba/fastjson/parser/JavaBeanDeserializer;->getFieldDeserializer(Ljava/lang/String;)Lcom/alibaba/fastjson/parser/deserializer/FieldDeserializer;

    move-result-object v5

    if-eqz v5, :cond_187

    .line 51
    invoke-virtual {v5, v3, v4}, Lcom/alibaba/fastjson/parser/deserializer/FieldDeserializer;->setValue(Ljava/lang/Object;Ljava/lang/Object;)V

    goto :goto_187

    :cond_1a7
    return-object v3

    :catch_1a8
    move-exception v0

    .line 52
    new-instance v2, Lcom/alibaba/fastjson/JSONException;

    const-string v3, "create instance error"

    invoke-direct {v2, v3, v0}, Lcom/alibaba/fastjson/JSONException;-><init>(Ljava/lang/String;Ljava/lang/Throwable;)V

    throw v2

    .line 53
    :cond_1b1
    new-instance v0, Lcom/alibaba/fastjson/JSONException;

    invoke-direct {v0, v8}, Lcom/alibaba/fastjson/JSONException;-><init>(Ljava/lang/String;)V

    goto :goto_1b8

    :goto_1b7
    throw v0

    :goto_1b8
    goto :goto_1b7
.end method