TypeAdapterRuntimeTypeWrapper.smali 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169
  1. .class final Lcom/google/gson/internal/bind/TypeAdapterRuntimeTypeWrapper;
  2. .super Lcom/google/gson/TypeAdapter;
  3. .source ""
  4. # annotations
  5. .annotation system Ldalvik/annotation/Signature;
  6. value = {
  7. "<T:",
  8. "Ljava/lang/Object;",
  9. ">",
  10. "Lcom/google/gson/TypeAdapter<",
  11. "TT;>;"
  12. }
  13. .end annotation
  14. # instance fields
  15. .field private final context:Lcom/google/gson/Gson;
  16. .field private final delegate:Lcom/google/gson/TypeAdapter;
  17. .annotation system Ldalvik/annotation/Signature;
  18. value = {
  19. "Lcom/google/gson/TypeAdapter<",
  20. "TT;>;"
  21. }
  22. .end annotation
  23. .end field
  24. .field private final type:Ljava/lang/reflect/Type;
  25. # direct methods
  26. .method constructor <init>(Lcom/google/gson/Gson;Lcom/google/gson/TypeAdapter;Ljava/lang/reflect/Type;)V
  27. .locals 0
  28. .annotation system Ldalvik/annotation/Signature;
  29. value = {
  30. "(",
  31. "Lcom/google/gson/Gson;",
  32. "Lcom/google/gson/TypeAdapter<",
  33. "TT;>;",
  34. "Ljava/lang/reflect/Type;",
  35. ")V"
  36. }
  37. .end annotation
  38. invoke-direct {p0}, Lcom/google/gson/TypeAdapter;-><init>()V
  39. iput-object p1, p0, Lcom/google/gson/internal/bind/TypeAdapterRuntimeTypeWrapper;->context:Lcom/google/gson/Gson;
  40. iput-object p2, p0, Lcom/google/gson/internal/bind/TypeAdapterRuntimeTypeWrapper;->delegate:Lcom/google/gson/TypeAdapter;
  41. iput-object p3, p0, Lcom/google/gson/internal/bind/TypeAdapterRuntimeTypeWrapper;->type:Ljava/lang/reflect/Type;
  42. return-void
  43. .end method
  44. .method private getRuntimeTypeIfMoreSpecific(Ljava/lang/reflect/Type;Ljava/lang/Object;)Ljava/lang/reflect/Type;
  45. .locals 1
  46. if-eqz p2, :cond_1
  47. const-class v0, Ljava/lang/Object;
  48. if-eq p1, v0, :cond_0
  49. instance-of v0, p1, Ljava/lang/reflect/TypeVariable;
  50. if-nez v0, :cond_0
  51. instance-of v0, p1, Ljava/lang/Class;
  52. if-eqz v0, :cond_1
  53. :cond_0
  54. invoke-virtual {p2}, Ljava/lang/Object;->getClass()Ljava/lang/Class;
  55. move-result-object p1
  56. :cond_1
  57. return-object p1
  58. .end method
  59. # virtual methods
  60. .method public read(Lcom/google/gson/stream/JsonReader;)Ljava/lang/Object;
  61. .locals 1
  62. .annotation system Ldalvik/annotation/Signature;
  63. value = {
  64. "(",
  65. "Lcom/google/gson/stream/JsonReader;",
  66. ")TT;"
  67. }
  68. .end annotation
  69. .annotation system Ldalvik/annotation/Throws;
  70. value = {
  71. Ljava/io/IOException;
  72. }
  73. .end annotation
  74. iget-object v0, p0, Lcom/google/gson/internal/bind/TypeAdapterRuntimeTypeWrapper;->delegate:Lcom/google/gson/TypeAdapter;
  75. invoke-virtual {v0, p1}, Lcom/google/gson/TypeAdapter;->read(Lcom/google/gson/stream/JsonReader;)Ljava/lang/Object;
  76. move-result-object p1
  77. return-object p1
  78. .end method
  79. .method public write(Lcom/google/gson/stream/JsonWriter;Ljava/lang/Object;)V
  80. .locals 3
  81. .annotation system Ldalvik/annotation/Signature;
  82. value = {
  83. "(",
  84. "Lcom/google/gson/stream/JsonWriter;",
  85. "TT;)V"
  86. }
  87. .end annotation
  88. .annotation system Ldalvik/annotation/Throws;
  89. value = {
  90. Ljava/io/IOException;
  91. }
  92. .end annotation
  93. iget-object v0, p0, Lcom/google/gson/internal/bind/TypeAdapterRuntimeTypeWrapper;->delegate:Lcom/google/gson/TypeAdapter;
  94. iget-object v1, p0, Lcom/google/gson/internal/bind/TypeAdapterRuntimeTypeWrapper;->type:Ljava/lang/reflect/Type;
  95. invoke-direct {p0, v1, p2}, Lcom/google/gson/internal/bind/TypeAdapterRuntimeTypeWrapper;->getRuntimeTypeIfMoreSpecific(Ljava/lang/reflect/Type;Ljava/lang/Object;)Ljava/lang/reflect/Type;
  96. move-result-object v1
  97. iget-object v2, p0, Lcom/google/gson/internal/bind/TypeAdapterRuntimeTypeWrapper;->type:Ljava/lang/reflect/Type;
  98. if-eq v1, v2, :cond_1
  99. iget-object v0, p0, Lcom/google/gson/internal/bind/TypeAdapterRuntimeTypeWrapper;->context:Lcom/google/gson/Gson;
  100. invoke-static {v1}, Lcom/google/gson/reflect/TypeToken;->get(Ljava/lang/reflect/Type;)Lcom/google/gson/reflect/TypeToken;
  101. move-result-object v1
  102. invoke-virtual {v0, v1}, Lcom/google/gson/Gson;->getAdapter(Lcom/google/gson/reflect/TypeToken;)Lcom/google/gson/TypeAdapter;
  103. move-result-object v0
  104. instance-of v1, v0, Lcom/google/gson/internal/bind/ReflectiveTypeAdapterFactory$Adapter;
  105. if-nez v1, :cond_0
  106. goto :goto_0
  107. :cond_0
  108. iget-object v1, p0, Lcom/google/gson/internal/bind/TypeAdapterRuntimeTypeWrapper;->delegate:Lcom/google/gson/TypeAdapter;
  109. instance-of v2, v1, Lcom/google/gson/internal/bind/ReflectiveTypeAdapterFactory$Adapter;
  110. if-nez v2, :cond_1
  111. move-object v0, v1
  112. :cond_1
  113. :goto_0
  114. invoke-virtual {v0, p1, p2}, Lcom/google/gson/TypeAdapter;->write(Lcom/google/gson/stream/JsonWriter;Ljava/lang/Object;)V
  115. return-void
  116. .end method