CollectionDeserializer.smali
.class public Lcom/alibaba/fastjson/parser/deserializer/CollectionDeserializer;
.super Ljava/lang/Object;
.source "CollectionDeserializer.java"
# interfaces
.implements Lcom/alibaba/fastjson/parser/deserializer/ObjectDeserializer;
# static fields
.field public static final instance:Lcom/alibaba/fastjson/parser/deserializer/CollectionDeserializer;
# direct methods
.method static constructor <clinit>()V
.registers 1
.line 19
new-instance v0, Lcom/alibaba/fastjson/parser/deserializer/CollectionDeserializer;
invoke-direct {v0}, Lcom/alibaba/fastjson/parser/deserializer/CollectionDeserializer;-><init>()V
sput-object v0, Lcom/alibaba/fastjson/parser/deserializer/CollectionDeserializer;->instance:Lcom/alibaba/fastjson/parser/deserializer/CollectionDeserializer;
return-void
.end method
.method public constructor <init>()V
.registers 1
.line 17
invoke-direct {p0}, Ljava/lang/Object;-><init>()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 10
.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 23
invoke-virtual {p1}, Lcom/alibaba/fastjson/parser/DefaultJSONParser;->getLexer()Lcom/alibaba/fastjson/parser/JSONLexer;
move-result-object v0
invoke-interface {v0}, Lcom/alibaba/fastjson/parser/JSONLexer;->token()I
move-result v0
const/4 v1, 0x0
const/16 v2, 0x8
if-ne v0, v2, :cond_17
.line 24
invoke-virtual {p1}, Lcom/alibaba/fastjson/parser/DefaultJSONParser;->getLexer()Lcom/alibaba/fastjson/parser/JSONLexer;
move-result-object v0
const/16 v2, 0x10
invoke-interface {v0, v2}, Lcom/alibaba/fastjson/parser/JSONLexer;->nextToken(I)V
.line 25
return-object v1
.line 28
:cond_17
invoke-virtual {p0, p2}, Lcom/alibaba/fastjson/parser/deserializer/CollectionDeserializer;->getRawClass(Ljava/lang/reflect/Type;)Ljava/lang/Class;
move-result-object v0
.line 31
.local v0, "rawClass":Ljava/lang/Class;, "Ljava/lang/Class<*>;"
const-class v2, Ljava/util/AbstractCollection;
const/4 v3, 0x0
if-ne v0, v2, :cond_26
.line 32
new-instance v1, Ljava/util/ArrayList;
invoke-direct {v1}, Ljava/util/ArrayList;-><init>()V
.local v1, "list":Ljava/util/Collection;
goto :goto_86
.line 33
.end local v1 # "list":Ljava/util/Collection;
:cond_26
const-class v2, Ljava/util/HashSet;
invoke-virtual {v0, v2}, Ljava/lang/Class;->isAssignableFrom(Ljava/lang/Class;)Z
move-result v2
if-eqz v2, :cond_34
.line 34
new-instance v1, Ljava/util/HashSet;
invoke-direct {v1}, Ljava/util/HashSet;-><init>()V
.restart local v1 # "list":Ljava/util/Collection;
goto :goto_86
.line 35
.end local v1 # "list":Ljava/util/Collection;
:cond_34
const-class v2, Ljava/util/LinkedHashSet;
invoke-virtual {v0, v2}, Ljava/lang/Class;->isAssignableFrom(Ljava/lang/Class;)Z
move-result v2
if-eqz v2, :cond_42
.line 36
new-instance v1, Ljava/util/LinkedHashSet;
invoke-direct {v1}, Ljava/util/LinkedHashSet;-><init>()V
.restart local v1 # "list":Ljava/util/Collection;
goto :goto_86
.line 37
.end local v1 # "list":Ljava/util/Collection;
:cond_42
const-class v2, Ljava/util/TreeSet;
invoke-virtual {v0, v2}, Ljava/lang/Class;->isAssignableFrom(Ljava/lang/Class;)Z
move-result v2
if-eqz v2, :cond_50
.line 38
new-instance v1, Ljava/util/TreeSet;
invoke-direct {v1}, Ljava/util/TreeSet;-><init>()V
.restart local v1 # "list":Ljava/util/Collection;
goto :goto_86
.line 39
.end local v1 # "list":Ljava/util/Collection;
:cond_50
const-class v2, Ljava/util/ArrayList;
invoke-virtual {v0, v2}, Ljava/lang/Class;->isAssignableFrom(Ljava/lang/Class;)Z
move-result v2
if-eqz v2, :cond_5e
.line 40
new-instance v1, Ljava/util/ArrayList;
invoke-direct {v1}, Ljava/util/ArrayList;-><init>()V
.restart local v1 # "list":Ljava/util/Collection;
goto :goto_86
.line 41
.end local v1 # "list":Ljava/util/Collection;
:cond_5e
const-class v2, Ljava/util/EnumSet;
invoke-virtual {v0, v2}, Ljava/lang/Class;->isAssignableFrom(Ljava/lang/Class;)Z
move-result v2
if-eqz v2, :cond_7e
.line 43
instance-of v1, p2, Ljava/lang/reflect/ParameterizedType;
if-eqz v1, :cond_74
.line 44
move-object v1, p2
check-cast v1, Ljava/lang/reflect/ParameterizedType;
invoke-interface {v1}, Ljava/lang/reflect/ParameterizedType;->getActualTypeArguments()[Ljava/lang/reflect/Type;
move-result-object v1
aget-object v1, v1, v3
.local v1, "itemType":Ljava/lang/reflect/Type;
goto :goto_76
.line 46
.end local v1 # "itemType":Ljava/lang/reflect/Type;
:cond_74
const-class v1, Ljava/lang/Object;
.line 48
.restart local v1 # "itemType":Ljava/lang/reflect/Type;
:goto_76
move-object v2, v1
check-cast v2, Ljava/lang/Class;
invoke-static {v2}, Ljava/util/EnumSet;->noneOf(Ljava/lang/Class;)Ljava/util/EnumSet;
move-result-object v1
.line 49
.local v1, "list":Ljava/util/Collection;
goto :goto_86
.line 51
.end local v1 # "list":Ljava/util/Collection;
:cond_7e
:try_start_7e
invoke-virtual {v0}, Ljava/lang/Class;->newInstance()Ljava/lang/Object;
move-result-object v2
check-cast v2, Ljava/util/Collection;
:try_end_84
.catch Ljava/lang/Exception; {:try_start_7e .. :try_end_84} :catch_9a
move-object v1, v2
.line 54
.restart local v1 # "list":Ljava/util/Collection;
nop
.line 58
:goto_86
instance-of v2, p2, Ljava/lang/reflect/ParameterizedType;
if-eqz v2, :cond_94
.line 59
move-object v2, p2
check-cast v2, Ljava/lang/reflect/ParameterizedType;
invoke-interface {v2}, Ljava/lang/reflect/ParameterizedType;->getActualTypeArguments()[Ljava/lang/reflect/Type;
move-result-object v2
aget-object v2, v2, v3
.local v2, "itemType":Ljava/lang/reflect/Type;
goto :goto_96
.line 61
.end local v2 # "itemType":Ljava/lang/reflect/Type;
:cond_94
const-class v2, Ljava/lang/Object;
.line 63
.restart local v2 # "itemType":Ljava/lang/reflect/Type;
:goto_96
invoke-virtual {p1, v2, v1, p3}, Lcom/alibaba/fastjson/parser/DefaultJSONParser;->parseArray(Ljava/lang/reflect/Type;Ljava/util/Collection;Ljava/lang/Object;)V
.line 65
return-object v1
.line 52
.end local v1 # "list":Ljava/util/Collection;
.end local v2 # "itemType":Ljava/lang/reflect/Type;
:catch_9a
move-exception v2
.line 53
.restart local v1 # "list":Ljava/util/Collection;
.local v2, "e":Ljava/lang/Exception;
new-instance v3, Lcom/alibaba/fastjson/JSONException;
new-instance v4, Ljava/lang/StringBuilder;
invoke-direct {v4}, Ljava/lang/StringBuilder;-><init>()V
const-string v5, "create instane error, class "
invoke-virtual {v4, v5}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
invoke-virtual {v0}, Ljava/lang/Class;->getName()Ljava/lang/String;
move-result-object v5
invoke-virtual {v4, v5}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
invoke-virtual {v4}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v4
invoke-direct {v3, v4}, Lcom/alibaba/fastjson/JSONException;-><init>(Ljava/lang/String;)V
throw v3
.end method
.method public getFastMatchToken()I
.registers 2
.line 80
const/16 v0, 0xe
return v0
.end method
.method public getRawClass(Ljava/lang/reflect/Type;)Ljava/lang/Class;
.registers 4
.param p1, "type" # Ljava/lang/reflect/Type;
.annotation system Ldalvik/annotation/Signature;
value = {
"(",
"Ljava/lang/reflect/Type;",
")",
"Ljava/lang/Class<",
"*>;"
}
.end annotation
.line 70
instance-of v0, p1, Ljava/lang/Class;
if-eqz v0, :cond_8
.line 71
move-object v0, p1
check-cast v0, Ljava/lang/Class;
return-object v0
.line 72
:cond_8
instance-of v0, p1, Ljava/lang/reflect/ParameterizedType;
if-eqz v0, :cond_18
.line 73
move-object v0, p1
check-cast v0, Ljava/lang/reflect/ParameterizedType;
invoke-interface {v0}, Ljava/lang/reflect/ParameterizedType;->getRawType()Ljava/lang/reflect/Type;
move-result-object v0
invoke-virtual {p0, v0}, Lcom/alibaba/fastjson/parser/deserializer/CollectionDeserializer;->getRawClass(Ljava/lang/reflect/Type;)Ljava/lang/Class;
move-result-object v0
return-object v0
.line 75
:cond_18
new-instance v0, Lcom/alibaba/fastjson/JSONException;
const-string v1, "TODO"
invoke-direct {v0, v1}, Lcom/alibaba/fastjson/JSONException;-><init>(Ljava/lang/String;)V
throw v0
.end method