SerializedSubscriber.smali 13 KB

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