AnnotationSerializer.smali
.class public Lcom/tradplus/ads/common/serialization/serializer/AnnotationSerializer;
.super Ljava/lang/Object;
# interfaces
.implements Lcom/tradplus/ads/common/serialization/serializer/ObjectSerializer;
# static fields
.field private static volatile a:Ljava/lang/Class;
.field private static volatile b:Z
.field private static volatile c:Ljava/lang/reflect/Method;
.field private static volatile d:Ljava/lang/reflect/Method;
.field public static instance:Lcom/tradplus/ads/common/serialization/serializer/AnnotationSerializer;
# direct methods
.method static constructor <clinit>()V
.registers 1
new-instance v0, Lcom/tradplus/ads/common/serialization/serializer/AnnotationSerializer;
invoke-direct {v0}, Lcom/tradplus/ads/common/serialization/serializer/AnnotationSerializer;-><init>()V
sput-object v0, Lcom/tradplus/ads/common/serialization/serializer/AnnotationSerializer;->instance:Lcom/tradplus/ads/common/serialization/serializer/AnnotationSerializer;
return-void
.end method
.method public constructor <init>()V
.registers 1
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
return-void
.end method
# virtual methods
.method public write(Lcom/tradplus/ads/common/serialization/serializer/JSONSerializer;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/reflect/Type;I)V
.registers 11
invoke-virtual {p2}, Ljava/lang/Object;->getClass()Ljava/lang/Class;
move-result-object p3
invoke-virtual {p3}, Ljava/lang/Class;->getInterfaces()[Ljava/lang/Class;
move-result-object p3
array-length p4, p3
const/4 p5, 0x1
if-ne p4, p5, :cond_ed
const/4 p4, 0x0
aget-object v0, p3, p4
invoke-virtual {v0}, Ljava/lang/Class;->isAnnotation()Z
move-result v0
if-eqz v0, :cond_ed
aget-object p3, p3, p4
sget-object v0, Lcom/tradplus/ads/common/serialization/serializer/AnnotationSerializer;->a:Ljava/lang/Class;
const-string v1, "not support Type Annotation."
if-nez v0, :cond_33
sget-boolean v0, Lcom/tradplus/ads/common/serialization/serializer/AnnotationSerializer;->b:Z
if-nez v0, :cond_33
const-string v0, "sun.reflect.annotation.AnnotationType"
:try_start_23
invoke-static {v0}, Ljava/lang/Class;->forName(Ljava/lang/String;)Ljava/lang/Class;
move-result-object v0
sput-object v0, Lcom/tradplus/ads/common/serialization/serializer/AnnotationSerializer;->a:Ljava/lang/Class;
:try_end_29
.catch Ljava/lang/Throwable; {:try_start_23 .. :try_end_29} :catch_2a
goto :goto_33
:catch_2a
move-exception p1
sput-boolean p5, Lcom/tradplus/ads/common/serialization/serializer/AnnotationSerializer;->b:Z
new-instance p2, Lcom/tradplus/ads/common/serialization/JSONException;
invoke-direct {p2, v1, p1}, Lcom/tradplus/ads/common/serialization/JSONException;-><init>(Ljava/lang/String;Ljava/lang/Throwable;)V
throw p2
:cond_33
:goto_33
sget-object v0, Lcom/tradplus/ads/common/serialization/serializer/AnnotationSerializer;->a:Ljava/lang/Class;
if-eqz v0, :cond_e7
sget-object v0, Lcom/tradplus/ads/common/serialization/serializer/AnnotationSerializer;->c:Ljava/lang/reflect/Method;
if-nez v0, :cond_59
sget-boolean v0, Lcom/tradplus/ads/common/serialization/serializer/AnnotationSerializer;->b:Z
if-nez v0, :cond_59
:try_start_3f
sget-object v0, Lcom/tradplus/ads/common/serialization/serializer/AnnotationSerializer;->a:Ljava/lang/Class;
const-string v2, "getInstance"
new-array v3, p5, [Ljava/lang/Class;
const-class v4, Ljava/lang/Class;
aput-object v4, v3, p4
invoke-virtual {v0, v2, v3}, Ljava/lang/Class;->getMethod(Ljava/lang/String;[Ljava/lang/Class;)Ljava/lang/reflect/Method;
move-result-object v0
sput-object v0, Lcom/tradplus/ads/common/serialization/serializer/AnnotationSerializer;->c:Ljava/lang/reflect/Method;
:try_end_4f
.catch Ljava/lang/Throwable; {:try_start_3f .. :try_end_4f} :catch_50
goto :goto_59
:catch_50
move-exception p1
sput-boolean p5, Lcom/tradplus/ads/common/serialization/serializer/AnnotationSerializer;->b:Z
new-instance p2, Lcom/tradplus/ads/common/serialization/JSONException;
invoke-direct {p2, v1, p1}, Lcom/tradplus/ads/common/serialization/JSONException;-><init>(Ljava/lang/String;Ljava/lang/Throwable;)V
throw p2
:cond_59
:goto_59
sget-object v0, Lcom/tradplus/ads/common/serialization/serializer/AnnotationSerializer;->d:Ljava/lang/reflect/Method;
if-nez v0, :cond_77
sget-boolean v0, Lcom/tradplus/ads/common/serialization/serializer/AnnotationSerializer;->b:Z
if-nez v0, :cond_77
:try_start_61
sget-object v0, Lcom/tradplus/ads/common/serialization/serializer/AnnotationSerializer;->a:Ljava/lang/Class;
const-string v2, "members"
new-array v3, p4, [Ljava/lang/Class;
invoke-virtual {v0, v2, v3}, Ljava/lang/Class;->getMethod(Ljava/lang/String;[Ljava/lang/Class;)Ljava/lang/reflect/Method;
move-result-object v0
sput-object v0, Lcom/tradplus/ads/common/serialization/serializer/AnnotationSerializer;->d:Ljava/lang/reflect/Method;
:try_end_6d
.catch Ljava/lang/Throwable; {:try_start_61 .. :try_end_6d} :catch_6e
goto :goto_77
:catch_6e
move-exception p1
sput-boolean p5, Lcom/tradplus/ads/common/serialization/serializer/AnnotationSerializer;->b:Z
new-instance p2, Lcom/tradplus/ads/common/serialization/JSONException;
invoke-direct {p2, v1, p1}, Lcom/tradplus/ads/common/serialization/JSONException;-><init>(Ljava/lang/String;Ljava/lang/Throwable;)V
throw p2
:cond_77
:goto_77
sget-object v0, Lcom/tradplus/ads/common/serialization/serializer/AnnotationSerializer;->c:Ljava/lang/reflect/Method;
if-eqz v0, :cond_e1
sget-boolean v0, Lcom/tradplus/ads/common/serialization/serializer/AnnotationSerializer;->b:Z
if-nez v0, :cond_e1
:try_start_7f
sget-object v0, Lcom/tradplus/ads/common/serialization/serializer/AnnotationSerializer;->c:Ljava/lang/reflect/Method;
new-array v2, p5, [Ljava/lang/Object;
aput-object p3, v2, p4
const/4 p3, 0x0
invoke-virtual {v0, p3, v2}, Ljava/lang/reflect/Method;->invoke(Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object;
move-result-object v0
:try_end_8a
.catch Ljava/lang/Throwable; {:try_start_7f .. :try_end_8a} :catch_d8
:try_start_8a
sget-object v2, Lcom/tradplus/ads/common/serialization/serializer/AnnotationSerializer;->d:Ljava/lang/reflect/Method;
new-array v3, p4, [Ljava/lang/Object;
invoke-virtual {v2, v0, v3}, Ljava/lang/reflect/Method;->invoke(Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object;
move-result-object v0
check-cast v0, Ljava/util/Map;
:try_end_94
.catch Ljava/lang/Throwable; {:try_start_8a .. :try_end_94} :catch_cf
new-instance p5, Lcom/tradplus/ads/common/serialization/JSONObject;
invoke-interface {v0}, Ljava/util/Map;->size()I
move-result v1
invoke-direct {p5, v1}, Lcom/tradplus/ads/common/serialization/JSONObject;-><init>(I)V
invoke-interface {v0}, Ljava/util/Map;->entrySet()Ljava/util/Set;
move-result-object v0
invoke-interface {v0}, Ljava/util/Set;->iterator()Ljava/util/Iterator;
move-result-object v0
:goto_a5
invoke-interface {v0}, Ljava/util/Iterator;->hasNext()Z
move-result v1
if-eqz v1, :cond_cb
invoke-interface {v0}, Ljava/util/Iterator;->next()Ljava/lang/Object;
move-result-object v1
check-cast v1, Ljava/util/Map$Entry;
:try_start_b1
invoke-interface {v1}, Ljava/util/Map$Entry;->getValue()Ljava/lang/Object;
move-result-object v2
check-cast v2, Ljava/lang/reflect/Method;
new-array v3, p4, [Ljava/lang/Object;
invoke-virtual {v2, p2, v3}, Ljava/lang/reflect/Method;->invoke(Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object;
move-result-object p3
:try_end_bd
.catch Ljava/lang/IllegalAccessException; {:try_start_b1 .. :try_end_bd} :catch_bd
.catch Ljava/lang/reflect/InvocationTargetException; {:try_start_b1 .. :try_end_bd} :catch_bd
:catch_bd
invoke-interface {v1}, Ljava/util/Map$Entry;->getKey()Ljava/lang/Object;
move-result-object v1
check-cast v1, Ljava/lang/String;
invoke-static {p3}, Lcom/tradplus/ads/common/serialization/JSON;->toJSON(Ljava/lang/Object;)Ljava/lang/Object;
move-result-object v2
invoke-virtual {p5, v1, v2}, Lcom/tradplus/ads/common/serialization/JSONObject;->put(Ljava/lang/String;Ljava/lang/Object;)Ljava/lang/Object;
goto :goto_a5
:cond_cb
invoke-virtual {p1, p5}, Lcom/tradplus/ads/common/serialization/serializer/JSONSerializer;->write(Ljava/lang/Object;)V
return-void
:catch_cf
move-exception p1
sput-boolean p5, Lcom/tradplus/ads/common/serialization/serializer/AnnotationSerializer;->b:Z
new-instance p2, Lcom/tradplus/ads/common/serialization/JSONException;
invoke-direct {p2, v1, p1}, Lcom/tradplus/ads/common/serialization/JSONException;-><init>(Ljava/lang/String;Ljava/lang/Throwable;)V
throw p2
:catch_d8
move-exception p1
sput-boolean p5, Lcom/tradplus/ads/common/serialization/serializer/AnnotationSerializer;->b:Z
new-instance p2, Lcom/tradplus/ads/common/serialization/JSONException;
invoke-direct {p2, v1, p1}, Lcom/tradplus/ads/common/serialization/JSONException;-><init>(Ljava/lang/String;Ljava/lang/Throwable;)V
throw p2
:cond_e1
new-instance p1, Lcom/tradplus/ads/common/serialization/JSONException;
invoke-direct {p1, v1}, Lcom/tradplus/ads/common/serialization/JSONException;-><init>(Ljava/lang/String;)V
throw p1
:cond_e7
new-instance p1, Lcom/tradplus/ads/common/serialization/JSONException;
invoke-direct {p1, v1}, Lcom/tradplus/ads/common/serialization/JSONException;-><init>(Ljava/lang/String;)V
throw p1
:cond_ed
return-void
.end method