BehaviorSubject.smali 26 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051
  1. .class public final Lio/reactivex/subjects/BehaviorSubject;
  2. .super Lio/reactivex/subjects/Subject;
  3. .source "BehaviorSubject.java"
  4. # annotations
  5. .annotation system Ldalvik/annotation/MemberClasses;
  6. value = {
  7. Lio/reactivex/subjects/BehaviorSubject$BehaviorDisposable;
  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/BehaviorSubject$BehaviorDisposable;
  21. .field private static final EMPTY_ARRAY:[Ljava/lang/Object;
  22. .field static final TERMINATED:[Lio/reactivex/subjects/BehaviorSubject$BehaviorDisposable;
  23. # instance fields
  24. .field done:Z
  25. .field index:J
  26. .field final lock:Ljava/util/concurrent/locks/ReadWriteLock;
  27. .field final readLock:Ljava/util/concurrent/locks/Lock;
  28. .field final subscribers:Ljava/util/concurrent/atomic/AtomicReference;
  29. .annotation system Ldalvik/annotation/Signature;
  30. value = {
  31. "Ljava/util/concurrent/atomic/AtomicReference<",
  32. "[",
  33. "Lio/reactivex/subjects/BehaviorSubject$BehaviorDisposable<",
  34. "TT;>;>;"
  35. }
  36. .end annotation
  37. .end field
  38. .field final value:Ljava/util/concurrent/atomic/AtomicReference;
  39. .annotation system Ldalvik/annotation/Signature;
  40. value = {
  41. "Ljava/util/concurrent/atomic/AtomicReference<",
  42. "Ljava/lang/Object;",
  43. ">;"
  44. }
  45. .end annotation
  46. .end field
  47. .field final writeLock:Ljava/util/concurrent/locks/Lock;
  48. # direct methods
  49. .method static constructor <clinit>()V
  50. .locals 2
  51. const/4 v0, 0x0
  52. .line 74
  53. new-array v1, v0, [Ljava/lang/Object;
  54. sput-object v1, Lio/reactivex/subjects/BehaviorSubject;->EMPTY_ARRAY:[Ljava/lang/Object;
  55. .line 81
  56. new-array v1, v0, [Lio/reactivex/subjects/BehaviorSubject$BehaviorDisposable;
  57. sput-object v1, Lio/reactivex/subjects/BehaviorSubject;->EMPTY:[Lio/reactivex/subjects/BehaviorSubject$BehaviorDisposable;
  58. .line 84
  59. new-array v0, v0, [Lio/reactivex/subjects/BehaviorSubject$BehaviorDisposable;
  60. sput-object v0, Lio/reactivex/subjects/BehaviorSubject;->TERMINATED:[Lio/reactivex/subjects/BehaviorSubject$BehaviorDisposable;
  61. return-void
  62. .end method
  63. .method constructor <init>()V
  64. .locals 2
  65. .line 126
  66. invoke-direct {p0}, Lio/reactivex/subjects/Subject;-><init>()V
  67. .line 127
  68. new-instance v0, Ljava/util/concurrent/locks/ReentrantReadWriteLock;
  69. invoke-direct {v0}, Ljava/util/concurrent/locks/ReentrantReadWriteLock;-><init>()V
  70. iput-object v0, p0, Lio/reactivex/subjects/BehaviorSubject;->lock:Ljava/util/concurrent/locks/ReadWriteLock;
  71. .line 128
  72. iget-object v0, p0, Lio/reactivex/subjects/BehaviorSubject;->lock:Ljava/util/concurrent/locks/ReadWriteLock;
  73. invoke-interface {v0}, Ljava/util/concurrent/locks/ReadWriteLock;->readLock()Ljava/util/concurrent/locks/Lock;
  74. move-result-object v0
  75. iput-object v0, p0, Lio/reactivex/subjects/BehaviorSubject;->readLock:Ljava/util/concurrent/locks/Lock;
  76. .line 129
  77. iget-object v0, p0, Lio/reactivex/subjects/BehaviorSubject;->lock:Ljava/util/concurrent/locks/ReadWriteLock;
  78. invoke-interface {v0}, Ljava/util/concurrent/locks/ReadWriteLock;->writeLock()Ljava/util/concurrent/locks/Lock;
  79. move-result-object v0
  80. iput-object v0, p0, Lio/reactivex/subjects/BehaviorSubject;->writeLock:Ljava/util/concurrent/locks/Lock;
  81. .line 130
  82. new-instance v0, Ljava/util/concurrent/atomic/AtomicReference;
  83. sget-object v1, Lio/reactivex/subjects/BehaviorSubject;->EMPTY:[Lio/reactivex/subjects/BehaviorSubject$BehaviorDisposable;
  84. invoke-direct {v0, v1}, Ljava/util/concurrent/atomic/AtomicReference;-><init>(Ljava/lang/Object;)V
  85. iput-object v0, p0, Lio/reactivex/subjects/BehaviorSubject;->subscribers:Ljava/util/concurrent/atomic/AtomicReference;
  86. .line 131
  87. new-instance v0, Ljava/util/concurrent/atomic/AtomicReference;
  88. invoke-direct {v0}, Ljava/util/concurrent/atomic/AtomicReference;-><init>()V
  89. iput-object v0, p0, Lio/reactivex/subjects/BehaviorSubject;->value:Ljava/util/concurrent/atomic/AtomicReference;
  90. return-void
  91. .end method
  92. .method constructor <init>(Ljava/lang/Object;)V
  93. .locals 2
  94. .annotation system Ldalvik/annotation/Signature;
  95. value = {
  96. "(TT;)V"
  97. }
  98. .end annotation
  99. .line 141
  100. invoke-direct {p0}, Lio/reactivex/subjects/BehaviorSubject;-><init>()V
  101. .line 142
  102. iget-object v0, p0, Lio/reactivex/subjects/BehaviorSubject;->value:Ljava/util/concurrent/atomic/AtomicReference;
  103. const-string v1, "defaultValue is null"
  104. invoke-static {p1, v1}, Lio/reactivex/internal/functions/ObjectHelper;->requireNonNull(Ljava/lang/Object;Ljava/lang/String;)Ljava/lang/Object;
  105. move-result-object p1
  106. invoke-virtual {v0, p1}, Ljava/util/concurrent/atomic/AtomicReference;->lazySet(Ljava/lang/Object;)V
  107. return-void
  108. .end method
  109. .method public static create()Lio/reactivex/subjects/BehaviorSubject;
  110. .locals 1
  111. .annotation system Ldalvik/annotation/Signature;
  112. value = {
  113. "<T:",
  114. "Ljava/lang/Object;",
  115. ">()",
  116. "Lio/reactivex/subjects/BehaviorSubject<",
  117. "TT;>;"
  118. }
  119. .end annotation
  120. .annotation runtime Lio/reactivex/annotations/CheckReturnValue;
  121. .end annotation
  122. .line 102
  123. new-instance v0, Lio/reactivex/subjects/BehaviorSubject;
  124. invoke-direct {v0}, Lio/reactivex/subjects/BehaviorSubject;-><init>()V
  125. return-object v0
  126. .end method
  127. .method public static createDefault(Ljava/lang/Object;)Lio/reactivex/subjects/BehaviorSubject;
  128. .locals 1
  129. .annotation system Ldalvik/annotation/Signature;
  130. value = {
  131. "<T:",
  132. "Ljava/lang/Object;",
  133. ">(TT;)",
  134. "Lio/reactivex/subjects/BehaviorSubject<",
  135. "TT;>;"
  136. }
  137. .end annotation
  138. .annotation runtime Lio/reactivex/annotations/CheckReturnValue;
  139. .end annotation
  140. .line 118
  141. new-instance v0, Lio/reactivex/subjects/BehaviorSubject;
  142. invoke-direct {v0, p0}, Lio/reactivex/subjects/BehaviorSubject;-><init>(Ljava/lang/Object;)V
  143. return-object v0
  144. .end method
  145. # virtual methods
  146. .method add(Lio/reactivex/subjects/BehaviorSubject$BehaviorDisposable;)Z
  147. .locals 4
  148. .annotation system Ldalvik/annotation/Signature;
  149. value = {
  150. "(",
  151. "Lio/reactivex/subjects/BehaviorSubject$BehaviorDisposable<",
  152. "TT;>;)Z"
  153. }
  154. .end annotation
  155. .line 318
  156. :cond_0
  157. iget-object v0, p0, Lio/reactivex/subjects/BehaviorSubject;->subscribers:Ljava/util/concurrent/atomic/AtomicReference;
  158. invoke-virtual {v0}, Ljava/util/concurrent/atomic/AtomicReference;->get()Ljava/lang/Object;
  159. move-result-object v0
  160. check-cast v0, [Lio/reactivex/subjects/BehaviorSubject$BehaviorDisposable;
  161. .line 319
  162. sget-object v1, Lio/reactivex/subjects/BehaviorSubject;->TERMINATED:[Lio/reactivex/subjects/BehaviorSubject$BehaviorDisposable;
  163. const/4 v2, 0x0
  164. if-ne v0, v1, :cond_1
  165. return v2
  166. .line 322
  167. :cond_1
  168. array-length v1, v0
  169. add-int/lit8 v3, v1, 0x1
  170. .line 324
  171. new-array v3, v3, [Lio/reactivex/subjects/BehaviorSubject$BehaviorDisposable;
  172. .line 325
  173. invoke-static {v0, v2, v3, v2, v1}, Ljava/lang/System;->arraycopy(Ljava/lang/Object;ILjava/lang/Object;II)V
  174. .line 326
  175. aput-object p1, v3, v1
  176. .line 327
  177. iget-object v1, p0, Lio/reactivex/subjects/BehaviorSubject;->subscribers:Ljava/util/concurrent/atomic/AtomicReference;
  178. invoke-virtual {v1, v0, v3}, Ljava/util/concurrent/atomic/AtomicReference;->compareAndSet(Ljava/lang/Object;Ljava/lang/Object;)Z
  179. move-result v0
  180. if-eqz v0, :cond_0
  181. const/4 p1, 0x1
  182. return p1
  183. .end method
  184. .method public getThrowable()Ljava/lang/Throwable;
  185. .locals 2
  186. .line 228
  187. iget-object v0, p0, Lio/reactivex/subjects/BehaviorSubject;->value:Ljava/util/concurrent/atomic/AtomicReference;
  188. invoke-virtual {v0}, Ljava/util/concurrent/atomic/AtomicReference;->get()Ljava/lang/Object;
  189. move-result-object v0
  190. .line 229
  191. invoke-static {v0}, Lio/reactivex/internal/util/NotificationLite;->isError(Ljava/lang/Object;)Z
  192. move-result v1
  193. if-eqz v1, :cond_0
  194. .line 230
  195. invoke-static {v0}, Lio/reactivex/internal/util/NotificationLite;->getError(Ljava/lang/Object;)Ljava/lang/Throwable;
  196. move-result-object v0
  197. return-object v0
  198. :cond_0
  199. const/4 v0, 0x0
  200. return-object v0
  201. .end method
  202. .method public getValue()Ljava/lang/Object;
  203. .locals 2
  204. .annotation system Ldalvik/annotation/Signature;
  205. value = {
  206. "()TT;"
  207. }
  208. .end annotation
  209. .line 241
  210. iget-object v0, p0, Lio/reactivex/subjects/BehaviorSubject;->value:Ljava/util/concurrent/atomic/AtomicReference;
  211. invoke-virtual {v0}, Ljava/util/concurrent/atomic/AtomicReference;->get()Ljava/lang/Object;
  212. move-result-object v0
  213. .line 242
  214. invoke-static {v0}, Lio/reactivex/internal/util/NotificationLite;->isComplete(Ljava/lang/Object;)Z
  215. move-result v1
  216. if-nez v1, :cond_1
  217. invoke-static {v0}, Lio/reactivex/internal/util/NotificationLite;->isError(Ljava/lang/Object;)Z
  218. move-result v1
  219. if-eqz v1, :cond_0
  220. goto :goto_0
  221. .line 245
  222. :cond_0
  223. invoke-static {v0}, Lio/reactivex/internal/util/NotificationLite;->getValue(Ljava/lang/Object;)Ljava/lang/Object;
  224. move-result-object v0
  225. return-object v0
  226. :cond_1
  227. :goto_0
  228. const/4 v0, 0x0
  229. return-object v0
  230. .end method
  231. .method public getValues()[Ljava/lang/Object;
  232. .locals 2
  233. .line 255
  234. sget-object v0, Lio/reactivex/subjects/BehaviorSubject;->EMPTY_ARRAY:[Ljava/lang/Object;
  235. check-cast v0, [Ljava/lang/Object;
  236. .line 256
  237. invoke-virtual {p0, v0}, Lio/reactivex/subjects/BehaviorSubject;->getValues([Ljava/lang/Object;)[Ljava/lang/Object;
  238. move-result-object v0
  239. .line 257
  240. sget-object v1, Lio/reactivex/subjects/BehaviorSubject;->EMPTY_ARRAY:[Ljava/lang/Object;
  241. if-ne v0, v1, :cond_0
  242. const/4 v0, 0x0
  243. .line 258
  244. new-array v0, v0, [Ljava/lang/Object;
  245. :cond_0
  246. return-object v0
  247. .end method
  248. .method public getValues([Ljava/lang/Object;)[Ljava/lang/Object;
  249. .locals 5
  250. .annotation system Ldalvik/annotation/Signature;
  251. value = {
  252. "([TT;)[TT;"
  253. }
  254. .end annotation
  255. .line 274
  256. iget-object v0, p0, Lio/reactivex/subjects/BehaviorSubject;->value:Ljava/util/concurrent/atomic/AtomicReference;
  257. invoke-virtual {v0}, Ljava/util/concurrent/atomic/AtomicReference;->get()Ljava/lang/Object;
  258. move-result-object v0
  259. const/4 v1, 0x0
  260. const/4 v2, 0x0
  261. if-eqz v0, :cond_3
  262. .line 275
  263. invoke-static {v0}, Lio/reactivex/internal/util/NotificationLite;->isComplete(Ljava/lang/Object;)Z
  264. move-result v3
  265. if-nez v3, :cond_3
  266. invoke-static {v0}, Lio/reactivex/internal/util/NotificationLite;->isError(Ljava/lang/Object;)Z
  267. move-result v3
  268. if-eqz v3, :cond_0
  269. goto :goto_1
  270. .line 281
  271. :cond_0
  272. invoke-static {v0}, Lio/reactivex/internal/util/NotificationLite;->getValue(Ljava/lang/Object;)Ljava/lang/Object;
  273. move-result-object v0
  274. .line 282
  275. array-length v3, p1
  276. const/4 v4, 0x1
  277. if-eqz v3, :cond_1
  278. .line 283
  279. aput-object v0, p1, v2
  280. .line 284
  281. array-length v0, p1
  282. if-eq v0, v4, :cond_2
  283. .line 285
  284. aput-object v1, p1, v4
  285. goto :goto_0
  286. .line 288
  287. :cond_1
  288. invoke-virtual {p1}, Ljava/lang/Object;->getClass()Ljava/lang/Class;
  289. move-result-object p1
  290. invoke-virtual {p1}, Ljava/lang/Class;->getComponentType()Ljava/lang/Class;
  291. move-result-object p1
  292. invoke-static {p1, v4}, Ljava/lang/reflect/Array;->newInstance(Ljava/lang/Class;I)Ljava/lang/Object;
  293. move-result-object p1
  294. check-cast p1, [Ljava/lang/Object;
  295. check-cast p1, [Ljava/lang/Object;
  296. .line 289
  297. aput-object v0, p1, v2
  298. :cond_2
  299. :goto_0
  300. return-object p1
  301. .line 276
  302. :cond_3
  303. :goto_1
  304. array-length v0, p1
  305. if-eqz v0, :cond_4
  306. .line 277
  307. aput-object v1, p1, v2
  308. :cond_4
  309. return-object p1
  310. .end method
  311. .method public hasComplete()Z
  312. .locals 1
  313. .line 296
  314. iget-object v0, p0, Lio/reactivex/subjects/BehaviorSubject;->value:Ljava/util/concurrent/atomic/AtomicReference;
  315. invoke-virtual {v0}, Ljava/util/concurrent/atomic/AtomicReference;->get()Ljava/lang/Object;
  316. move-result-object v0
  317. .line 297
  318. invoke-static {v0}, Lio/reactivex/internal/util/NotificationLite;->isComplete(Ljava/lang/Object;)Z
  319. move-result v0
  320. return v0
  321. .end method
  322. .method public hasObservers()Z
  323. .locals 1
  324. .line 218
  325. iget-object v0, p0, Lio/reactivex/subjects/BehaviorSubject;->subscribers:Ljava/util/concurrent/atomic/AtomicReference;
  326. invoke-virtual {v0}, Ljava/util/concurrent/atomic/AtomicReference;->get()Ljava/lang/Object;
  327. move-result-object v0
  328. check-cast v0, [Lio/reactivex/subjects/BehaviorSubject$BehaviorDisposable;
  329. array-length v0, v0
  330. if-eqz v0, :cond_0
  331. const/4 v0, 0x1
  332. goto :goto_0
  333. :cond_0
  334. const/4 v0, 0x0
  335. :goto_0
  336. return v0
  337. .end method
  338. .method public hasThrowable()Z
  339. .locals 1
  340. .line 302
  341. iget-object v0, p0, Lio/reactivex/subjects/BehaviorSubject;->value:Ljava/util/concurrent/atomic/AtomicReference;
  342. invoke-virtual {v0}, Ljava/util/concurrent/atomic/AtomicReference;->get()Ljava/lang/Object;
  343. move-result-object v0
  344. .line 303
  345. invoke-static {v0}, Lio/reactivex/internal/util/NotificationLite;->isError(Ljava/lang/Object;)Z
  346. move-result v0
  347. return v0
  348. .end method
  349. .method public hasValue()Z
  350. .locals 2
  351. .line 312
  352. iget-object v0, p0, Lio/reactivex/subjects/BehaviorSubject;->value:Ljava/util/concurrent/atomic/AtomicReference;
  353. invoke-virtual {v0}, Ljava/util/concurrent/atomic/AtomicReference;->get()Ljava/lang/Object;
  354. move-result-object v0
  355. if-eqz v0, :cond_0
  356. .line 313
  357. invoke-static {v0}, Lio/reactivex/internal/util/NotificationLite;->isComplete(Ljava/lang/Object;)Z
  358. move-result v1
  359. if-nez v1, :cond_0
  360. invoke-static {v0}, Lio/reactivex/internal/util/NotificationLite;->isError(Ljava/lang/Object;)Z
  361. move-result v0
  362. if-nez v0, :cond_0
  363. const/4 v0, 0x1
  364. goto :goto_0
  365. :cond_0
  366. const/4 v0, 0x0
  367. :goto_0
  368. return v0
  369. .end method
  370. .method public onComplete()V
  371. .locals 7
  372. .line 206
  373. iget-boolean v0, p0, Lio/reactivex/subjects/BehaviorSubject;->done:Z
  374. if-eqz v0, :cond_0
  375. return-void
  376. :cond_0
  377. const/4 v0, 0x1
  378. .line 209
  379. iput-boolean v0, p0, Lio/reactivex/subjects/BehaviorSubject;->done:Z
  380. .line 210
  381. invoke-static {}, Lio/reactivex/internal/util/NotificationLite;->complete()Ljava/lang/Object;
  382. move-result-object v0
  383. .line 211
  384. invoke-virtual {p0, v0}, Lio/reactivex/subjects/BehaviorSubject;->terminate(Ljava/lang/Object;)[Lio/reactivex/subjects/BehaviorSubject$BehaviorDisposable;
  385. move-result-object v1
  386. array-length v2, v1
  387. const/4 v3, 0x0
  388. :goto_0
  389. if-ge v3, v2, :cond_1
  390. aget-object v4, v1, v3
  391. .line 212
  392. iget-wide v5, p0, Lio/reactivex/subjects/BehaviorSubject;->index:J
  393. invoke-virtual {v4, v0, v5, v6}, Lio/reactivex/subjects/BehaviorSubject$BehaviorDisposable;->emitNext(Ljava/lang/Object;J)V
  394. add-int/lit8 v3, v3, 0x1
  395. goto :goto_0
  396. :cond_1
  397. return-void
  398. .end method
  399. .method public onError(Ljava/lang/Throwable;)V
  400. .locals 6
  401. if-nez p1, :cond_0
  402. .line 191
  403. new-instance p1, Ljava/lang/NullPointerException;
  404. const-string v0, "onError called with null. Null values are generally not allowed in 2.x operators and sources."
  405. invoke-direct {p1, v0}, Ljava/lang/NullPointerException;-><init>(Ljava/lang/String;)V
  406. .line 193
  407. :cond_0
  408. iget-boolean v0, p0, Lio/reactivex/subjects/BehaviorSubject;->done:Z
  409. if-eqz v0, :cond_1
  410. .line 194
  411. invoke-static {p1}, Lio/reactivex/plugins/RxJavaPlugins;->onError(Ljava/lang/Throwable;)V
  412. return-void
  413. :cond_1
  414. const/4 v0, 0x1
  415. .line 197
  416. iput-boolean v0, p0, Lio/reactivex/subjects/BehaviorSubject;->done:Z
  417. .line 198
  418. invoke-static {p1}, Lio/reactivex/internal/util/NotificationLite;->error(Ljava/lang/Throwable;)Ljava/lang/Object;
  419. move-result-object p1
  420. .line 199
  421. invoke-virtual {p0, p1}, Lio/reactivex/subjects/BehaviorSubject;->terminate(Ljava/lang/Object;)[Lio/reactivex/subjects/BehaviorSubject$BehaviorDisposable;
  422. move-result-object v0
  423. array-length v1, v0
  424. const/4 v2, 0x0
  425. :goto_0
  426. if-ge v2, v1, :cond_2
  427. aget-object v3, v0, v2
  428. .line 200
  429. iget-wide v4, p0, Lio/reactivex/subjects/BehaviorSubject;->index:J
  430. invoke-virtual {v3, p1, v4, v5}, Lio/reactivex/subjects/BehaviorSubject$BehaviorDisposable;->emitNext(Ljava/lang/Object;J)V
  431. add-int/lit8 v2, v2, 0x1
  432. goto :goto_0
  433. :cond_2
  434. return-void
  435. .end method
  436. .method public onNext(Ljava/lang/Object;)V
  437. .locals 6
  438. .annotation system Ldalvik/annotation/Signature;
  439. value = {
  440. "(TT;)V"
  441. }
  442. .end annotation
  443. if-nez p1, :cond_0
  444. .line 175
  445. new-instance p1, Ljava/lang/NullPointerException;
  446. const-string v0, "onNext called with null. Null values are generally not allowed in 2.x operators and sources."
  447. invoke-direct {p1, v0}, Ljava/lang/NullPointerException;-><init>(Ljava/lang/String;)V
  448. invoke-virtual {p0, p1}, Lio/reactivex/subjects/BehaviorSubject;->onError(Ljava/lang/Throwable;)V
  449. return-void
  450. .line 178
  451. :cond_0
  452. iget-boolean v0, p0, Lio/reactivex/subjects/BehaviorSubject;->done:Z
  453. if-eqz v0, :cond_1
  454. return-void
  455. .line 181
  456. :cond_1
  457. invoke-static {p1}, Lio/reactivex/internal/util/NotificationLite;->next(Ljava/lang/Object;)Ljava/lang/Object;
  458. move-result-object p1
  459. .line 182
  460. invoke-virtual {p0, p1}, Lio/reactivex/subjects/BehaviorSubject;->setCurrent(Ljava/lang/Object;)V
  461. .line 183
  462. iget-object v0, p0, Lio/reactivex/subjects/BehaviorSubject;->subscribers:Ljava/util/concurrent/atomic/AtomicReference;
  463. invoke-virtual {v0}, Ljava/util/concurrent/atomic/AtomicReference;->get()Ljava/lang/Object;
  464. move-result-object v0
  465. check-cast v0, [Lio/reactivex/subjects/BehaviorSubject$BehaviorDisposable;
  466. array-length v1, v0
  467. const/4 v2, 0x0
  468. :goto_0
  469. if-ge v2, v1, :cond_2
  470. aget-object v3, v0, v2
  471. .line 184
  472. iget-wide v4, p0, Lio/reactivex/subjects/BehaviorSubject;->index:J
  473. invoke-virtual {v3, p1, v4, v5}, Lio/reactivex/subjects/BehaviorSubject$BehaviorDisposable;->emitNext(Ljava/lang/Object;J)V
  474. add-int/lit8 v2, v2, 0x1
  475. goto :goto_0
  476. :cond_2
  477. return-void
  478. .end method
  479. .method public onSubscribe(Lio/reactivex/disposables/Disposable;)V
  480. .locals 1
  481. .line 167
  482. iget-boolean v0, p0, Lio/reactivex/subjects/BehaviorSubject;->done:Z
  483. if-eqz v0, :cond_0
  484. .line 168
  485. invoke-interface {p1}, Lio/reactivex/disposables/Disposable;->dispose()V
  486. :cond_0
  487. return-void
  488. .end method
  489. .method remove(Lio/reactivex/subjects/BehaviorSubject$BehaviorDisposable;)V
  490. .locals 6
  491. .annotation system Ldalvik/annotation/Signature;
  492. value = {
  493. "(",
  494. "Lio/reactivex/subjects/BehaviorSubject$BehaviorDisposable<",
  495. "TT;>;)V"
  496. }
  497. .end annotation
  498. .line 336
  499. :cond_0
  500. iget-object v0, p0, Lio/reactivex/subjects/BehaviorSubject;->subscribers:Ljava/util/concurrent/atomic/AtomicReference;
  501. invoke-virtual {v0}, Ljava/util/concurrent/atomic/AtomicReference;->get()Ljava/lang/Object;
  502. move-result-object v0
  503. check-cast v0, [Lio/reactivex/subjects/BehaviorSubject$BehaviorDisposable;
  504. .line 337
  505. sget-object v1, Lio/reactivex/subjects/BehaviorSubject;->TERMINATED:[Lio/reactivex/subjects/BehaviorSubject$BehaviorDisposable;
  506. if-eq v0, v1, :cond_6
  507. sget-object v1, Lio/reactivex/subjects/BehaviorSubject;->EMPTY:[Lio/reactivex/subjects/BehaviorSubject$BehaviorDisposable;
  508. if-ne v0, v1, :cond_1
  509. goto :goto_3
  510. .line 340
  511. :cond_1
  512. array-length v1, v0
  513. const/4 v2, -0x1
  514. const/4 v3, 0x0
  515. const/4 v4, 0x0
  516. :goto_0
  517. if-ge v4, v1, :cond_3
  518. .line 343
  519. aget-object v5, v0, v4
  520. if-ne v5, p1, :cond_2
  521. move v2, v4
  522. goto :goto_1
  523. :cond_2
  524. add-int/lit8 v4, v4, 0x1
  525. goto :goto_0
  526. :cond_3
  527. :goto_1
  528. if-gez v2, :cond_4
  529. return-void
  530. :cond_4
  531. const/4 v4, 0x1
  532. if-ne v1, v4, :cond_5
  533. .line 354
  534. sget-object v1, Lio/reactivex/subjects/BehaviorSubject;->EMPTY:[Lio/reactivex/subjects/BehaviorSubject$BehaviorDisposable;
  535. goto :goto_2
  536. :cond_5
  537. add-int/lit8 v5, v1, -0x1
  538. .line 356
  539. new-array v5, v5, [Lio/reactivex/subjects/BehaviorSubject$BehaviorDisposable;
  540. .line 357
  541. invoke-static {v0, v3, v5, v3, v2}, Ljava/lang/System;->arraycopy(Ljava/lang/Object;ILjava/lang/Object;II)V
  542. add-int/lit8 v3, v2, 0x1
  543. sub-int/2addr v1, v2
  544. sub-int/2addr v1, v4
  545. .line 358
  546. invoke-static {v0, v3, v5, v2, v1}, Ljava/lang/System;->arraycopy(Ljava/lang/Object;ILjava/lang/Object;II)V
  547. move-object v1, v5
  548. .line 360
  549. :goto_2
  550. iget-object v2, p0, Lio/reactivex/subjects/BehaviorSubject;->subscribers:Ljava/util/concurrent/atomic/AtomicReference;
  551. invoke-virtual {v2, v0, v1}, Ljava/util/concurrent/atomic/AtomicReference;->compareAndSet(Ljava/lang/Object;Ljava/lang/Object;)Z
  552. move-result v0
  553. if-eqz v0, :cond_0
  554. :cond_6
  555. :goto_3
  556. return-void
  557. .end method
  558. .method setCurrent(Ljava/lang/Object;)V
  559. .locals 4
  560. .line 382
  561. iget-object v0, p0, Lio/reactivex/subjects/BehaviorSubject;->writeLock:Ljava/util/concurrent/locks/Lock;
  562. invoke-interface {v0}, Ljava/util/concurrent/locks/Lock;->lock()V
  563. .line 384
  564. :try_start_0
  565. iget-wide v0, p0, Lio/reactivex/subjects/BehaviorSubject;->index:J
  566. const-wide/16 v2, 0x1
  567. add-long/2addr v0, v2
  568. iput-wide v0, p0, Lio/reactivex/subjects/BehaviorSubject;->index:J
  569. .line 385
  570. iget-object v0, p0, Lio/reactivex/subjects/BehaviorSubject;->value:Ljava/util/concurrent/atomic/AtomicReference;
  571. invoke-virtual {v0, p1}, Ljava/util/concurrent/atomic/AtomicReference;->lazySet(Ljava/lang/Object;)V
  572. :try_end_0
  573. .catchall {:try_start_0 .. :try_end_0} :catchall_0
  574. .line 387
  575. iget-object p1, p0, Lio/reactivex/subjects/BehaviorSubject;->writeLock:Ljava/util/concurrent/locks/Lock;
  576. invoke-interface {p1}, Ljava/util/concurrent/locks/Lock;->unlock()V
  577. return-void
  578. :catchall_0
  579. move-exception p1
  580. iget-object v0, p0, Lio/reactivex/subjects/BehaviorSubject;->writeLock:Ljava/util/concurrent/locks/Lock;
  581. invoke-interface {v0}, Ljava/util/concurrent/locks/Lock;->unlock()V
  582. throw p1
  583. .end method
  584. .method protected subscribeActual(Lio/reactivex/Observer;)V
  585. .locals 2
  586. .annotation system Ldalvik/annotation/Signature;
  587. value = {
  588. "(",
  589. "Lio/reactivex/Observer<",
  590. "-TT;>;)V"
  591. }
  592. .end annotation
  593. .line 147
  594. new-instance v0, Lio/reactivex/subjects/BehaviorSubject$BehaviorDisposable;
  595. invoke-direct {v0, p1, p0}, Lio/reactivex/subjects/BehaviorSubject$BehaviorDisposable;-><init>(Lio/reactivex/Observer;Lio/reactivex/subjects/BehaviorSubject;)V
  596. .line 148
  597. invoke-interface {p1, v0}, Lio/reactivex/Observer;->onSubscribe(Lio/reactivex/disposables/Disposable;)V
  598. .line 149
  599. invoke-virtual {p0, v0}, Lio/reactivex/subjects/BehaviorSubject;->add(Lio/reactivex/subjects/BehaviorSubject$BehaviorDisposable;)Z
  600. move-result v1
  601. if-eqz v1, :cond_1
  602. .line 150
  603. iget-boolean p1, v0, Lio/reactivex/subjects/BehaviorSubject$BehaviorDisposable;->cancelled:Z
  604. if-eqz p1, :cond_0
  605. .line 151
  606. invoke-virtual {p0, v0}, Lio/reactivex/subjects/BehaviorSubject;->remove(Lio/reactivex/subjects/BehaviorSubject$BehaviorDisposable;)V
  607. goto :goto_0
  608. .line 153
  609. :cond_0
  610. invoke-virtual {v0}, Lio/reactivex/subjects/BehaviorSubject$BehaviorDisposable;->emitFirst()V
  611. goto :goto_0
  612. .line 156
  613. :cond_1
  614. iget-object v0, p0, Lio/reactivex/subjects/BehaviorSubject;->value:Ljava/util/concurrent/atomic/AtomicReference;
  615. invoke-virtual {v0}, Ljava/util/concurrent/atomic/AtomicReference;->get()Ljava/lang/Object;
  616. move-result-object v0
  617. .line 157
  618. invoke-static {v0}, Lio/reactivex/internal/util/NotificationLite;->isComplete(Ljava/lang/Object;)Z
  619. move-result v1
  620. if-eqz v1, :cond_2
  621. .line 158
  622. invoke-interface {p1}, Lio/reactivex/Observer;->onComplete()V
  623. goto :goto_0
  624. .line 160
  625. :cond_2
  626. invoke-static {v0}, Lio/reactivex/internal/util/NotificationLite;->getError(Ljava/lang/Object;)Ljava/lang/Throwable;
  627. move-result-object v0
  628. invoke-interface {p1, v0}, Lio/reactivex/Observer;->onError(Ljava/lang/Throwable;)V
  629. :goto_0
  630. return-void
  631. .end method
  632. .method subscriberCount()I
  633. .locals 1
  634. .line 223
  635. iget-object v0, p0, Lio/reactivex/subjects/BehaviorSubject;->subscribers:Ljava/util/concurrent/atomic/AtomicReference;
  636. invoke-virtual {v0}, Ljava/util/concurrent/atomic/AtomicReference;->get()Ljava/lang/Object;
  637. move-result-object v0
  638. check-cast v0, [Lio/reactivex/subjects/BehaviorSubject$BehaviorDisposable;
  639. array-length v0, v0
  640. return v0
  641. .end method
  642. .method terminate(Ljava/lang/Object;)[Lio/reactivex/subjects/BehaviorSubject$BehaviorDisposable;
  643. .locals 2
  644. .annotation system Ldalvik/annotation/Signature;
  645. value = {
  646. "(",
  647. "Ljava/lang/Object;",
  648. ")[",
  649. "Lio/reactivex/subjects/BehaviorSubject$BehaviorDisposable<",
  650. "TT;>;"
  651. }
  652. .end annotation
  653. .line 369
  654. iget-object v0, p0, Lio/reactivex/subjects/BehaviorSubject;->subscribers:Ljava/util/concurrent/atomic/AtomicReference;
  655. invoke-virtual {v0}, Ljava/util/concurrent/atomic/AtomicReference;->get()Ljava/lang/Object;
  656. move-result-object v0
  657. check-cast v0, [Lio/reactivex/subjects/BehaviorSubject$BehaviorDisposable;
  658. .line 370
  659. sget-object v1, Lio/reactivex/subjects/BehaviorSubject;->TERMINATED:[Lio/reactivex/subjects/BehaviorSubject$BehaviorDisposable;
  660. if-eq v0, v1, :cond_0
  661. .line 371
  662. iget-object v0, p0, Lio/reactivex/subjects/BehaviorSubject;->subscribers:Ljava/util/concurrent/atomic/AtomicReference;
  663. invoke-virtual {v0, v1}, Ljava/util/concurrent/atomic/AtomicReference;->getAndSet(Ljava/lang/Object;)Ljava/lang/Object;
  664. move-result-object v0
  665. check-cast v0, [Lio/reactivex/subjects/BehaviorSubject$BehaviorDisposable;
  666. .line 372
  667. sget-object v1, Lio/reactivex/subjects/BehaviorSubject;->TERMINATED:[Lio/reactivex/subjects/BehaviorSubject$BehaviorDisposable;
  668. if-eq v0, v1, :cond_0
  669. .line 374
  670. invoke-virtual {p0, p1}, Lio/reactivex/subjects/BehaviorSubject;->setCurrent(Ljava/lang/Object;)V
  671. :cond_0
  672. return-object v0
  673. .end method