PublishSubject.smali 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635
  1. .class public final Lio/reactivex/subjects/PublishSubject;
  2. .super Lio/reactivex/subjects/Subject;
  3. .source "PublishSubject.java"
  4. # annotations
  5. .annotation system Ldalvik/annotation/MemberClasses;
  6. value = {
  7. Lio/reactivex/subjects/PublishSubject$PublishDisposable;
  8. }
  9. .end annotation
  10. .annotation system Ldalvik/annotation/Signature;
  11. value = {
  12. "<T:",
  13. "Ljava/lang/Object;",
  14. ">",
  15. "Lio/reactivex/subjects/Subject<",
  16. "TT;>;"
  17. }
  18. .end annotation
  19. # static fields
  20. .field static final EMPTY:[Lio/reactivex/subjects/PublishSubject$PublishDisposable;
  21. .field static final TERMINATED:[Lio/reactivex/subjects/PublishSubject$PublishDisposable;
  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/subjects/PublishSubject$PublishDisposable<",
  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 51
  39. new-array v1, v0, [Lio/reactivex/subjects/PublishSubject$PublishDisposable;
  40. sput-object v1, Lio/reactivex/subjects/PublishSubject;->TERMINATED:[Lio/reactivex/subjects/PublishSubject$PublishDisposable;
  41. .line 54
  42. new-array v0, v0, [Lio/reactivex/subjects/PublishSubject$PublishDisposable;
  43. sput-object v0, Lio/reactivex/subjects/PublishSubject;->EMPTY:[Lio/reactivex/subjects/PublishSubject$PublishDisposable;
  44. return-void
  45. .end method
  46. .method constructor <init>()V
  47. .locals 2
  48. .line 77
  49. invoke-direct {p0}, Lio/reactivex/subjects/Subject;-><init>()V
  50. .line 78
  51. new-instance v0, Ljava/util/concurrent/atomic/AtomicReference;
  52. sget-object v1, Lio/reactivex/subjects/PublishSubject;->EMPTY:[Lio/reactivex/subjects/PublishSubject$PublishDisposable;
  53. invoke-direct {v0, v1}, Ljava/util/concurrent/atomic/AtomicReference;-><init>(Ljava/lang/Object;)V
  54. iput-object v0, p0, Lio/reactivex/subjects/PublishSubject;->subscribers:Ljava/util/concurrent/atomic/AtomicReference;
  55. return-void
  56. .end method
  57. .method public static create()Lio/reactivex/subjects/PublishSubject;
  58. .locals 1
  59. .annotation system Ldalvik/annotation/Signature;
  60. value = {
  61. "<T:",
  62. "Ljava/lang/Object;",
  63. ">()",
  64. "Lio/reactivex/subjects/PublishSubject<",
  65. "TT;>;"
  66. }
  67. .end annotation
  68. .annotation runtime Lio/reactivex/annotations/CheckReturnValue;
  69. .end annotation
  70. .line 69
  71. new-instance v0, Lio/reactivex/subjects/PublishSubject;
  72. invoke-direct {v0}, Lio/reactivex/subjects/PublishSubject;-><init>()V
  73. return-object v0
  74. .end method
  75. # virtual methods
  76. .method add(Lio/reactivex/subjects/PublishSubject$PublishDisposable;)Z
  77. .locals 4
  78. .annotation system Ldalvik/annotation/Signature;
  79. value = {
  80. "(",
  81. "Lio/reactivex/subjects/PublishSubject$PublishDisposable<",
  82. "TT;>;)Z"
  83. }
  84. .end annotation
  85. .line 110
  86. :cond_0
  87. iget-object v0, p0, Lio/reactivex/subjects/PublishSubject;->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/subjects/PublishSubject$PublishDisposable;
  91. .line 111
  92. sget-object v1, Lio/reactivex/subjects/PublishSubject;->TERMINATED:[Lio/reactivex/subjects/PublishSubject$PublishDisposable;
  93. const/4 v2, 0x0
  94. if-ne v0, v1, :cond_1
  95. return v2
  96. .line 115
  97. :cond_1
  98. array-length v1, v0
  99. add-int/lit8 v3, v1, 0x1
  100. .line 117
  101. new-array v3, v3, [Lio/reactivex/subjects/PublishSubject$PublishDisposable;
  102. .line 118
  103. invoke-static {v0, v2, v3, v2, v1}, Ljava/lang/System;->arraycopy(Ljava/lang/Object;ILjava/lang/Object;II)V
  104. .line 119
  105. aput-object p1, v3, v1
  106. .line 121
  107. iget-object v1, p0, Lio/reactivex/subjects/PublishSubject;->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 223
  117. iget-object v0, p0, Lio/reactivex/subjects/PublishSubject;->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/subjects/PublishSubject;->TERMINATED:[Lio/reactivex/subjects/PublishSubject$PublishDisposable;
  121. if-ne v0, v1, :cond_0
  122. .line 224
  123. iget-object v0, p0, Lio/reactivex/subjects/PublishSubject;->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 236
  132. iget-object v0, p0, Lio/reactivex/subjects/PublishSubject;->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/subjects/PublishSubject;->TERMINATED:[Lio/reactivex/subjects/PublishSubject$PublishDisposable;
  136. if-ne v0, v1, :cond_0
  137. iget-object v0, p0, Lio/reactivex/subjects/PublishSubject;->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 hasObservers()Z
  147. .locals 1
  148. .line 218
  149. iget-object v0, p0, Lio/reactivex/subjects/PublishSubject;->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/subjects/PublishSubject$PublishDisposable;
  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 231
  165. iget-object v0, p0, Lio/reactivex/subjects/PublishSubject;->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/subjects/PublishSubject;->TERMINATED:[Lio/reactivex/subjects/PublishSubject$PublishDisposable;
  169. if-ne v0, v1, :cond_0
  170. iget-object v0, p0, Lio/reactivex/subjects/PublishSubject;->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 208
  182. iget-object v0, p0, Lio/reactivex/subjects/PublishSubject;->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/subjects/PublishSubject;->TERMINATED:[Lio/reactivex/subjects/PublishSubject$PublishDisposable;
  186. if-ne v0, v1, :cond_0
  187. return-void
  188. .line 211
  189. :cond_0
  190. iget-object v0, p0, Lio/reactivex/subjects/PublishSubject;->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/subjects/PublishSubject$PublishDisposable;
  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 212
  200. invoke-virtual {v3}, Lio/reactivex/subjects/PublishSubject$PublishDisposable;->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 191
  209. iget-object v0, p0, Lio/reactivex/subjects/PublishSubject;->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/subjects/PublishSubject;->TERMINATED:[Lio/reactivex/subjects/PublishSubject$PublishDisposable;
  213. if-ne v0, v1, :cond_0
  214. .line 192
  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 196
  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 198
  224. :cond_1
  225. iput-object p1, p0, Lio/reactivex/subjects/PublishSubject;->error:Ljava/lang/Throwable;
  226. .line 200
  227. iget-object v0, p0, Lio/reactivex/subjects/PublishSubject;->subscribers:Ljava/util/concurrent/atomic/AtomicReference;
  228. sget-object v1, Lio/reactivex/subjects/PublishSubject;->TERMINATED:[Lio/reactivex/subjects/PublishSubject$PublishDisposable;
  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/subjects/PublishSubject$PublishDisposable;
  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 201
  238. invoke-virtual {v3, p1}, Lio/reactivex/subjects/PublishSubject$PublishDisposable;->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 176
  252. iget-object v0, p0, Lio/reactivex/subjects/PublishSubject;->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/subjects/PublishSubject;->TERMINATED:[Lio/reactivex/subjects/PublishSubject$PublishDisposable;
  256. if-ne v0, v1, :cond_0
  257. return-void
  258. :cond_0
  259. if-nez p1, :cond_1
  260. .line 180
  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/subjects/PublishSubject;->onError(Ljava/lang/Throwable;)V
  265. return-void
  266. .line 183
  267. :cond_1
  268. iget-object v0, p0, Lio/reactivex/subjects/PublishSubject;->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/subjects/PublishSubject$PublishDisposable;
  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 184
  278. invoke-virtual {v3, p1}, Lio/reactivex/subjects/PublishSubject$PublishDisposable;->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(Lio/reactivex/disposables/Disposable;)V
  285. .locals 2
  286. .line 169
  287. iget-object v0, p0, Lio/reactivex/subjects/PublishSubject;->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/subjects/PublishSubject;->TERMINATED:[Lio/reactivex/subjects/PublishSubject$PublishDisposable;
  291. if-ne v0, v1, :cond_0
  292. .line 170
  293. invoke-interface {p1}, Lio/reactivex/disposables/Disposable;->dispose()V
  294. :cond_0
  295. return-void
  296. .end method
  297. .method remove(Lio/reactivex/subjects/PublishSubject$PublishDisposable;)V
  298. .locals 6
  299. .annotation system Ldalvik/annotation/Signature;
  300. value = {
  301. "(",
  302. "Lio/reactivex/subjects/PublishSubject$PublishDisposable<",
  303. "TT;>;)V"
  304. }
  305. .end annotation
  306. .line 134
  307. :cond_0
  308. iget-object v0, p0, Lio/reactivex/subjects/PublishSubject;->subscribers:Ljava/util/concurrent/atomic/AtomicReference;
  309. invoke-virtual {v0}, Ljava/util/concurrent/atomic/AtomicReference;->get()Ljava/lang/Object;
  310. move-result-object v0
  311. check-cast v0, [Lio/reactivex/subjects/PublishSubject$PublishDisposable;
  312. .line 135
  313. sget-object v1, Lio/reactivex/subjects/PublishSubject;->TERMINATED:[Lio/reactivex/subjects/PublishSubject$PublishDisposable;
  314. if-eq v0, v1, :cond_6
  315. sget-object v1, Lio/reactivex/subjects/PublishSubject;->EMPTY:[Lio/reactivex/subjects/PublishSubject$PublishDisposable;
  316. if-ne v0, v1, :cond_1
  317. goto :goto_3
  318. .line 139
  319. :cond_1
  320. array-length v1, v0
  321. const/4 v2, -0x1
  322. const/4 v3, 0x0
  323. const/4 v4, 0x0
  324. :goto_0
  325. if-ge v4, v1, :cond_3
  326. .line 142
  327. aget-object v5, v0, v4
  328. if-ne v5, p1, :cond_2
  329. move v2, v4
  330. goto :goto_1
  331. :cond_2
  332. add-int/lit8 v4, v4, 0x1
  333. goto :goto_0
  334. :cond_3
  335. :goto_1
  336. if-gez v2, :cond_4
  337. return-void
  338. :cond_4
  339. const/4 v4, 0x1
  340. if-ne v1, v4, :cond_5
  341. .line 155
  342. sget-object v1, Lio/reactivex/subjects/PublishSubject;->EMPTY:[Lio/reactivex/subjects/PublishSubject$PublishDisposable;
  343. goto :goto_2
  344. :cond_5
  345. add-int/lit8 v5, v1, -0x1
  346. .line 157
  347. new-array v5, v5, [Lio/reactivex/subjects/PublishSubject$PublishDisposable;
  348. .line 158
  349. invoke-static {v0, v3, v5, v3, v2}, Ljava/lang/System;->arraycopy(Ljava/lang/Object;ILjava/lang/Object;II)V
  350. add-int/lit8 v3, v2, 0x1
  351. sub-int/2addr v1, v2
  352. sub-int/2addr v1, v4
  353. .line 159
  354. invoke-static {v0, v3, v5, v2, v1}, Ljava/lang/System;->arraycopy(Ljava/lang/Object;ILjava/lang/Object;II)V
  355. move-object v1, v5
  356. .line 161
  357. :goto_2
  358. iget-object v2, p0, Lio/reactivex/subjects/PublishSubject;->subscribers:Ljava/util/concurrent/atomic/AtomicReference;
  359. invoke-virtual {v2, v0, v1}, Ljava/util/concurrent/atomic/AtomicReference;->compareAndSet(Ljava/lang/Object;Ljava/lang/Object;)Z
  360. move-result v0
  361. if-eqz v0, :cond_0
  362. :cond_6
  363. :goto_3
  364. return-void
  365. .end method
  366. .method public subscribeActual(Lio/reactivex/Observer;)V
  367. .locals 2
  368. .annotation system Ldalvik/annotation/Signature;
  369. value = {
  370. "(",
  371. "Lio/reactivex/Observer<",
  372. "-TT;>;)V"
  373. }
  374. .end annotation
  375. .line 84
  376. new-instance v0, Lio/reactivex/subjects/PublishSubject$PublishDisposable;
  377. invoke-direct {v0, p1, p0}, Lio/reactivex/subjects/PublishSubject$PublishDisposable;-><init>(Lio/reactivex/Observer;Lio/reactivex/subjects/PublishSubject;)V
  378. .line 85
  379. invoke-interface {p1, v0}, Lio/reactivex/Observer;->onSubscribe(Lio/reactivex/disposables/Disposable;)V
  380. .line 86
  381. invoke-virtual {p0, v0}, Lio/reactivex/subjects/PublishSubject;->add(Lio/reactivex/subjects/PublishSubject$PublishDisposable;)Z
  382. move-result v1
  383. if-eqz v1, :cond_0
  384. .line 89
  385. invoke-virtual {v0}, Lio/reactivex/subjects/PublishSubject$PublishDisposable;->isDisposed()Z
  386. move-result p1
  387. if-eqz p1, :cond_2
  388. .line 90
  389. invoke-virtual {p0, v0}, Lio/reactivex/subjects/PublishSubject;->remove(Lio/reactivex/subjects/PublishSubject$PublishDisposable;)V
  390. goto :goto_0
  391. .line 93
  392. :cond_0
  393. iget-object v0, p0, Lio/reactivex/subjects/PublishSubject;->error:Ljava/lang/Throwable;
  394. if-eqz v0, :cond_1
  395. .line 95
  396. invoke-interface {p1, v0}, Lio/reactivex/Observer;->onError(Ljava/lang/Throwable;)V
  397. goto :goto_0
  398. .line 97
  399. :cond_1
  400. invoke-interface {p1}, Lio/reactivex/Observer;->onComplete()V
  401. :cond_2
  402. :goto_0
  403. return-void
  404. .end method