ArrayDeserializer.smali
.class public Lcom/alibaba/fastjson/parser/deserializer/ArrayDeserializer;
.super Ljava/lang/Object;
.source "ArrayDeserializer.java"
# interfaces
.implements Lcom/alibaba/fastjson/parser/deserializer/ObjectDeserializer;
# static fields
.field public static final instance:Lcom/alibaba/fastjson/parser/deserializer/ArrayDeserializer;
# direct methods
.method static constructor <clinit>()V
.registers 1
.line 17
new-instance v0, Lcom/alibaba/fastjson/parser/deserializer/ArrayDeserializer;
invoke-direct {v0}, Lcom/alibaba/fastjson/parser/deserializer/ArrayDeserializer;-><init>()V
sput-object v0, Lcom/alibaba/fastjson/parser/deserializer/ArrayDeserializer;->instance:Lcom/alibaba/fastjson/parser/deserializer/ArrayDeserializer;
return-void
.end method
.method public constructor <init>()V
.registers 1
.line 15
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
return-void
.end method
.method private toObjectArray(Lcom/alibaba/fastjson/parser/DefaultJSONParser;Ljava/lang/Class;Lcom/alibaba/fastjson/JSONArray;)Ljava/lang/Object;
.registers 14
.param p1, "parser" # Lcom/alibaba/fastjson/parser/DefaultJSONParser;
.param p3, "array" # Lcom/alibaba/fastjson/JSONArray;
.annotation system Ldalvik/annotation/Signature;
value = {
"<T:",
"Ljava/lang/Object;",
">(",
"Lcom/alibaba/fastjson/parser/DefaultJSONParser;",
"Ljava/lang/Class<",
"*>;",
"Lcom/alibaba/fastjson/JSONArray;",
")TT;"
}
.end annotation
.line 76
.local p2, "componentType":Ljava/lang/Class;, "Ljava/lang/Class<*>;"
if-nez p3, :cond_4
.line 77
const/4 v0, 0x0
return-object v0
.line 80
:cond_4
invoke-virtual {p3}, Lcom/alibaba/fastjson/JSONArray;->size()I
move-result v0
.line 82
.local v0, "size":I
invoke-static {p2, v0}, Ljava/lang/reflect/Array;->newInstance(Ljava/lang/Class;I)Ljava/lang/Object;
move-result-object v1
.line 83
.local v1, "objArray":Ljava/lang/Object;
const/4 v2, 0x0
.local v2, "i":I
:goto_d
if-ge v2, v0, :cond_65
.line 84
invoke-virtual {p3, v2}, Lcom/alibaba/fastjson/JSONArray;->get(I)Ljava/lang/Object;
move-result-object v3
.line 86
.local v3, "value":Ljava/lang/Object;
if-ne v3, p3, :cond_19
.line 87
invoke-static {v1, v2, v1}, Ljava/lang/reflect/Array;->set(Ljava/lang/Object;ILjava/lang/Object;)V
.line 88
goto :goto_62
.line 91
:cond_19
invoke-virtual {p2}, Ljava/lang/Class;->isArray()Z
move-result v4
if-eqz v4, :cond_32
.line 93
invoke-virtual {p2, v3}, Ljava/lang/Class;->isInstance(Ljava/lang/Object;)Z
move-result v4
if-eqz v4, :cond_27
.line 94
move-object v4, v3
.local v4, "element":Ljava/lang/Object;
goto :goto_2e
.line 96
.end local v4 # "element":Ljava/lang/Object;
:cond_27
move-object v4, v3
check-cast v4, Lcom/alibaba/fastjson/JSONArray;
invoke-direct {p0, p1, p2, v4}, Lcom/alibaba/fastjson/parser/deserializer/ArrayDeserializer;->toObjectArray(Lcom/alibaba/fastjson/parser/DefaultJSONParser;Ljava/lang/Class;Lcom/alibaba/fastjson/JSONArray;)Ljava/lang/Object;
move-result-object v4
.line 99
.restart local v4 # "element":Ljava/lang/Object;
:goto_2e
invoke-static {v1, v2, v4}, Ljava/lang/reflect/Array;->set(Ljava/lang/Object;ILjava/lang/Object;)V
.line 100
.end local v4 # "element":Ljava/lang/Object;
goto :goto_62
.line 101
:cond_32
const/4 v4, 0x0
.line 102
.restart local v4 # "element":Ljava/lang/Object;
instance-of v5, v3, Lcom/alibaba/fastjson/JSONArray;
if-eqz v5, :cond_55
.line 103
const/4 v5, 0x0
.line 104
.local v5, "contains":Z
move-object v6, v3
check-cast v6, Lcom/alibaba/fastjson/JSONArray;
.line 105
.local v6, "valueArray":Lcom/alibaba/fastjson/JSONArray;
invoke-virtual {v6}, Lcom/alibaba/fastjson/JSONArray;->size()I
move-result v7
.line 106
.local v7, "valueArraySize":I
const/4 v8, 0x0
.local v8, "y":I
:goto_40
if-ge v8, v7, :cond_4f
.line 107
invoke-virtual {v6, v8}, Lcom/alibaba/fastjson/JSONArray;->get(I)Ljava/lang/Object;
move-result-object v9
.line 108
.local v9, "valueItem":Ljava/lang/Object;
if-ne v9, p3, :cond_4c
.line 109
invoke-virtual {v6, v2, v1}, Lcom/alibaba/fastjson/JSONArray;->set(ILjava/lang/Object;)Ljava/lang/Object;
.line 110
const/4 v5, 0x1
.line 106
.end local v9 # "valueItem":Ljava/lang/Object;
:cond_4c
add-int/lit8 v8, v8, 0x1
goto :goto_40
.line 113
.end local v8 # "y":I
:cond_4f
if-eqz v5, :cond_55
.line 114
invoke-virtual {v6}, Lcom/alibaba/fastjson/JSONArray;->toArray()[Ljava/lang/Object;
move-result-object v4
.line 118
.end local v5 # "contains":Z
.end local v6 # "valueArray":Lcom/alibaba/fastjson/JSONArray;
.end local v7 # "valueArraySize":I
:cond_55
if-nez v4, :cond_5f
.line 119
invoke-virtual {p1}, Lcom/alibaba/fastjson/parser/DefaultJSONParser;->getConfig()Lcom/alibaba/fastjson/parser/ParserConfig;
move-result-object v5
invoke-static {v3, p2, v5}, Lcom/alibaba/fastjson/util/TypeUtils;->cast(Ljava/lang/Object;Ljava/lang/Class;Lcom/alibaba/fastjson/parser/ParserConfig;)Ljava/lang/Object;
move-result-object v4
.line 121
:cond_5f
invoke-static {v1, v2, v4}, Ljava/lang/reflect/Array;->set(Ljava/lang/Object;ILjava/lang/Object;)V
.line 83
.end local v3 # "value":Ljava/lang/Object;
.end local v4 # "element":Ljava/lang/Object;
:goto_62
add-int/lit8 v2, v2, 0x1
goto :goto_d
.line 126
.end local v2 # "i":I
:cond_65
invoke-virtual {p3, v1}, Lcom/alibaba/fastjson/JSONArray;->setRelatedArray(Ljava/lang/Object;)V
.line 127
invoke-virtual {p3, p2}, Lcom/alibaba/fastjson/JSONArray;->setComponentType(Ljava/lang/reflect/Type;)V
.line 128
return-object v1
.end method
# virtual methods
.method public deserialze(Lcom/alibaba/fastjson/parser/DefaultJSONParser;Ljava/lang/reflect/Type;Ljava/lang/Object;)Ljava/lang/Object;
.registers 16
.param p1, "parser" # Lcom/alibaba/fastjson/parser/DefaultJSONParser;
.param p2, "type" # Ljava/lang/reflect/Type;
.param p3, "fieldName" # Ljava/lang/Object;
.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
.line 21
invoke-virtual {p1}, Lcom/alibaba/fastjson/parser/DefaultJSONParser;->getLexer()Lcom/alibaba/fastjson/parser/JSONLexer;
move-result-object v0
.line 22
.local v0, "lexer":Lcom/alibaba/fastjson/parser/JSONLexer;
invoke-interface {v0}, Lcom/alibaba/fastjson/parser/JSONLexer;->token()I
move-result v1
const/16 v2, 0x10
const/16 v3, 0x8
if-ne v1, v3, :cond_13
.line 23
invoke-interface {v0, v2}, Lcom/alibaba/fastjson/parser/JSONLexer;->nextToken(I)V
.line 24
const/4 v1, 0x0
return-object v1
.line 27
:cond_13
invoke-interface {v0}, Lcom/alibaba/fastjson/parser/JSONLexer;->token()I
move-result v1
const/4 v3, 0x4
if-ne v1, v3, :cond_22
.line 28
invoke-interface {v0}, Lcom/alibaba/fastjson/parser/JSONLexer;->bytesValue()[B
move-result-object v1
.line 29
.local v1, "bytes":[B
invoke-interface {v0, v2}, Lcom/alibaba/fastjson/parser/JSONLexer;->nextToken(I)V
.line 30
return-object v1
.line 35
.end local v1 # "bytes":[B
:cond_22
instance-of v1, p2, Ljava/lang/reflect/GenericArrayType;
if-eqz v1, :cond_82
.line 36
move-object v1, p2
check-cast v1, Ljava/lang/reflect/GenericArrayType;
.line 37
.local v1, "clazz":Ljava/lang/reflect/GenericArrayType;
invoke-interface {v1}, Ljava/lang/reflect/GenericArrayType;->getGenericComponentType()Ljava/lang/reflect/Type;
move-result-object v2
.line 38
.local v2, "componentType":Ljava/lang/reflect/Type;
instance-of v3, v2, Ljava/lang/reflect/TypeVariable;
if-eqz v3, :cond_7e
.line 39
move-object v3, v2
check-cast v3, Ljava/lang/reflect/TypeVariable;
.line 40
.local v3, "typeVar":Ljava/lang/reflect/TypeVariable;
invoke-virtual {p1}, Lcom/alibaba/fastjson/parser/DefaultJSONParser;->getContext()Lcom/alibaba/fastjson/parser/ParseContext;
move-result-object v4
invoke-virtual {v4}, Lcom/alibaba/fastjson/parser/ParseContext;->getType()Ljava/lang/reflect/Type;
move-result-object v4
.line 41
.local v4, "objType":Ljava/lang/reflect/Type;
instance-of v5, v4, Ljava/lang/reflect/ParameterizedType;
if-eqz v5, :cond_7b
.line 42
move-object v5, v4
check-cast v5, Ljava/lang/reflect/ParameterizedType;
.line 43
.local v5, "objParamType":Ljava/lang/reflect/ParameterizedType;
invoke-interface {v5}, Ljava/lang/reflect/ParameterizedType;->getRawType()Ljava/lang/reflect/Type;
move-result-object v6
.line 44
.local v6, "objRawType":Ljava/lang/reflect/Type;
const/4 v7, 0x0
.line 45
.local v7, "actualType":Ljava/lang/reflect/Type;
instance-of v8, v6, Ljava/lang/Class;
if-eqz v8, :cond_70
.line 46
move-object v8, v6
check-cast v8, Ljava/lang/Class;
invoke-virtual {v8}, Ljava/lang/Class;->getTypeParameters()[Ljava/lang/reflect/TypeVariable;
move-result-object v8
.line 47
.local v8, "objTypeParams":[Ljava/lang/reflect/TypeVariable;
const/4 v9, 0x0
.local v9, "i":I
:goto_54
array-length v10, v8
if-ge v9, v10, :cond_70
.line 48
aget-object v10, v8, v9
invoke-interface {v10}, Ljava/lang/reflect/TypeVariable;->getName()Ljava/lang/String;
move-result-object v10
invoke-interface {v3}, Ljava/lang/reflect/TypeVariable;->getName()Ljava/lang/String;
move-result-object v11
invoke-virtual {v10, v11}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
move-result v10
if-eqz v10, :cond_6d
.line 49
invoke-interface {v5}, Ljava/lang/reflect/ParameterizedType;->getActualTypeArguments()[Ljava/lang/reflect/Type;
move-result-object v10
aget-object v7, v10, v9
.line 47
:cond_6d
add-int/lit8 v9, v9, 0x1
goto :goto_54
.line 53
.end local v8 # "objTypeParams":[Ljava/lang/reflect/TypeVariable;
.end local v9 # "i":I
:cond_70
instance-of v8, v7, Ljava/lang/Class;
if-eqz v8, :cond_78
.line 54
move-object v8, v7
check-cast v8, Ljava/lang/Class;
.local v8, "componentClass":Ljava/lang/Class;
goto :goto_7a
.line 56
.end local v8 # "componentClass":Ljava/lang/Class;
:cond_78
const-class v8, Ljava/lang/Object;
.line 58
.end local v5 # "objParamType":Ljava/lang/reflect/ParameterizedType;
.end local v6 # "objRawType":Ljava/lang/reflect/Type;
.end local v7 # "actualType":Ljava/lang/reflect/Type;
.restart local v8 # "componentClass":Ljava/lang/Class;
:goto_7a
goto :goto_7d
.line 59
.end local v8 # "componentClass":Ljava/lang/Class;
:cond_7b
const-class v8, Ljava/lang/Object;
.line 61
.end local v3 # "typeVar":Ljava/lang/reflect/TypeVariable;
.end local v4 # "objType":Ljava/lang/reflect/Type;
.restart local v8 # "componentClass":Ljava/lang/Class;
:goto_7d
goto :goto_81
.line 62
.end local v8 # "componentClass":Ljava/lang/Class;
:cond_7e
move-object v8, v2
check-cast v8, Ljava/lang/Class;
.line 64
.end local v1 # "clazz":Ljava/lang/reflect/GenericArrayType;
.restart local v8 # "componentClass":Ljava/lang/Class;
:goto_81
goto :goto_8a
.line 65
.end local v2 # "componentType":Ljava/lang/reflect/Type;
.end local v8 # "componentClass":Ljava/lang/Class;
:cond_82
move-object v1, p2
check-cast v1, Ljava/lang/Class;
.line 66
.local v1, "clazz":Ljava/lang/Class;
invoke-virtual {v1}, Ljava/lang/Class;->getComponentType()Ljava/lang/Class;
move-result-object v2
move-object v8, v2
.line 68
.end local v1 # "clazz":Ljava/lang/Class;
.restart local v2 # "componentType":Ljava/lang/reflect/Type;
.restart local v8 # "componentClass":Ljava/lang/Class;
:goto_8a
new-instance v1, Lcom/alibaba/fastjson/JSONArray;
invoke-direct {v1}, Lcom/alibaba/fastjson/JSONArray;-><init>()V
.line 69
.local v1, "array":Lcom/alibaba/fastjson/JSONArray;
invoke-virtual {p1, v8, v1, p3}, Lcom/alibaba/fastjson/parser/DefaultJSONParser;->parseArray(Ljava/lang/reflect/Type;Ljava/util/Collection;Ljava/lang/Object;)V
.line 71
invoke-direct {p0, p1, v8, v1}, Lcom/alibaba/fastjson/parser/deserializer/ArrayDeserializer;->toObjectArray(Lcom/alibaba/fastjson/parser/DefaultJSONParser;Ljava/lang/Class;Lcom/alibaba/fastjson/JSONArray;)Ljava/lang/Object;
move-result-object v3
return-object v3
.end method
.method public getFastMatchToken()I
.registers 2
.line 132
const/16 v0, 0xe
return v0
.end method