JsonAdapterAnnotationTypeAdapterFactory.smali 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236
  1. .class public final Lcom/google/gson/internal/bind/JsonAdapterAnnotationTypeAdapterFactory;
  2. .super Ljava/lang/Object;
  3. .source ""
  4. # interfaces
  5. .implements Lcom/google/gson/TypeAdapterFactory;
  6. # instance fields
  7. .field private final constructorConstructor:Lcom/google/gson/internal/ConstructorConstructor;
  8. # direct methods
  9. .method public constructor <init>(Lcom/google/gson/internal/ConstructorConstructor;)V
  10. .locals 0
  11. invoke-direct {p0}, Ljava/lang/Object;-><init>()V
  12. iput-object p1, p0, Lcom/google/gson/internal/bind/JsonAdapterAnnotationTypeAdapterFactory;->constructorConstructor:Lcom/google/gson/internal/ConstructorConstructor;
  13. return-void
  14. .end method
  15. # virtual methods
  16. .method public create(Lcom/google/gson/Gson;Lcom/google/gson/reflect/TypeToken;)Lcom/google/gson/TypeAdapter;
  17. .locals 2
  18. .annotation system Ldalvik/annotation/Signature;
  19. value = {
  20. "<T:",
  21. "Ljava/lang/Object;",
  22. ">(",
  23. "Lcom/google/gson/Gson;",
  24. "Lcom/google/gson/reflect/TypeToken<",
  25. "TT;>;)",
  26. "Lcom/google/gson/TypeAdapter<",
  27. "TT;>;"
  28. }
  29. .end annotation
  30. invoke-virtual {p2}, Lcom/google/gson/reflect/TypeToken;->getRawType()Ljava/lang/Class;
  31. move-result-object v0
  32. const-class v1, Lcom/google/gson/annotations/JsonAdapter;
  33. invoke-virtual {v0, v1}, Ljava/lang/Class;->getAnnotation(Ljava/lang/Class;)Ljava/lang/annotation/Annotation;
  34. move-result-object v0
  35. check-cast v0, Lcom/google/gson/annotations/JsonAdapter;
  36. if-nez v0, :cond_0
  37. const/4 p1, 0x0
  38. return-object p1
  39. :cond_0
  40. iget-object v1, p0, Lcom/google/gson/internal/bind/JsonAdapterAnnotationTypeAdapterFactory;->constructorConstructor:Lcom/google/gson/internal/ConstructorConstructor;
  41. invoke-virtual {p0, v1, p1, p2, v0}, Lcom/google/gson/internal/bind/JsonAdapterAnnotationTypeAdapterFactory;->getTypeAdapter(Lcom/google/gson/internal/ConstructorConstructor;Lcom/google/gson/Gson;Lcom/google/gson/reflect/TypeToken;Lcom/google/gson/annotations/JsonAdapter;)Lcom/google/gson/TypeAdapter;
  42. move-result-object p1
  43. return-object p1
  44. .end method
  45. .method getTypeAdapter(Lcom/google/gson/internal/ConstructorConstructor;Lcom/google/gson/Gson;Lcom/google/gson/reflect/TypeToken;Lcom/google/gson/annotations/JsonAdapter;)Lcom/google/gson/TypeAdapter;
  46. .locals 8
  47. .annotation system Ldalvik/annotation/Signature;
  48. value = {
  49. "(",
  50. "Lcom/google/gson/internal/ConstructorConstructor;",
  51. "Lcom/google/gson/Gson;",
  52. "Lcom/google/gson/reflect/TypeToken<",
  53. "*>;",
  54. "Lcom/google/gson/annotations/JsonAdapter;",
  55. ")",
  56. "Lcom/google/gson/TypeAdapter<",
  57. "*>;"
  58. }
  59. .end annotation
  60. invoke-interface {p4}, Lcom/google/gson/annotations/JsonAdapter;->value()Ljava/lang/Class;
  61. move-result-object v0
  62. invoke-static {v0}, Lcom/google/gson/reflect/TypeToken;->get(Ljava/lang/Class;)Lcom/google/gson/reflect/TypeToken;
  63. move-result-object v0
  64. invoke-virtual {p1, v0}, Lcom/google/gson/internal/ConstructorConstructor;->get(Lcom/google/gson/reflect/TypeToken;)Lcom/google/gson/internal/ObjectConstructor;
  65. move-result-object p1
  66. invoke-interface {p1}, Lcom/google/gson/internal/ObjectConstructor;->construct()Ljava/lang/Object;
  67. move-result-object p1
  68. instance-of v0, p1, Lcom/google/gson/TypeAdapter;
  69. if-eqz v0, :cond_0
  70. check-cast p1, Lcom/google/gson/TypeAdapter;
  71. goto :goto_2
  72. :cond_0
  73. instance-of v0, p1, Lcom/google/gson/TypeAdapterFactory;
  74. if-eqz v0, :cond_1
  75. check-cast p1, Lcom/google/gson/TypeAdapterFactory;
  76. invoke-interface {p1, p2, p3}, Lcom/google/gson/TypeAdapterFactory;->create(Lcom/google/gson/Gson;Lcom/google/gson/reflect/TypeToken;)Lcom/google/gson/TypeAdapter;
  77. move-result-object p1
  78. goto :goto_2
  79. :cond_1
  80. instance-of v0, p1, Lcom/google/gson/JsonSerializer;
  81. if-nez v0, :cond_3
  82. instance-of v1, p1, Lcom/google/gson/JsonDeserializer;
  83. if-eqz v1, :cond_2
  84. goto :goto_0
  85. :cond_2
  86. new-instance p2, Ljava/lang/IllegalArgumentException;
  87. new-instance p4, Ljava/lang/StringBuilder;
  88. invoke-direct {p4}, Ljava/lang/StringBuilder;-><init>()V
  89. const-string v0, "Invalid attempt to bind an instance of "
  90. invoke-virtual {p4, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
  91. invoke-virtual {p1}, Ljava/lang/Object;->getClass()Ljava/lang/Class;
  92. move-result-object p1
  93. invoke-virtual {p1}, Ljava/lang/Class;->getName()Ljava/lang/String;
  94. move-result-object p1
  95. invoke-virtual {p4, p1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
  96. const-string p1, " as a @JsonAdapter for "
  97. invoke-virtual {p4, p1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
  98. invoke-virtual {p3}, Lcom/google/gson/reflect/TypeToken;->toString()Ljava/lang/String;
  99. move-result-object p1
  100. invoke-virtual {p4, p1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
  101. const-string p1, ". @JsonAdapter value must be a TypeAdapter, TypeAdapterFactory,"
  102. invoke-virtual {p4, p1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
  103. const-string p1, " JsonSerializer or JsonDeserializer."
  104. invoke-virtual {p4, p1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
  105. invoke-virtual {p4}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
  106. move-result-object p1
  107. invoke-direct {p2, p1}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
  108. throw p2
  109. :cond_3
  110. :goto_0
  111. const/4 v1, 0x0
  112. if-eqz v0, :cond_4
  113. move-object v0, p1
  114. check-cast v0, Lcom/google/gson/JsonSerializer;
  115. move-object v3, v0
  116. goto :goto_1
  117. :cond_4
  118. move-object v3, v1
  119. :goto_1
  120. instance-of v0, p1, Lcom/google/gson/JsonDeserializer;
  121. if-eqz v0, :cond_5
  122. move-object v1, p1
  123. check-cast v1, Lcom/google/gson/JsonDeserializer;
  124. :cond_5
  125. move-object v4, v1
  126. new-instance p1, Lcom/google/gson/internal/bind/TreeTypeAdapter;
  127. const/4 v7, 0x0
  128. move-object v2, p1
  129. move-object v5, p2
  130. move-object v6, p3
  131. invoke-direct/range {v2 .. v7}, Lcom/google/gson/internal/bind/TreeTypeAdapter;-><init>(Lcom/google/gson/JsonSerializer;Lcom/google/gson/JsonDeserializer;Lcom/google/gson/Gson;Lcom/google/gson/reflect/TypeToken;Lcom/google/gson/TypeAdapterFactory;)V
  132. :goto_2
  133. if-eqz p1, :cond_6
  134. invoke-interface {p4}, Lcom/google/gson/annotations/JsonAdapter;->nullSafe()Z
  135. move-result p2
  136. if-eqz p2, :cond_6
  137. invoke-virtual {p1}, Lcom/google/gson/TypeAdapter;->nullSafe()Lcom/google/gson/TypeAdapter;
  138. move-result-object p1
  139. :cond_6
  140. return-object p1
  141. .end method