SerializedObserver.smali 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536
  1. .class public final Lio/reactivex/observers/SerializedObserver;
  2. .super Ljava/lang/Object;
  3. .source "SerializedObserver.java"
  4. # interfaces
  5. .implements Lio/reactivex/Observer;
  6. .implements Lio/reactivex/disposables/Disposable;
  7. # annotations
  8. .annotation system Ldalvik/annotation/Signature;
  9. value = {
  10. "<T:",
  11. "Ljava/lang/Object;",
  12. ">",
  13. "Ljava/lang/Object;",
  14. "Lio/reactivex/Observer<",
  15. "TT;>;",
  16. "Lio/reactivex/disposables/Disposable;"
  17. }
  18. .end annotation
  19. # static fields
  20. .field static final QUEUE_LINK_SIZE:I = 0x4
  21. # instance fields
  22. .field final actual:Lio/reactivex/Observer;
  23. .annotation system Ldalvik/annotation/Signature;
  24. value = {
  25. "Lio/reactivex/Observer<",
  26. "-TT;>;"
  27. }
  28. .end annotation
  29. .end field
  30. .field final delayError:Z
  31. .field volatile done:Z
  32. .field emitting:Z
  33. .field queue:Lio/reactivex/internal/util/AppendOnlyLinkedArrayList;
  34. .annotation system Ldalvik/annotation/Signature;
  35. value = {
  36. "Lio/reactivex/internal/util/AppendOnlyLinkedArrayList<",
  37. "Ljava/lang/Object;",
  38. ">;"
  39. }
  40. .end annotation
  41. .end field
  42. .field s:Lio/reactivex/disposables/Disposable;
  43. # direct methods
  44. .method public constructor <init>(Lio/reactivex/Observer;)V
  45. .locals 1
  46. .annotation system Ldalvik/annotation/Signature;
  47. value = {
  48. "(",
  49. "Lio/reactivex/Observer<",
  50. "-TT;>;)V"
  51. }
  52. .end annotation
  53. const/4 v0, 0x0
  54. .line 49
  55. invoke-direct {p0, p1, v0}, Lio/reactivex/observers/SerializedObserver;-><init>(Lio/reactivex/Observer;Z)V
  56. return-void
  57. .end method
  58. .method public constructor <init>(Lio/reactivex/Observer;Z)V
  59. .locals 0
  60. .annotation system Ldalvik/annotation/Signature;
  61. value = {
  62. "(",
  63. "Lio/reactivex/Observer<",
  64. "-TT;>;Z)V"
  65. }
  66. .end annotation
  67. .line 59
  68. invoke-direct {p0}, Ljava/lang/Object;-><init>()V
  69. .line 60
  70. iput-object p1, p0, Lio/reactivex/observers/SerializedObserver;->actual:Lio/reactivex/Observer;
  71. .line 61
  72. iput-boolean p2, p0, Lio/reactivex/observers/SerializedObserver;->delayError:Z
  73. return-void
  74. .end method
  75. # virtual methods
  76. .method public dispose()V
  77. .locals 1
  78. .line 76
  79. iget-object v0, p0, Lio/reactivex/observers/SerializedObserver;->s:Lio/reactivex/disposables/Disposable;
  80. invoke-interface {v0}, Lio/reactivex/disposables/Disposable;->dispose()V
  81. return-void
  82. .end method
  83. .method emitLoop()V
  84. .locals 2
  85. .line 186
  86. :cond_0
  87. monitor-enter p0
  88. .line 187
  89. :try_start_0
  90. iget-object v0, p0, Lio/reactivex/observers/SerializedObserver;->queue:Lio/reactivex/internal/util/AppendOnlyLinkedArrayList;
  91. if-nez v0, :cond_1
  92. const/4 v0, 0x0
  93. .line 189
  94. iput-boolean v0, p0, Lio/reactivex/observers/SerializedObserver;->emitting:Z
  95. .line 190
  96. monitor-exit p0
  97. return-void
  98. :cond_1
  99. const/4 v1, 0x0
  100. .line 192
  101. iput-object v1, p0, Lio/reactivex/observers/SerializedObserver;->queue:Lio/reactivex/internal/util/AppendOnlyLinkedArrayList;
  102. .line 193
  103. monitor-exit p0
  104. :try_end_0
  105. .catchall {:try_start_0 .. :try_end_0} :catchall_0
  106. .line 195
  107. iget-object v1, p0, Lio/reactivex/observers/SerializedObserver;->actual:Lio/reactivex/Observer;
  108. invoke-virtual {v0, v1}, Lio/reactivex/internal/util/AppendOnlyLinkedArrayList;->accept(Lio/reactivex/Observer;)Z
  109. move-result v0
  110. if-eqz v0, :cond_0
  111. return-void
  112. :catchall_0
  113. move-exception v0
  114. .line 193
  115. :try_start_1
  116. monitor-exit p0
  117. :try_end_1
  118. .catchall {:try_start_1 .. :try_end_1} :catchall_0
  119. goto :goto_1
  120. :goto_0
  121. throw v0
  122. :goto_1
  123. goto :goto_0
  124. .end method
  125. .method public isDisposed()Z
  126. .locals 1
  127. .line 81
  128. iget-object v0, p0, Lio/reactivex/observers/SerializedObserver;->s:Lio/reactivex/disposables/Disposable;
  129. invoke-interface {v0}, Lio/reactivex/disposables/Disposable;->isDisposed()Z
  130. move-result v0
  131. return v0
  132. .end method
  133. .method public onComplete()V
  134. .locals 2
  135. .line 159
  136. iget-boolean v0, p0, Lio/reactivex/observers/SerializedObserver;->done:Z
  137. if-eqz v0, :cond_0
  138. return-void
  139. .line 162
  140. :cond_0
  141. monitor-enter p0
  142. .line 163
  143. :try_start_0
  144. iget-boolean v0, p0, Lio/reactivex/observers/SerializedObserver;->done:Z
  145. if-eqz v0, :cond_1
  146. .line 164
  147. monitor-exit p0
  148. return-void
  149. .line 166
  150. :cond_1
  151. iget-boolean v0, p0, Lio/reactivex/observers/SerializedObserver;->emitting:Z
  152. if-eqz v0, :cond_3
  153. .line 167
  154. iget-object v0, p0, Lio/reactivex/observers/SerializedObserver;->queue:Lio/reactivex/internal/util/AppendOnlyLinkedArrayList;
  155. if-nez v0, :cond_2
  156. .line 169
  157. new-instance v0, Lio/reactivex/internal/util/AppendOnlyLinkedArrayList;
  158. const/4 v1, 0x4
  159. invoke-direct {v0, v1}, Lio/reactivex/internal/util/AppendOnlyLinkedArrayList;-><init>(I)V
  160. .line 170
  161. iput-object v0, p0, Lio/reactivex/observers/SerializedObserver;->queue:Lio/reactivex/internal/util/AppendOnlyLinkedArrayList;
  162. .line 172
  163. :cond_2
  164. invoke-static {}, Lio/reactivex/internal/util/NotificationLite;->complete()Ljava/lang/Object;
  165. move-result-object v1
  166. invoke-virtual {v0, v1}, Lio/reactivex/internal/util/AppendOnlyLinkedArrayList;->add(Ljava/lang/Object;)V
  167. .line 173
  168. monitor-exit p0
  169. return-void
  170. :cond_3
  171. const/4 v0, 0x1
  172. .line 175
  173. iput-boolean v0, p0, Lio/reactivex/observers/SerializedObserver;->done:Z
  174. .line 176
  175. iput-boolean v0, p0, Lio/reactivex/observers/SerializedObserver;->emitting:Z
  176. .line 177
  177. monitor-exit p0
  178. :try_end_0
  179. .catchall {:try_start_0 .. :try_end_0} :catchall_0
  180. .line 179
  181. iget-object v0, p0, Lio/reactivex/observers/SerializedObserver;->actual:Lio/reactivex/Observer;
  182. invoke-interface {v0}, Lio/reactivex/Observer;->onComplete()V
  183. return-void
  184. :catchall_0
  185. move-exception v0
  186. .line 177
  187. :try_start_1
  188. monitor-exit p0
  189. :try_end_1
  190. .catchall {:try_start_1 .. :try_end_1} :catchall_0
  191. throw v0
  192. .end method
  193. .method public onError(Ljava/lang/Throwable;)V
  194. .locals 2
  195. .line 118
  196. iget-boolean v0, p0, Lio/reactivex/observers/SerializedObserver;->done:Z
  197. if-eqz v0, :cond_0
  198. .line 119
  199. invoke-static {p1}, Lio/reactivex/plugins/RxJavaPlugins;->onError(Ljava/lang/Throwable;)V
  200. return-void
  201. .line 123
  202. :cond_0
  203. monitor-enter p0
  204. .line 124
  205. :try_start_0
  206. iget-boolean v0, p0, Lio/reactivex/observers/SerializedObserver;->done:Z
  207. const/4 v1, 0x1
  208. if-eqz v0, :cond_1
  209. goto :goto_1
  210. .line 127
  211. :cond_1
  212. iget-boolean v0, p0, Lio/reactivex/observers/SerializedObserver;->emitting:Z
  213. if-eqz v0, :cond_4
  214. .line 128
  215. iput-boolean v1, p0, Lio/reactivex/observers/SerializedObserver;->done:Z
  216. .line 129
  217. iget-object v0, p0, Lio/reactivex/observers/SerializedObserver;->queue:Lio/reactivex/internal/util/AppendOnlyLinkedArrayList;
  218. if-nez v0, :cond_2
  219. .line 131
  220. new-instance v0, Lio/reactivex/internal/util/AppendOnlyLinkedArrayList;
  221. const/4 v1, 0x4
  222. invoke-direct {v0, v1}, Lio/reactivex/internal/util/AppendOnlyLinkedArrayList;-><init>(I)V
  223. .line 132
  224. iput-object v0, p0, Lio/reactivex/observers/SerializedObserver;->queue:Lio/reactivex/internal/util/AppendOnlyLinkedArrayList;
  225. .line 134
  226. :cond_2
  227. invoke-static {p1}, Lio/reactivex/internal/util/NotificationLite;->error(Ljava/lang/Throwable;)Ljava/lang/Object;
  228. move-result-object p1
  229. .line 135
  230. iget-boolean v1, p0, Lio/reactivex/observers/SerializedObserver;->delayError:Z
  231. if-eqz v1, :cond_3
  232. .line 136
  233. invoke-virtual {v0, p1}, Lio/reactivex/internal/util/AppendOnlyLinkedArrayList;->add(Ljava/lang/Object;)V
  234. goto :goto_0
  235. .line 138
  236. :cond_3
  237. invoke-virtual {v0, p1}, Lio/reactivex/internal/util/AppendOnlyLinkedArrayList;->setFirst(Ljava/lang/Object;)V
  238. .line 140
  239. :goto_0
  240. monitor-exit p0
  241. return-void
  242. .line 142
  243. :cond_4
  244. iput-boolean v1, p0, Lio/reactivex/observers/SerializedObserver;->done:Z
  245. .line 143
  246. iput-boolean v1, p0, Lio/reactivex/observers/SerializedObserver;->emitting:Z
  247. const/4 v1, 0x0
  248. .line 146
  249. :goto_1
  250. monitor-exit p0
  251. :try_end_0
  252. .catchall {:try_start_0 .. :try_end_0} :catchall_0
  253. if-eqz v1, :cond_5
  254. .line 149
  255. invoke-static {p1}, Lio/reactivex/plugins/RxJavaPlugins;->onError(Ljava/lang/Throwable;)V
  256. return-void
  257. .line 153
  258. :cond_5
  259. iget-object v0, p0, Lio/reactivex/observers/SerializedObserver;->actual:Lio/reactivex/Observer;
  260. invoke-interface {v0, p1}, Lio/reactivex/Observer;->onError(Ljava/lang/Throwable;)V
  261. return-void
  262. :catchall_0
  263. move-exception p1
  264. .line 146
  265. :try_start_1
  266. monitor-exit p0
  267. :try_end_1
  268. .catchall {:try_start_1 .. :try_end_1} :catchall_0
  269. throw p1
  270. .end method
  271. .method public onNext(Ljava/lang/Object;)V
  272. .locals 2
  273. .annotation system Ldalvik/annotation/Signature;
  274. value = {
  275. "(TT;)V"
  276. }
  277. .end annotation
  278. .line 87
  279. iget-boolean v0, p0, Lio/reactivex/observers/SerializedObserver;->done:Z
  280. if-eqz v0, :cond_0
  281. return-void
  282. :cond_0
  283. if-nez p1, :cond_1
  284. .line 91
  285. iget-object p1, p0, Lio/reactivex/observers/SerializedObserver;->s:Lio/reactivex/disposables/Disposable;
  286. invoke-interface {p1}, Lio/reactivex/disposables/Disposable;->dispose()V
  287. .line 92
  288. new-instance p1, Ljava/lang/NullPointerException;
  289. const-string v0, "onNext called with null. Null values are generally not allowed in 2.x operators and sources."
  290. invoke-direct {p1, v0}, Ljava/lang/NullPointerException;-><init>(Ljava/lang/String;)V
  291. invoke-virtual {p0, p1}, Lio/reactivex/observers/SerializedObserver;->onError(Ljava/lang/Throwable;)V
  292. return-void
  293. .line 95
  294. :cond_1
  295. monitor-enter p0
  296. .line 96
  297. :try_start_0
  298. iget-boolean v0, p0, Lio/reactivex/observers/SerializedObserver;->done:Z
  299. if-eqz v0, :cond_2
  300. .line 97
  301. monitor-exit p0
  302. return-void
  303. .line 99
  304. :cond_2
  305. iget-boolean v0, p0, Lio/reactivex/observers/SerializedObserver;->emitting:Z
  306. if-eqz v0, :cond_4
  307. .line 100
  308. iget-object v0, p0, Lio/reactivex/observers/SerializedObserver;->queue:Lio/reactivex/internal/util/AppendOnlyLinkedArrayList;
  309. if-nez v0, :cond_3
  310. .line 102
  311. new-instance v0, Lio/reactivex/internal/util/AppendOnlyLinkedArrayList;
  312. const/4 v1, 0x4
  313. invoke-direct {v0, v1}, Lio/reactivex/internal/util/AppendOnlyLinkedArrayList;-><init>(I)V
  314. .line 103
  315. iput-object v0, p0, Lio/reactivex/observers/SerializedObserver;->queue:Lio/reactivex/internal/util/AppendOnlyLinkedArrayList;
  316. .line 105
  317. :cond_3
  318. invoke-static {p1}, Lio/reactivex/internal/util/NotificationLite;->next(Ljava/lang/Object;)Ljava/lang/Object;
  319. move-result-object p1
  320. invoke-virtual {v0, p1}, Lio/reactivex/internal/util/AppendOnlyLinkedArrayList;->add(Ljava/lang/Object;)V
  321. .line 106
  322. monitor-exit p0
  323. return-void
  324. :cond_4
  325. const/4 v0, 0x1
  326. .line 108
  327. iput-boolean v0, p0, Lio/reactivex/observers/SerializedObserver;->emitting:Z
  328. .line 109
  329. monitor-exit p0
  330. :try_end_0
  331. .catchall {:try_start_0 .. :try_end_0} :catchall_0
  332. .line 111
  333. iget-object v0, p0, Lio/reactivex/observers/SerializedObserver;->actual:Lio/reactivex/Observer;
  334. invoke-interface {v0, p1}, Lio/reactivex/Observer;->onNext(Ljava/lang/Object;)V
  335. .line 113
  336. invoke-virtual {p0}, Lio/reactivex/observers/SerializedObserver;->emitLoop()V
  337. return-void
  338. :catchall_0
  339. move-exception p1
  340. .line 109
  341. :try_start_1
  342. monitor-exit p0
  343. :try_end_1
  344. .catchall {:try_start_1 .. :try_end_1} :catchall_0
  345. throw p1
  346. .end method
  347. .method public onSubscribe(Lio/reactivex/disposables/Disposable;)V
  348. .locals 1
  349. .line 66
  350. iget-object v0, p0, Lio/reactivex/observers/SerializedObserver;->s:Lio/reactivex/disposables/Disposable;
  351. invoke-static {v0, p1}, Lio/reactivex/internal/disposables/DisposableHelper;->validate(Lio/reactivex/disposables/Disposable;Lio/reactivex/disposables/Disposable;)Z
  352. move-result v0
  353. if-eqz v0, :cond_0
  354. .line 67
  355. iput-object p1, p0, Lio/reactivex/observers/SerializedObserver;->s:Lio/reactivex/disposables/Disposable;
  356. .line 69
  357. iget-object p1, p0, Lio/reactivex/observers/SerializedObserver;->actual:Lio/reactivex/Observer;
  358. invoke-interface {p1, p0}, Lio/reactivex/Observer;->onSubscribe(Lio/reactivex/disposables/Disposable;)V
  359. :cond_0
  360. return-void
  361. .end method