MapSerializer.smali
.class public final Lcom/alibaba/fastjson/serializer/MapSerializer;
.super Ljava/lang/Object;
.source "MapSerializer.java"
# interfaces
.implements Lcom/alibaba/fastjson/serializer/ObjectSerializer;
# direct methods
.method public constructor <init>()V
.registers 1
.line 1
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
return-void
.end method
# virtual methods
.method public write(Lcom/alibaba/fastjson/serializer/JSONSerializer;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/reflect/Type;)V
.registers 21
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/io/IOException;
}
.end annotation
move-object/from16 v1, p1
move-object/from16 v0, p2
.line 1
iget-object v2, v1, Lcom/alibaba/fastjson/serializer/JSONSerializer;->out:Lcom/alibaba/fastjson/serializer/SerializeWriter;
if-nez v0, :cond_c
.line 2
invoke-virtual {v2}, Lcom/alibaba/fastjson/serializer/SerializeWriter;->writeNull()V
return-void
.line 3
:cond_c
move-object v3, v0
check-cast v3, Ljava/util/Map;
.line 4
invoke-virtual {v3}, Ljava/lang/Object;->getClass()Ljava/lang/Class;
move-result-object v4
.line 5
const-class v5, Lcom/alibaba/fastjson/JSONObject;
const/4 v6, 0x1
const/4 v7, 0x0
if-eq v4, v5, :cond_21
const-class v5, Ljava/util/HashMap;
if-eq v4, v5, :cond_21
const-class v5, Ljava/util/LinkedHashMap;
if-ne v4, v5, :cond_2b
:cond_21
const-string v4, "@type"
.line 6
invoke-interface {v3, v4}, Ljava/util/Map;->containsKey(Ljava/lang/Object;)Z
move-result v4
if-eqz v4, :cond_2b
const/4 v4, 0x1
goto :goto_2c
:cond_2b
const/4 v4, 0x0
.line 7
:goto_2c
iget v5, v2, Lcom/alibaba/fastjson/serializer/SerializeWriter;->features:I
sget-object v8, Lcom/alibaba/fastjson/serializer/SerializerFeature;->SortField:Lcom/alibaba/fastjson/serializer/SerializerFeature;
iget v8, v8, Lcom/alibaba/fastjson/serializer/SerializerFeature;->mask:I
and-int/2addr v5, v8
if-eqz v5, :cond_4f
.line 8
instance-of v5, v3, Lcom/alibaba/fastjson/JSONObject;
if-eqz v5, :cond_3f
.line 9
check-cast v3, Lcom/alibaba/fastjson/JSONObject;
invoke-virtual {v3}, Lcom/alibaba/fastjson/JSONObject;->getInnerMap()Ljava/util/Map;
move-result-object v3
.line 10
:cond_3f
instance-of v5, v3, Ljava/util/SortedMap;
if-nez v5, :cond_4f
instance-of v5, v3, Ljava/util/LinkedHashMap;
if-nez v5, :cond_4f
.line 11
:try_start_47
new-instance v5, Ljava/util/TreeMap;
invoke-direct {v5, v3}, Ljava/util/TreeMap;-><init>(Ljava/util/Map;)V
:try_end_4c
.catch Ljava/lang/Exception; {:try_start_47 .. :try_end_4c} :catch_4e
move-object v3, v5
goto :goto_4f
:catch_4e
nop
.line 12
:cond_4f
:goto_4f
iget-object v5, v1, Lcom/alibaba/fastjson/serializer/JSONSerializer;->references:Ljava/util/IdentityHashMap;
if-eqz v5, :cond_5d
invoke-virtual {v5, v0}, Ljava/util/IdentityHashMap;->containsKey(Ljava/lang/Object;)Z
move-result v5
if-eqz v5, :cond_5d
.line 13
invoke-virtual/range {p1 .. p2}, Lcom/alibaba/fastjson/serializer/JSONSerializer;->writeReference(Ljava/lang/Object;)V
return-void
.line 14
:cond_5d
iget-object v5, v1, Lcom/alibaba/fastjson/serializer/JSONSerializer;->context:Lcom/alibaba/fastjson/serializer/SerialContext;
move-object/from16 v8, p3
.line 15
invoke-virtual {v1, v5, v0, v8, v7}, Lcom/alibaba/fastjson/serializer/JSONSerializer;->setContext(Lcom/alibaba/fastjson/serializer/SerialContext;Ljava/lang/Object;Ljava/lang/Object;I)V
const/16 v8, 0x7b
.line 16
:try_start_66
invoke-virtual {v2, v8}, Lcom/alibaba/fastjson/serializer/SerializeWriter;->write(I)V
.line 17
invoke-virtual/range {p1 .. p1}, Lcom/alibaba/fastjson/serializer/JSONSerializer;->incrementIndent()V
.line 18
iget v8, v2, Lcom/alibaba/fastjson/serializer/SerializeWriter;->features:I
sget-object v9, Lcom/alibaba/fastjson/serializer/SerializerFeature;->WriteClassName:Lcom/alibaba/fastjson/serializer/SerializerFeature;
iget v9, v9, Lcom/alibaba/fastjson/serializer/SerializerFeature;->mask:I
and-int/2addr v8, v9
if-eqz v8, :cond_8b
if-nez v4, :cond_8b
.line 19
iget-object v4, v1, Lcom/alibaba/fastjson/serializer/JSONSerializer;->config:Lcom/alibaba/fastjson/serializer/SerializeConfig;
iget-object v4, v4, Lcom/alibaba/fastjson/serializer/SerializeConfig;->typeKey:Ljava/lang/String;
invoke-virtual {v2, v4, v7}, Lcom/alibaba/fastjson/serializer/SerializeWriter;->writeFieldName(Ljava/lang/String;Z)V
.line 20
invoke-virtual/range {p2 .. p2}, Ljava/lang/Object;->getClass()Ljava/lang/Class;
move-result-object v4
invoke-virtual {v4}, Ljava/lang/Class;->getName()Ljava/lang/String;
move-result-object v4
invoke-virtual {v2, v4}, Lcom/alibaba/fastjson/serializer/SerializeWriter;->writeString(Ljava/lang/String;)V
const/4 v4, 0x0
goto :goto_8c
:cond_8b
const/4 v4, 0x1
.line 21
:goto_8c
invoke-interface {v3}, Ljava/util/Map;->entrySet()Ljava/util/Set;
move-result-object v8
invoke-interface {v8}, Ljava/util/Set;->iterator()Ljava/util/Iterator;
move-result-object v8
const/4 v9, 0x0
move-object v10, v9
move-object v11, v10
:goto_97
invoke-interface {v8}, Ljava/util/Iterator;->hasNext()Z
move-result v12
if-eqz v12, :cond_12a
invoke-interface {v8}, Ljava/util/Iterator;->next()Ljava/lang/Object;
move-result-object v12
check-cast v12, Ljava/util/Map$Entry;
.line 22
invoke-interface {v12}, Ljava/util/Map$Entry;->getValue()Ljava/lang/Object;
move-result-object v13
.line 23
invoke-interface {v12}, Ljava/util/Map$Entry;->getKey()Ljava/lang/Object;
move-result-object v12
.line 24
invoke-virtual {v1, v0, v12}, Lcom/alibaba/fastjson/serializer/JSONSerializer;->applyName(Ljava/lang/Object;Ljava/lang/Object;)Z
move-result v14
if-nez v14, :cond_b2
goto :goto_97
.line 25
:cond_b2
invoke-virtual {v1, v0, v12, v13}, Lcom/alibaba/fastjson/serializer/JSONSerializer;->apply(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Z
move-result v14
if-nez v14, :cond_b9
goto :goto_97
.line 26
:cond_b9
invoke-virtual {v1, v0, v12, v13}, Lcom/alibaba/fastjson/serializer/JSONSerializer;->processKey(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
move-result-object v12
.line 27
invoke-static {v1, v0, v12, v13}, Lcom/alibaba/fastjson/serializer/JSONSerializer;->processValue(Lcom/alibaba/fastjson/serializer/JSONSerializer;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
move-result-object v13
if-nez v13, :cond_cd
.line 28
iget v14, v2, Lcom/alibaba/fastjson/serializer/SerializeWriter;->features:I
sget-object v15, Lcom/alibaba/fastjson/serializer/SerializerFeature;->WriteMapNullValue:Lcom/alibaba/fastjson/serializer/SerializerFeature;
iget v15, v15, Lcom/alibaba/fastjson/serializer/SerializerFeature;->mask:I
and-int/2addr v14, v15
if-nez v14, :cond_cd
goto :goto_97
.line 29
:cond_cd
instance-of v14, v12, Ljava/lang/String;
const/16 v15, 0x2c
if-eqz v14, :cond_eb
.line 30
move-object v14, v12
check-cast v14, Ljava/lang/String;
if-nez v4, :cond_db
.line 31
invoke-virtual {v2, v15}, Lcom/alibaba/fastjson/serializer/SerializeWriter;->write(I)V
.line 32
:cond_db
iget v4, v2, Lcom/alibaba/fastjson/serializer/SerializeWriter;->features:I
sget-object v15, Lcom/alibaba/fastjson/serializer/SerializerFeature;->PrettyFormat:Lcom/alibaba/fastjson/serializer/SerializerFeature;
iget v15, v15, Lcom/alibaba/fastjson/serializer/SerializerFeature;->mask:I
and-int/2addr v4, v15
if-eqz v4, :cond_e7
.line 33
invoke-virtual/range {p1 .. p1}, Lcom/alibaba/fastjson/serializer/JSONSerializer;->println()V
.line 34
:cond_e7
invoke-virtual {v2, v14, v6}, Lcom/alibaba/fastjson/serializer/SerializeWriter;->writeFieldName(Ljava/lang/String;Z)V
goto :goto_10d
:cond_eb
if-nez v4, :cond_f0
.line 35
invoke-virtual {v2, v15}, Lcom/alibaba/fastjson/serializer/SerializeWriter;->write(I)V
.line 36
:cond_f0
iget v4, v2, Lcom/alibaba/fastjson/serializer/SerializeWriter;->features:I
sget-object v14, Lcom/alibaba/fastjson/serializer/SerializerFeature;->WriteNonStringKeyAsString:Lcom/alibaba/fastjson/serializer/SerializerFeature;
iget v14, v14, Lcom/alibaba/fastjson/serializer/SerializerFeature;->mask:I
and-int/2addr v4, v14
if-eqz v4, :cond_105
instance-of v4, v12, Ljava/lang/Enum;
if-nez v4, :cond_105
.line 37
invoke-static {v12}, Lcom/alibaba/fastjson/JSON;->toJSONString(Ljava/lang/Object;)Ljava/lang/String;
move-result-object v4
.line 38
invoke-virtual {v1, v4}, Lcom/alibaba/fastjson/serializer/JSONSerializer;->write(Ljava/lang/String;)V
goto :goto_108
.line 39
:cond_105
invoke-virtual {v1, v12}, Lcom/alibaba/fastjson/serializer/JSONSerializer;->write(Ljava/lang/Object;)V
:goto_108
const/16 v4, 0x3a
.line 40
invoke-virtual {v2, v4}, Lcom/alibaba/fastjson/serializer/SerializeWriter;->write(I)V
:goto_10d
if-nez v13, :cond_114
.line 41
invoke-virtual {v2}, Lcom/alibaba/fastjson/serializer/SerializeWriter;->writeNull()V
:goto_112
const/4 v4, 0x0
goto :goto_97
.line 42
:cond_114
invoke-virtual {v13}, Ljava/lang/Object;->getClass()Ljava/lang/Class;
move-result-object v4
if-ne v4, v10, :cond_11e
.line 43
invoke-interface {v11, v1, v13, v12, v9}, Lcom/alibaba/fastjson/serializer/ObjectSerializer;->write(Lcom/alibaba/fastjson/serializer/JSONSerializer;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/reflect/Type;)V
goto :goto_112
.line 44
:cond_11e
iget-object v10, v1, Lcom/alibaba/fastjson/serializer/JSONSerializer;->config:Lcom/alibaba/fastjson/serializer/SerializeConfig;
invoke-virtual {v10, v4}, Lcom/alibaba/fastjson/serializer/SerializeConfig;->get(Ljava/lang/Class;)Lcom/alibaba/fastjson/serializer/ObjectSerializer;
move-result-object v10
.line 45
invoke-interface {v10, v1, v13, v12, v9}, Lcom/alibaba/fastjson/serializer/ObjectSerializer;->write(Lcom/alibaba/fastjson/serializer/JSONSerializer;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/reflect/Type;)V
:try_end_127
.catchall {:try_start_66 .. :try_end_127} :catchall_147
move-object v11, v10
move-object v10, v4
goto :goto_112
.line 46
:cond_12a
iput-object v5, v1, Lcom/alibaba/fastjson/serializer/JSONSerializer;->context:Lcom/alibaba/fastjson/serializer/SerialContext;
.line 47
invoke-virtual/range {p1 .. p1}, Lcom/alibaba/fastjson/serializer/JSONSerializer;->decrementIdent()V
.line 48
iget v0, v2, Lcom/alibaba/fastjson/serializer/SerializeWriter;->features:I
sget-object v4, Lcom/alibaba/fastjson/serializer/SerializerFeature;->PrettyFormat:Lcom/alibaba/fastjson/serializer/SerializerFeature;
iget v4, v4, Lcom/alibaba/fastjson/serializer/SerializerFeature;->mask:I
and-int/2addr v0, v4
if-eqz v0, :cond_141
invoke-interface {v3}, Ljava/util/Map;->size()I
move-result v0
if-lez v0, :cond_141
.line 49
invoke-virtual/range {p1 .. p1}, Lcom/alibaba/fastjson/serializer/JSONSerializer;->println()V
:cond_141
const/16 v0, 0x7d
.line 50
invoke-virtual {v2, v0}, Lcom/alibaba/fastjson/serializer/SerializeWriter;->write(I)V
return-void
:catchall_147
move-exception v0
.line 51
iput-object v5, v1, Lcom/alibaba/fastjson/serializer/JSONSerializer;->context:Lcom/alibaba/fastjson/serializer/SerialContext;
.line 52
goto :goto_14c
:goto_14b
throw v0
:goto_14c
goto :goto_14b
.end method