31
31
* <p>
32
32
* The CompletableSubject doesn't store the Disposables coming through onSubscribe but
33
33
* disposes them once the other onXXX methods were called (terminal state reached).
34
- * @param <T> the value type received and emitted
35
34
*/
36
- public final class CompletableSubject < T > extends Completable implements CompletableObserver {
35
+ public final class CompletableSubject extends Completable implements CompletableObserver {
37
36
38
- final AtomicReference <MaybeDisposable < T > []> observers ;
37
+ final AtomicReference <CompletableDisposable []> observers ;
39
38
40
- @ SuppressWarnings ("rawtypes" )
41
- static final MaybeDisposable [] EMPTY = new MaybeDisposable [0 ];
39
+ static final CompletableDisposable [] EMPTY = new CompletableDisposable [0 ];
42
40
43
- @ SuppressWarnings ("rawtypes" )
44
- static final MaybeDisposable [] TERMINATED = new MaybeDisposable [0 ];
41
+ static final CompletableDisposable [] TERMINATED = new CompletableDisposable [0 ];
45
42
46
43
final AtomicBoolean once ;
47
44
Throwable error ;
48
45
49
46
/**
50
47
* Creates a fresh CompletableSubject.
51
- * @param <T> the value type received and emitted
52
48
* @return the new CompletableSubject instance
53
49
*/
54
- public static < T > CompletableSubject < T > create () {
55
- return new CompletableSubject < T > ();
50
+ public static CompletableSubject create () {
51
+ return new CompletableSubject ();
56
52
}
57
53
58
- @ SuppressWarnings ("unchecked" )
59
54
CompletableSubject () {
60
55
once = new AtomicBoolean ();
61
- observers = new AtomicReference <MaybeDisposable < T > []>(EMPTY );
56
+ observers = new AtomicReference <CompletableDisposable []>(EMPTY );
62
57
}
63
58
64
59
@ Override
@@ -68,35 +63,33 @@ public void onSubscribe(Disposable d) {
68
63
}
69
64
}
70
65
71
- @ SuppressWarnings ("unchecked" )
72
66
@ Override
73
67
public void onError (Throwable e ) {
74
68
if (e == null ) {
75
69
e = new NullPointerException ("Null errors are not allowed in 2.x" );
76
70
}
77
71
if (once .compareAndSet (false , true )) {
78
72
this .error = e ;
79
- for (MaybeDisposable < T > md : observers .getAndSet (TERMINATED )) {
73
+ for (CompletableDisposable md : observers .getAndSet (TERMINATED )) {
80
74
md .actual .onError (e );
81
75
}
82
76
} else {
83
77
RxJavaPlugins .onError (e );
84
78
}
85
79
}
86
80
87
- @ SuppressWarnings ("unchecked" )
88
81
@ Override
89
82
public void onComplete () {
90
83
if (once .compareAndSet (false , true )) {
91
- for (MaybeDisposable < T > md : observers .getAndSet (TERMINATED )) {
84
+ for (CompletableDisposable md : observers .getAndSet (TERMINATED )) {
92
85
md .actual .onComplete ();
93
86
}
94
87
}
95
88
}
96
89
97
90
@ Override
98
91
protected void subscribeActual (CompletableObserver observer ) {
99
- MaybeDisposable < T > md = new MaybeDisposable < T > (observer , this );
92
+ CompletableDisposable md = new CompletableDisposable (observer , this );
100
93
observer .onSubscribe (md );
101
94
if (add (md )) {
102
95
if (md .isDisposed ()) {
@@ -112,16 +105,16 @@ protected void subscribeActual(CompletableObserver observer) {
112
105
}
113
106
}
114
107
115
- boolean add (MaybeDisposable < T > inner ) {
108
+ boolean add (CompletableDisposable inner ) {
116
109
for (;;) {
117
- MaybeDisposable < T > [] a = observers .get ();
110
+ CompletableDisposable [] a = observers .get ();
118
111
if (a == TERMINATED ) {
119
112
return false ;
120
113
}
121
114
122
115
int n = a .length ;
123
- @ SuppressWarnings ( "unchecked" )
124
- MaybeDisposable < T > [] b = new MaybeDisposable [n + 1 ];
116
+
117
+ CompletableDisposable [] b = new CompletableDisposable [n + 1 ];
125
118
System .arraycopy (a , 0 , b , 0 , n );
126
119
b [n ] = inner ;
127
120
if (observers .compareAndSet (a , b )) {
@@ -130,10 +123,9 @@ boolean add(MaybeDisposable<T> inner) {
130
123
}
131
124
}
132
125
133
- @ SuppressWarnings ("unchecked" )
134
- void remove (MaybeDisposable <T > inner ) {
126
+ void remove (CompletableDisposable inner ) {
135
127
for (;;) {
136
- MaybeDisposable < T > [] a = observers .get ();
128
+ CompletableDisposable [] a = observers .get ();
137
129
int n = a .length ;
138
130
if (n == 0 ) {
139
131
return ;
@@ -151,11 +143,11 @@ void remove(MaybeDisposable<T> inner) {
151
143
if (j < 0 ) {
152
144
return ;
153
145
}
154
- MaybeDisposable < T > [] b ;
146
+ CompletableDisposable [] b ;
155
147
if (n == 1 ) {
156
148
b = EMPTY ;
157
149
} else {
158
- b = new MaybeDisposable [n - 1 ];
150
+ b = new CompletableDisposable [n - 1 ];
159
151
System .arraycopy (a , 0 , b , 0 , j );
160
152
System .arraycopy (a , j + 1 , b , j , n - j - 1 );
161
153
}
@@ -209,20 +201,20 @@ public boolean hasObservers() {
209
201
return observers .get ().length ;
210
202
}
211
203
212
- static final class MaybeDisposable < T >
213
- extends AtomicReference <CompletableSubject < T > > implements Disposable {
204
+ static final class CompletableDisposable
205
+ extends AtomicReference <CompletableSubject > implements Disposable {
214
206
private static final long serialVersionUID = -7650903191002190468L ;
215
207
216
208
final CompletableObserver actual ;
217
209
218
- MaybeDisposable (CompletableObserver actual , CompletableSubject < T > parent ) {
210
+ CompletableDisposable (CompletableObserver actual , CompletableSubject parent ) {
219
211
this .actual = actual ;
220
212
lazySet (parent );
221
213
}
222
214
223
215
@ Override
224
216
public void dispose () {
225
- CompletableSubject < T > parent = getAndSet (null );
217
+ CompletableSubject parent = getAndSet (null );
226
218
if (parent != null ) {
227
219
parent .remove (this );
228
220
}
0 commit comments