PublishProcessor.smali 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642
  1. .class public final Lio/reactivex/processors/PublishProcessor;
  2. .super Lio/reactivex/processors/FlowableProcessor;
  3. .source "PublishProcessor.java"
  4. # annotations
  5. .annotation system Ldalvik/annotation/MemberClasses;
  6. value = {
  7. Lio/reactivex/processors/PublishProcessor$PublishSubscription;
  8. }
  9. .end annotation
  10. .annotation system Ldalvik/annotation/Signature;
  11. value = {
  12. "<T:",
  13. "Ljava/lang/Object;",
  14. ">",
  15. "Lio/reactivex/processors/FlowableProcessor<",
  16. "TT;>;"
  17. }
  18. .end annotation
  19. # static fields
  20. .field static final EMPTY:[Lio/reactivex/processors/PublishProcessor$PublishSubscription;
  21. .field static final TERMINATED:[Lio/reactivex/processors/PublishProcessor$PublishSubscription;
  22. # instance fields
  23. .field error:Ljava/lang/Throwable;
  24. .field final subscribers:Ljava/util/concurrent/atomic/AtomicReference;
  25. .annotation system Ldalvik/annotation/Signature;
  26. value = {
  27. "Ljava/util/concurrent/atomic/AtomicReference<",
  28. "[",
  29. "Lio/reactivex/processors/PublishProcessor$PublishSubscription<",
  30. "TT;>;>;"
  31. }
  32. .end annotation
  33. .end field
  34. # direct methods
  35. .method static constructor <clinit>()V
  36. .locals 2
  37. const/4 v0, 0x0
  38. .line 62
  39. new-array v1, v0, [Lio/reactivex/processors/PublishProcessor$PublishSubscription;
  40. sput-object v1, Lio/reactivex/processors/PublishProcessor;->TERMINATED:[Lio/reactivex/processors/PublishProcessor$PublishSubscription;
  41. .line 65
  42. new-array v0, v0, [Lio/reactivex/processors/PublishProcessor$PublishSubscription;
  43. sput-object v0, Lio/reactivex/processors/PublishProcessor;->EMPTY:[Lio/reactivex/processors/PublishProcessor$PublishSubscription;
  44. return-void
  45. .end method
  46. .method constructor <init>()V
  47. .locals 2
  48. .line 88
  49. invoke-direct {p0}, Lio/reactivex/processors/FlowableProcessor;-><init>()V
  50. .line 89
  51. new-instance v0, Ljava/util/concurrent/atomic/AtomicReference;
  52. sget-object v1, Lio/reactivex/processors/PublishProcessor;->EMPTY:[Lio/reactivex/processors/PublishProcessor$PublishSubscription;
  53. invoke-direct {v0, v1}, Ljava/util/concurrent/atomic/AtomicReference;-><init>(Ljava/lang/Object;)V
  54. iput-object v0, p0, Lio/reactivex/processors/PublishProcessor;->subscribers:Ljava/util/concurrent/atomic/AtomicReference;
  55. return-void
  56. .end method
  57. .method public static create()Lio/reactivex/processors/PublishProcessor;
  58. .locals 1
  59. .annotation system Ldalvik/annotation/Signature;
  60. value = {
  61. "<T:",
  62. "Ljava/lang/Object;",
  63. ">()",
  64. "Lio/reactivex/processors/PublishProcessor<",
  65. "TT;>;"
  66. }
  67. .end annotation
  68. .annotation runtime Lio/reactivex/annotations/CheckReturnValue;
  69. .end annotation
  70. .line 80
  71. new-instance v0, Lio/reactivex/processors/PublishProcessor;
  72. invoke-direct {v0}, Lio/reactivex/processors/PublishProcessor;-><init>()V
  73. return-object v0
  74. .end method
  75. # virtual methods
  76. .method add(Lio/reactivex/processors/PublishProcessor$PublishSubscription;)Z
  77. .locals 4
  78. .annotation system Ldalvik/annotation/Signature;
  79. value = {
  80. "(",
  81. "Lio/reactivex/processors/PublishProcessor$PublishSubscription<",
  82. "TT;>;)Z"
  83. }
  84. .end annotation
  85. .line 121
  86. :cond_0
  87. iget-object v0, p0, Lio/reactivex/processors/PublishProcessor;->subscribers:Ljava/util/concurrent/atomic/AtomicReference;
  88. invoke-virtual {v0}, Ljava/util/concurrent/atomic/AtomicReference;->get()Ljava/lang/Object;
  89. move-result-object v0
  90. check-cast v0, [Lio/reactivex/processors/PublishProcessor$PublishSubscription;
  91. .line 122
  92. sget-object v1, Lio/reactivex/processors/PublishProcessor;->TERMINATED:[Lio/reactivex/processors/PublishProcessor$PublishSubscription;
  93. const/4 v2, 0x0
  94. if-ne v0, v1, :cond_1
  95. return v2
  96. .line 126
  97. :cond_1
  98. array-length v1, v0
  99. add-int/lit8 v3, v1, 0x1
  100. .line 128
  101. new-array v3, v3, [Lio/reactivex/processors/PublishProcessor$PublishSubscription;
  102. .line 129
  103. invoke-static {v0, v2, v3, v2, v1}, Ljava/lang/System;->arraycopy(Ljava/lang/Object;ILjava/lang/Object;II)V
  104. .line 130
  105. aput-object p1, v3, v1
  106. .line 132
  107. iget-object v1, p0, Lio/reactivex/processors/PublishProcessor;->subscribers:Ljava/util/concurrent/atomic/AtomicReference;
  108. invoke-virtual {v1, v0, v3}, Ljava/util/concurrent/atomic/AtomicReference;->compareAndSet(Ljava/lang/Object;Ljava/lang/Object;)Z
  109. move-result v0
  110. if-eqz v0, :cond_0
  111. const/4 p1, 0x1
  112. return p1
  113. .end method
  114. .method public getThrowable()Ljava/lang/Throwable;
  115. .locals 2
  116. .line 237
  117. iget-object v0, p0, Lio/reactivex/processors/PublishProcessor;->subscribers:Ljava/util/concurrent/atomic/AtomicReference;
  118. invoke-virtual {v0}, Ljava/util/concurrent/atomic/AtomicReference;->get()Ljava/lang/Object;
  119. move-result-object v0
  120. sget-object v1, Lio/reactivex/processors/PublishProcessor;->TERMINATED:[Lio/reactivex/processors/PublishProcessor$PublishSubscription;
  121. if-ne v0, v1, :cond_0
  122. .line 238
  123. iget-object v0, p0, Lio/reactivex/processors/PublishProcessor;->error:Ljava/lang/Throwable;
  124. return-object v0
  125. :cond_0
  126. const/4 v0, 0x0
  127. return-object v0
  128. .end method
  129. .method public hasComplete()Z
  130. .locals 2
  131. .line 250
  132. iget-object v0, p0, Lio/reactivex/processors/PublishProcessor;->subscribers:Ljava/util/concurrent/atomic/AtomicReference;
  133. invoke-virtual {v0}, Ljava/util/concurrent/atomic/AtomicReference;->get()Ljava/lang/Object;
  134. move-result-object v0
  135. sget-object v1, Lio/reactivex/processors/PublishProcessor;->TERMINATED:[Lio/reactivex/processors/PublishProcessor$PublishSubscription;
  136. if-ne v0, v1, :cond_0
  137. iget-object v0, p0, Lio/reactivex/processors/PublishProcessor;->error:Ljava/lang/Throwable;
  138. if-nez v0, :cond_0
  139. const/4 v0, 0x1
  140. goto :goto_0
  141. :cond_0
  142. const/4 v0, 0x0
  143. :goto_0
  144. return v0
  145. .end method
  146. .method public hasSubscribers()Z
  147. .locals 1
  148. .line 232
  149. iget-object v0, p0, Lio/reactivex/processors/PublishProcessor;->subscribers:Ljava/util/concurrent/atomic/AtomicReference;
  150. invoke-virtual {v0}, Ljava/util/concurrent/atomic/AtomicReference;->get()Ljava/lang/Object;
  151. move-result-object v0
  152. check-cast v0, [Lio/reactivex/processors/PublishProcessor$PublishSubscription;
  153. array-length v0, v0
  154. if-eqz v0, :cond_0
  155. const/4 v0, 0x1
  156. goto :goto_0
  157. :cond_0
  158. const/4 v0, 0x0
  159. :goto_0
  160. return v0
  161. .end method
  162. .method public hasThrowable()Z
  163. .locals 2
  164. .line 245
  165. iget-object v0, p0, Lio/reactivex/processors/PublishProcessor;->subscribers:Ljava/util/concurrent/atomic/AtomicReference;
  166. invoke-virtual {v0}, Ljava/util/concurrent/atomic/AtomicReference;->get()Ljava/lang/Object;
  167. move-result-object v0
  168. sget-object v1, Lio/reactivex/processors/PublishProcessor;->TERMINATED:[Lio/reactivex/processors/PublishProcessor$PublishSubscription;
  169. if-ne v0, v1, :cond_0
  170. iget-object v0, p0, Lio/reactivex/processors/PublishProcessor;->error:Ljava/lang/Throwable;
  171. if-eqz v0, :cond_0
  172. const/4 v0, 0x1
  173. goto :goto_0
  174. :cond_0
  175. const/4 v0, 0x0
  176. :goto_0
  177. return v0
  178. .end method
  179. .method public onComplete()V
  180. .locals 4
  181. .line 222
  182. iget-object v0, p0, Lio/reactivex/processors/PublishProcessor;->subscribers:Ljava/util/concurrent/atomic/AtomicReference;
  183. invoke-virtual {v0}, Ljava/util/concurrent/atomic/AtomicReference;->get()Ljava/lang/Object;
  184. move-result-object v0
  185. sget-object v1, Lio/reactivex/processors/PublishProcessor;->TERMINATED:[Lio/reactivex/processors/PublishProcessor$PublishSubscription;
  186. if-ne v0, v1, :cond_0
  187. return-void
  188. .line 225
  189. :cond_0
  190. iget-object v0, p0, Lio/reactivex/processors/PublishProcessor;->subscribers:Ljava/util/concurrent/atomic/AtomicReference;
  191. invoke-virtual {v0, v1}, Ljava/util/concurrent/atomic/AtomicReference;->getAndSet(Ljava/lang/Object;)Ljava/lang/Object;
  192. move-result-object v0
  193. check-cast v0, [Lio/reactivex/processors/PublishProcessor$PublishSubscription;
  194. array-length v1, v0
  195. const/4 v2, 0x0
  196. :goto_0
  197. if-ge v2, v1, :cond_1
  198. aget-object v3, v0, v2
  199. .line 226
  200. invoke-virtual {v3}, Lio/reactivex/processors/PublishProcessor$PublishSubscription;->onComplete()V
  201. add-int/lit8 v2, v2, 0x1
  202. goto :goto_0
  203. :cond_1
  204. return-void
  205. .end method
  206. .method public onError(Ljava/lang/Throwable;)V
  207. .locals 4
  208. .line 205
  209. iget-object v0, p0, Lio/reactivex/processors/PublishProcessor;->subscribers:Ljava/util/concurrent/atomic/AtomicReference;
  210. invoke-virtual {v0}, Ljava/util/concurrent/atomic/AtomicReference;->get()Ljava/lang/Object;
  211. move-result-object v0
  212. sget-object v1, Lio/reactivex/processors/PublishProcessor;->TERMINATED:[Lio/reactivex/processors/PublishProcessor$PublishSubscription;
  213. if-ne v0, v1, :cond_0
  214. .line 206
  215. invoke-static {p1}, Lio/reactivex/plugins/RxJavaPlugins;->onError(Ljava/lang/Throwable;)V
  216. return-void
  217. :cond_0
  218. if-nez p1, :cond_1
  219. .line 210
  220. new-instance p1, Ljava/lang/NullPointerException;
  221. const-string v0, "onError called with null. Null values are generally not allowed in 2.x operators and sources."
  222. invoke-direct {p1, v0}, Ljava/lang/NullPointerException;-><init>(Ljava/lang/String;)V
  223. .line 212
  224. :cond_1
  225. iput-object p1, p0, Lio/reactivex/processors/PublishProcessor;->error:Ljava/lang/Throwable;
  226. .line 214
  227. iget-object v0, p0, Lio/reactivex/processors/PublishProcessor;->subscribers:Ljava/util/concurrent/atomic/AtomicReference;
  228. sget-object v1, Lio/reactivex/processors/PublishProcessor;->TERMINATED:[Lio/reactivex/processors/PublishProcessor$PublishSubscription;
  229. invoke-virtual {v0, v1}, Ljava/util/concurrent/atomic/AtomicReference;->getAndSet(Ljava/lang/Object;)Ljava/lang/Object;
  230. move-result-object v0
  231. check-cast v0, [Lio/reactivex/processors/PublishProcessor$PublishSubscription;
  232. array-length v1, v0
  233. const/4 v2, 0x0
  234. :goto_0
  235. if-ge v2, v1, :cond_2
  236. aget-object v3, v0, v2
  237. .line 215
  238. invoke-virtual {v3, p1}, Lio/reactivex/processors/PublishProcessor$PublishSubscription;->onError(Ljava/lang/Throwable;)V
  239. add-int/lit8 v2, v2, 0x1
  240. goto :goto_0
  241. :cond_2
  242. return-void
  243. .end method
  244. .method public onNext(Ljava/lang/Object;)V
  245. .locals 4
  246. .annotation system Ldalvik/annotation/Signature;
  247. value = {
  248. "(TT;)V"
  249. }
  250. .end annotation
  251. .line 190
  252. iget-object v0, p0, Lio/reactivex/processors/PublishProcessor;->subscribers:Ljava/util/concurrent/atomic/AtomicReference;
  253. invoke-virtual {v0}, Ljava/util/concurrent/atomic/AtomicReference;->get()Ljava/lang/Object;
  254. move-result-object v0
  255. sget-object v1, Lio/reactivex/processors/PublishProcessor;->TERMINATED:[Lio/reactivex/processors/PublishProcessor$PublishSubscription;
  256. if-ne v0, v1, :cond_0
  257. return-void
  258. :cond_0
  259. if-nez p1, :cond_1
  260. .line 194
  261. new-instance p1, Ljava/lang/NullPointerException;
  262. const-string v0, "onNext called with null. Null values are generally not allowed in 2.x operators and sources."
  263. invoke-direct {p1, v0}, Ljava/lang/NullPointerException;-><init>(Ljava/lang/String;)V
  264. invoke-virtual {p0, p1}, Lio/reactivex/processors/PublishProcessor;->onError(Ljava/lang/Throwable;)V
  265. return-void
  266. .line 197
  267. :cond_1
  268. iget-object v0, p0, Lio/reactivex/processors/PublishProcessor;->subscribers:Ljava/util/concurrent/atomic/AtomicReference;
  269. invoke-virtual {v0}, Ljava/util/concurrent/atomic/AtomicReference;->get()Ljava/lang/Object;
  270. move-result-object v0
  271. check-cast v0, [Lio/reactivex/processors/PublishProcessor$PublishSubscription;
  272. array-length v1, v0
  273. const/4 v2, 0x0
  274. :goto_0
  275. if-ge v2, v1, :cond_2
  276. aget-object v3, v0, v2
  277. .line 198
  278. invoke-virtual {v3, p1}, Lio/reactivex/processors/PublishProcessor$PublishSubscription;->onNext(Ljava/lang/Object;)V
  279. add-int/lit8 v2, v2, 0x1
  280. goto :goto_0
  281. :cond_2
  282. return-void
  283. .end method
  284. .method public onSubscribe(Lorg/reactivestreams/Subscription;)V
  285. .locals 2
  286. .line 180
  287. iget-object v0, p0, Lio/reactivex/processors/PublishProcessor;->subscribers:Ljava/util/concurrent/atomic/AtomicReference;
  288. invoke-virtual {v0}, Ljava/util/concurrent/atomic/AtomicReference;->get()Ljava/lang/Object;
  289. move-result-object v0
  290. sget-object v1, Lio/reactivex/processors/PublishProcessor;->TERMINATED:[Lio/reactivex/processors/PublishProcessor$PublishSubscription;
  291. if-ne v0, v1, :cond_0
  292. .line 181
  293. invoke-interface {p1}, Lorg/reactivestreams/Subscription;->cancel()V
  294. return-void
  295. :cond_0
  296. const-wide v0, 0x7fffffffffffffffL
  297. .line 185
  298. invoke-interface {p1, v0, v1}, Lorg/reactivestreams/Subscription;->request(J)V
  299. return-void
  300. .end method
  301. .method remove(Lio/reactivex/processors/PublishProcessor$PublishSubscription;)V
  302. .locals 6
  303. .annotation system Ldalvik/annotation/Signature;
  304. value = {
  305. "(",
  306. "Lio/reactivex/processors/PublishProcessor$PublishSubscription<",
  307. "TT;>;)V"
  308. }
  309. .end annotation
  310. .line 145
  311. :cond_0
  312. iget-object v0, p0, Lio/reactivex/processors/PublishProcessor;->subscribers:Ljava/util/concurrent/atomic/AtomicReference;
  313. invoke-virtual {v0}, Ljava/util/concurrent/atomic/AtomicReference;->get()Ljava/lang/Object;
  314. move-result-object v0
  315. check-cast v0, [Lio/reactivex/processors/PublishProcessor$PublishSubscription;
  316. .line 146
  317. sget-object v1, Lio/reactivex/processors/PublishProcessor;->TERMINATED:[Lio/reactivex/processors/PublishProcessor$PublishSubscription;
  318. if-eq v0, v1, :cond_6
  319. sget-object v1, Lio/reactivex/processors/PublishProcessor;->EMPTY:[Lio/reactivex/processors/PublishProcessor$PublishSubscription;
  320. if-ne v0, v1, :cond_1
  321. goto :goto_3
  322. .line 150
  323. :cond_1
  324. array-length v1, v0
  325. const/4 v2, -0x1
  326. const/4 v3, 0x0
  327. const/4 v4, 0x0
  328. :goto_0
  329. if-ge v4, v1, :cond_3
  330. .line 153
  331. aget-object v5, v0, v4
  332. if-ne v5, p1, :cond_2
  333. move v2, v4
  334. goto :goto_1
  335. :cond_2
  336. add-int/lit8 v4, v4, 0x1
  337. goto :goto_0
  338. :cond_3
  339. :goto_1
  340. if-gez v2, :cond_4
  341. return-void
  342. :cond_4
  343. const/4 v4, 0x1
  344. if-ne v1, v4, :cond_5
  345. .line 166
  346. sget-object v1, Lio/reactivex/processors/PublishProcessor;->EMPTY:[Lio/reactivex/processors/PublishProcessor$PublishSubscription;
  347. goto :goto_2
  348. :cond_5
  349. add-int/lit8 v5, v1, -0x1
  350. .line 168
  351. new-array v5, v5, [Lio/reactivex/processors/PublishProcessor$PublishSubscription;
  352. .line 169
  353. invoke-static {v0, v3, v5, v3, v2}, Ljava/lang/System;->arraycopy(Ljava/lang/Object;ILjava/lang/Object;II)V
  354. add-int/lit8 v3, v2, 0x1
  355. sub-int/2addr v1, v2
  356. sub-int/2addr v1, v4
  357. .line 170
  358. invoke-static {v0, v3, v5, v2, v1}, Ljava/lang/System;->arraycopy(Ljava/lang/Object;ILjava/lang/Object;II)V
  359. move-object v1, v5
  360. .line 172
  361. :goto_2
  362. iget-object v2, p0, Lio/reactivex/processors/PublishProcessor;->subscribers:Ljava/util/concurrent/atomic/AtomicReference;
  363. invoke-virtual {v2, v0, v1}, Ljava/util/concurrent/atomic/AtomicReference;->compareAndSet(Ljava/lang/Object;Ljava/lang/Object;)Z
  364. move-result v0
  365. if-eqz v0, :cond_0
  366. :cond_6
  367. :goto_3
  368. return-void
  369. .end method
  370. .method public subscribeActual(Lorg/reactivestreams/Subscriber;)V
  371. .locals 2
  372. .annotation system Ldalvik/annotation/Signature;
  373. value = {
  374. "(",
  375. "Lorg/reactivestreams/Subscriber<",
  376. "-TT;>;)V"
  377. }
  378. .end annotation
  379. .line 95
  380. new-instance v0, Lio/reactivex/processors/PublishProcessor$PublishSubscription;
  381. invoke-direct {v0, p1, p0}, Lio/reactivex/processors/PublishProcessor$PublishSubscription;-><init>(Lorg/reactivestreams/Subscriber;Lio/reactivex/processors/PublishProcessor;)V
  382. .line 96
  383. invoke-interface {p1, v0}, Lorg/reactivestreams/Subscriber;->onSubscribe(Lorg/reactivestreams/Subscription;)V
  384. .line 97
  385. invoke-virtual {p0, v0}, Lio/reactivex/processors/PublishProcessor;->add(Lio/reactivex/processors/PublishProcessor$PublishSubscription;)Z
  386. move-result v1
  387. if-eqz v1, :cond_0
  388. .line 100
  389. invoke-virtual {v0}, Lio/reactivex/processors/PublishProcessor$PublishSubscription;->isCancelled()Z
  390. move-result p1
  391. if-eqz p1, :cond_2
  392. .line 101
  393. invoke-virtual {p0, v0}, Lio/reactivex/processors/PublishProcessor;->remove(Lio/reactivex/processors/PublishProcessor$PublishSubscription;)V
  394. goto :goto_0
  395. .line 104
  396. :cond_0
  397. iget-object v0, p0, Lio/reactivex/processors/PublishProcessor;->error:Ljava/lang/Throwable;
  398. if-eqz v0, :cond_1
  399. .line 106
  400. invoke-interface {p1, v0}, Lorg/reactivestreams/Subscriber;->onError(Ljava/lang/Throwable;)V
  401. goto :goto_0
  402. .line 108
  403. :cond_1
  404. invoke-interface {p1}, Lorg/reactivestreams/Subscriber;->onComplete()V
  405. :cond_2
  406. :goto_0
  407. return-void
  408. .end method