.class public abstract Lcom/alibaba/fastjson/parser/deserializer/FieldDeserializer; .super Ljava/lang/Object; .source "FieldDeserializer.java" # instance fields .field public final clazz:Ljava/lang/Class; .annotation system Ldalvik/annotation/Signature; value = { "Ljava/lang/Class<", "*>;" } .end annotation .end field .field protected enumNameHashCodes:[J .field protected enums:[Ljava/lang/Enum; .field public final fieldInfo:Lcom/alibaba/fastjson/util/FieldInfo; # direct methods .method public constructor (Ljava/lang/Class;Lcom/alibaba/fastjson/util/FieldInfo;I)V .registers 12 .annotation system Ldalvik/annotation/Signature; value = { "(", "Ljava/lang/Class<", "*>;", "Lcom/alibaba/fastjson/util/FieldInfo;", "I)V" } .end annotation .line 23 invoke-direct {p0}, Ljava/lang/Object;->()V .line 24 iput-object p1, p0, Lcom/alibaba/fastjson/parser/deserializer/FieldDeserializer;->clazz:Ljava/lang/Class; .line 25 iput-object p2, p0, Lcom/alibaba/fastjson/parser/deserializer/FieldDeserializer;->fieldInfo:Lcom/alibaba/fastjson/util/FieldInfo; if-nez p2, :cond_a return-void .line 31 :cond_a iget-object p1, p2, Lcom/alibaba/fastjson/util/FieldInfo;->fieldClass:Ljava/lang/Class; .line 32 invoke-virtual {p1}, Ljava/lang/Class;->isEnum()Z move-result p2 if-eqz p2, :cond_7b .line 33 invoke-virtual {p1}, Ljava/lang/Class;->getEnumConstants()[Ljava/lang/Object; move-result-object p1 check-cast p1, [Ljava/lang/Enum; check-cast p1, [Ljava/lang/Enum; .line 35 array-length p2, p1 new-array p3, p2, [J .line 36 array-length v0, p1 new-array v0, v0, [J iput-object v0, p0, Lcom/alibaba/fastjson/parser/deserializer/FieldDeserializer;->enumNameHashCodes:[J const/4 v0, 0x0 move v1, v0 .line 37 :goto_24 array-length v2, p1 if-ge v1, v2, :cond_51 .line 38 aget-object v2, p1, v1 invoke-virtual {v2}, Ljava/lang/Enum;->name()Ljava/lang/String; move-result-object v2 const-wide v3, -0x340d631b7bdddcdbL # -7.302176725335867E57 move v5, v0 .line 40 :goto_33 invoke-virtual {v2}, Ljava/lang/String;->length()I move-result v6 if-ge v5, v6, :cond_48 .line 41 invoke-virtual {v2, v5}, Ljava/lang/String;->charAt(I)C move-result v6 int-to-long v6, v6 xor-long/2addr v3, v6 const-wide v6, 0x100000001b3L mul-long/2addr v3, v6 add-int/lit8 v5, v5, 0x1 goto :goto_33 .line 45 :cond_48 aput-wide v3, p3, v1 .line 46 iget-object v2, p0, Lcom/alibaba/fastjson/parser/deserializer/FieldDeserializer;->enumNameHashCodes:[J aput-wide v3, v2, v1 add-int/lit8 v1, v1, 0x1 goto :goto_24 .line 49 :cond_51 iget-object v1, p0, Lcom/alibaba/fastjson/parser/deserializer/FieldDeserializer;->enumNameHashCodes:[J invoke-static {v1}, Ljava/util/Arrays;->sort([J)V .line 51 array-length v1, p1 new-array v1, v1, [Ljava/lang/Enum; iput-object v1, p0, Lcom/alibaba/fastjson/parser/deserializer/FieldDeserializer;->enums:[Ljava/lang/Enum; move v1, v0 .line 52 :goto_5c iget-object v2, p0, Lcom/alibaba/fastjson/parser/deserializer/FieldDeserializer;->enumNameHashCodes:[J array-length v2, v2 if-ge v1, v2, :cond_7b move v2, v0 :goto_62 if-ge v2, p2, :cond_78 .line 54 iget-object v3, p0, Lcom/alibaba/fastjson/parser/deserializer/FieldDeserializer;->enumNameHashCodes:[J aget-wide v4, v3, v1 aget-wide v6, p3, v2 cmp-long v3, v4, v6 if-nez v3, :cond_75 .line 55 iget-object v3, p0, Lcom/alibaba/fastjson/parser/deserializer/FieldDeserializer;->enums:[Ljava/lang/Enum; aget-object v2, p1, v2 aput-object v2, v3, v1 goto :goto_78 :cond_75 add-int/lit8 v2, v2, 0x1 goto :goto_62 :cond_78 :goto_78 add-int/lit8 v1, v1, 0x1 goto :goto_5c :cond_7b return-void .end method # virtual methods .method public getEnumByHashCode(J)Ljava/lang/Enum; .registers 5 .line 64 iget-object v0, p0, Lcom/alibaba/fastjson/parser/deserializer/FieldDeserializer;->enums:[Ljava/lang/Enum; const/4 v1, 0x0 if-nez v0, :cond_6 return-object v1 .line 68 :cond_6 iget-object v0, p0, Lcom/alibaba/fastjson/parser/deserializer/FieldDeserializer;->enumNameHashCodes:[J invoke-static {v0, p1, p2}, Ljava/util/Arrays;->binarySearch([JJ)I move-result p1 if-gez p1, :cond_f return-object v1 .line 74 :cond_f iget-object p2, p0, Lcom/alibaba/fastjson/parser/deserializer/FieldDeserializer;->enums:[Ljava/lang/Enum; aget-object p1, p2, p1 return-object p1 .end method .method public abstract parseField(Lcom/alibaba/fastjson/parser/DefaultJSONParser;Ljava/lang/Object;Ljava/lang/reflect/Type;Ljava/util/Map;)V .annotation system Ldalvik/annotation/Signature; value = { "(", "Lcom/alibaba/fastjson/parser/DefaultJSONParser;", "Ljava/lang/Object;", "Ljava/lang/reflect/Type;", "Ljava/util/Map<", "Ljava/lang/String;", "Ljava/lang/Object;", ">;)V" } .end annotation .end method .method public setValue(Ljava/lang/Object;D)V .registers 5 .annotation system Ldalvik/annotation/Throws; value = { Ljava/lang/IllegalAccessException; } .end annotation .line 93 iget-object v0, p0, Lcom/alibaba/fastjson/parser/deserializer/FieldDeserializer;->fieldInfo:Lcom/alibaba/fastjson/util/FieldInfo; iget-object v0, v0, Lcom/alibaba/fastjson/util/FieldInfo;->field:Ljava/lang/reflect/Field; invoke-virtual {v0, p1, p2, p3}, Ljava/lang/reflect/Field;->setDouble(Ljava/lang/Object;D)V return-void .end method .method public setValue(Ljava/lang/Object;F)V .registers 4 .annotation system Ldalvik/annotation/Throws; value = { Ljava/lang/IllegalAccessException; } .end annotation .line 89 iget-object v0, p0, Lcom/alibaba/fastjson/parser/deserializer/FieldDeserializer;->fieldInfo:Lcom/alibaba/fastjson/util/FieldInfo; iget-object v0, v0, Lcom/alibaba/fastjson/util/FieldInfo;->field:Ljava/lang/reflect/Field; invoke-virtual {v0, p1, p2}, Ljava/lang/reflect/Field;->setFloat(Ljava/lang/Object;F)V return-void .end method .method public setValue(Ljava/lang/Object;I)V .registers 4 .annotation system Ldalvik/annotation/Throws; value = { Ljava/lang/IllegalAccessException; } .end annotation .line 81 iget-object v0, p0, Lcom/alibaba/fastjson/parser/deserializer/FieldDeserializer;->fieldInfo:Lcom/alibaba/fastjson/util/FieldInfo; iget-object v0, v0, Lcom/alibaba/fastjson/util/FieldInfo;->field:Ljava/lang/reflect/Field; invoke-virtual {v0, p1, p2}, Ljava/lang/reflect/Field;->setInt(Ljava/lang/Object;I)V return-void .end method .method public setValue(Ljava/lang/Object;J)V .registers 5 .annotation system Ldalvik/annotation/Throws; value = { Ljava/lang/IllegalAccessException; } .end annotation .line 85 iget-object v0, p0, Lcom/alibaba/fastjson/parser/deserializer/FieldDeserializer;->fieldInfo:Lcom/alibaba/fastjson/util/FieldInfo; iget-object v0, v0, Lcom/alibaba/fastjson/util/FieldInfo;->field:Ljava/lang/reflect/Field; invoke-virtual {v0, p1, p2, p3}, Ljava/lang/reflect/Field;->setLong(Ljava/lang/Object;J)V return-void .end method .method public setValue(Ljava/lang/Object;Ljava/lang/Object;)V .registers 6 if-nez p2, :cond_d .line 99 iget-object v0, p0, Lcom/alibaba/fastjson/parser/deserializer/FieldDeserializer;->fieldInfo:Lcom/alibaba/fastjson/util/FieldInfo; iget-object v0, v0, Lcom/alibaba/fastjson/util/FieldInfo;->fieldClass:Ljava/lang/Class; .line 100 invoke-virtual {v0}, Ljava/lang/Class;->isPrimitive()Z move-result v0 if-eqz v0, :cond_d return-void .line 105 :cond_d iget-object v0, p0, Lcom/alibaba/fastjson/parser/deserializer/FieldDeserializer;->fieldInfo:Lcom/alibaba/fastjson/util/FieldInfo; iget-object v0, v0, Lcom/alibaba/fastjson/util/FieldInfo;->field:Ljava/lang/reflect/Field; .line 106 iget-object v1, p0, Lcom/alibaba/fastjson/parser/deserializer/FieldDeserializer;->fieldInfo:Lcom/alibaba/fastjson/util/FieldInfo; iget-object v1, v1, Lcom/alibaba/fastjson/util/FieldInfo;->method:Ljava/lang/reflect/Method; .line 108 :try_start_15 iget-object v2, p0, Lcom/alibaba/fastjson/parser/deserializer/FieldDeserializer;->fieldInfo:Lcom/alibaba/fastjson/util/FieldInfo; iget-boolean v2, v2, Lcom/alibaba/fastjson/util/FieldInfo;->fieldAccess:Z if-eqz v2, :cond_4d .line 109 iget-object v1, p0, Lcom/alibaba/fastjson/parser/deserializer/FieldDeserializer;->fieldInfo:Lcom/alibaba/fastjson/util/FieldInfo; iget-boolean v1, v1, Lcom/alibaba/fastjson/util/FieldInfo;->getOnly:Z if-eqz v1, :cond_49 .line 110 const-class v1, Ljava/util/Map; iget-object v2, p0, Lcom/alibaba/fastjson/parser/deserializer/FieldDeserializer;->fieldInfo:Lcom/alibaba/fastjson/util/FieldInfo; iget-object v2, v2, Lcom/alibaba/fastjson/util/FieldInfo;->fieldClass:Ljava/lang/Class; invoke-virtual {v1, v2}, Ljava/lang/Class;->isAssignableFrom(Ljava/lang/Class;)Z move-result v1 if-eqz v1, :cond_3b .line 111 invoke-virtual {v0, p1}, Ljava/lang/reflect/Field;->get(Ljava/lang/Object;)Ljava/lang/Object; move-result-object p1 check-cast p1, Ljava/util/Map; if-eqz p1, :cond_87 .line 113 check-cast p2, Ljava/util/Map; invoke-interface {p1, p2}, Ljava/util/Map;->putAll(Ljava/util/Map;)V goto :goto_87 .line 116 :cond_3b invoke-virtual {v0, p1}, Ljava/lang/reflect/Field;->get(Ljava/lang/Object;)Ljava/lang/Object; move-result-object p1 check-cast p1, Ljava/util/Collection; if-eqz p1, :cond_87 .line 118 check-cast p2, Ljava/util/Collection; invoke-interface {p1, p2}, Ljava/util/Collection;->addAll(Ljava/util/Collection;)Z goto :goto_87 .line 122 :cond_49 invoke-virtual {v0, p1, p2}, Ljava/lang/reflect/Field;->set(Ljava/lang/Object;Ljava/lang/Object;)V goto :goto_87 .line 125 :cond_4d iget-object v0, p0, Lcom/alibaba/fastjson/parser/deserializer/FieldDeserializer;->fieldInfo:Lcom/alibaba/fastjson/util/FieldInfo; iget-boolean v0, v0, Lcom/alibaba/fastjson/util/FieldInfo;->getOnly:Z if-eqz v0, :cond_80 .line 126 const-class v0, Ljava/util/Map; iget-object v2, p0, Lcom/alibaba/fastjson/parser/deserializer/FieldDeserializer;->fieldInfo:Lcom/alibaba/fastjson/util/FieldInfo; iget-object v2, v2, Lcom/alibaba/fastjson/util/FieldInfo;->fieldClass:Ljava/lang/Class; invoke-virtual {v0, v2}, Ljava/lang/Class;->isAssignableFrom(Ljava/lang/Class;)Z move-result v0 const/4 v2, 0x0 if-eqz v0, :cond_70 .line 127 new-array v0, v2, [Ljava/lang/Object; invoke-virtual {v1, p1, v0}, Ljava/lang/reflect/Method;->invoke(Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object; move-result-object p1 check-cast p1, Ljava/util/Map; if-eqz p1, :cond_87 .line 129 check-cast p2, Ljava/util/Map; invoke-interface {p1, p2}, Ljava/util/Map;->putAll(Ljava/util/Map;)V goto :goto_87 .line 132 :cond_70 new-array v0, v2, [Ljava/lang/Object; invoke-virtual {v1, p1, v0}, Ljava/lang/reflect/Method;->invoke(Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object; move-result-object p1 check-cast p1, Ljava/util/Collection; if-eqz p1, :cond_87 .line 134 check-cast p2, Ljava/util/Collection; invoke-interface {p1, p2}, Ljava/util/Collection;->addAll(Ljava/util/Collection;)Z goto :goto_87 .line 138 :cond_80 filled-new-array {p2}, [Ljava/lang/Object; move-result-object p2 invoke-virtual {v1, p1, p2}, Ljava/lang/reflect/Method;->invoke(Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object; :try_end_87 .catch Ljava/lang/Exception; {:try_start_15 .. :try_end_87} :catch_88 :cond_87 :goto_87 return-void :catch_88 move-exception p1 .line 142 new-instance p2, Lcom/alibaba/fastjson/JSONException; new-instance v0, Ljava/lang/StringBuilder; const-string v1, "set property error, " invoke-direct {v0, v1}, Ljava/lang/StringBuilder;->(Ljava/lang/String;)V iget-object v1, p0, Lcom/alibaba/fastjson/parser/deserializer/FieldDeserializer;->fieldInfo:Lcom/alibaba/fastjson/util/FieldInfo; iget-object v1, v1, Lcom/alibaba/fastjson/util/FieldInfo;->name:Ljava/lang/String; invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; move-result-object v0 invoke-virtual {v0}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String; move-result-object v0 invoke-direct {p2, v0, p1}, Lcom/alibaba/fastjson/JSONException;->(Ljava/lang/String;Ljava/lang/Throwable;)V throw p2 .end method