Skip to content

Commit 51dd03b

Browse files
bangarharshitakarnokd
authored andcommitted
Added nullable annotations to subjects (#5890)
1 parent 3ba1d35 commit 51dd03b

8 files changed

+54
-33
lines changed

src/main/java/io/reactivex/subjects/AsyncSubject.java

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313

1414
package io.reactivex.subjects;
1515

16+
import io.reactivex.annotations.Nullable;
1617
import java.util.Arrays;
1718
import java.util.concurrent.atomic.AtomicReference;
1819

@@ -85,22 +86,22 @@
8586
* AsyncSubject<Object> subject = AsyncSubject.create();
8687
*
8788
* TestObserver<Object> to1 = subject.test();
88-
*
89+
*
8990
* to1.assertEmpty();
90-
*
91+
*
9192
* subject.onNext(1);
92-
*
93+
*
9394
* // AsyncSubject only emits when onComplete was called.
9495
* to1.assertEmpty();
9596
*
9697
* subject.onNext(2);
9798
* subject.onComplete();
98-
*
99+
*
99100
* // onComplete triggers the emission of the last cached item and the onComplete event.
100101
* to1.assertResult(2);
101-
*
102+
*
102103
* TestObserver<Object> to2 = subject.test();
103-
*
104+
*
104105
* // late Observers receive the last cached item too
105106
* to2.assertResult(2);
106107
* </code></pre>
@@ -313,6 +314,7 @@ public boolean hasValue() {
313314
* <p>The method is thread-safe.
314315
* @return a single value the Subject currently has or null if no such value exists
315316
*/
317+
@Nullable
316318
public T getValue() {
317319
return subscribers.get() == TERMINATED ? value : null;
318320
}

src/main/java/io/reactivex/subjects/BehaviorSubject.java

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
package io.reactivex.subjects;
1515

1616
import io.reactivex.annotations.CheckReturnValue;
17+
import io.reactivex.annotations.Nullable;
1718
import java.lang.reflect.Array;
1819
import java.util.concurrent.atomic.AtomicReference;
1920
import java.util.concurrent.locks.*;
@@ -63,19 +64,19 @@
6364
* observable.onNext(1);
6465
* // this will "clear" the cache
6566
* observable.onNext(EMPTY);
66-
*
67+
*
6768
* TestObserver&lt;Integer&gt; to2 = observable.test();
68-
*
69+
*
6970
* subject.onNext(2);
7071
* subject.onComplete();
71-
*
72+
*
7273
* // to1 received both non-empty items
7374
* to1.assertResult(1, 2);
74-
*
75+
*
7576
* // to2 received only 2 even though the current item was EMPTY
7677
* // when it got subscribed
7778
* to2.assertResult(2);
78-
*
79+
*
7980
* // Observers coming after the subject was terminated receive
8081
* // no items and only the onComplete event in this case.
8182
* observable.test().assertResult();
@@ -300,6 +301,7 @@ public boolean hasObservers() {
300301
}
301302

302303
@Override
304+
@Nullable
303305
public Throwable getThrowable() {
304306
Object o = value.get();
305307
if (NotificationLite.isError(o)) {
@@ -313,6 +315,7 @@ public Throwable getThrowable() {
313315
* <p>The method is thread-safe.
314316
* @return a single value the Subject currently has or null if no such value exists
315317
*/
318+
@Nullable
316319
public T getValue() {
317320
Object o = value.get();
318321
if (NotificationLite.isComplete(o) || NotificationLite.isError(o)) {

src/main/java/io/reactivex/subjects/CompletableSubject.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313

1414
package io.reactivex.subjects;
1515

16+
import io.reactivex.annotations.Nullable;
1617
import java.util.concurrent.atomic.*;
1718

1819
import io.reactivex.*;
@@ -65,12 +66,12 @@
6566
* Example usage:
6667
* <pre><code>
6768
* CompletableSubject subject = CompletableSubject.create();
68-
*
69+
*
6970
* TestObserver&lt;Void&gt; to1 = subject.test();
7071
*
7172
* // a fresh CompletableSubject is empty
7273
* to1.assertEmpty();
73-
*
74+
*
7475
* subject.onComplete();
7576
*
7677
* // a CompletableSubject is always void of items
@@ -213,6 +214,7 @@ void remove(CompletableDisposable inner) {
213214
* Returns the terminal error if this CompletableSubject has been terminated with an error, null otherwise.
214215
* @return the terminal error or null if not terminated or not with an error
215216
*/
217+
@Nullable
216218
public Throwable getThrowable() {
217219
if (observers.get() == TERMINATED) {
218220
return error;

src/main/java/io/reactivex/subjects/MaybeSubject.java

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -72,20 +72,20 @@
7272
* Example usage:
7373
* <pre><code>
7474
* MaybeSubject&lt;Integer&gt; subject1 = MaybeSubject.create();
75-
*
75+
*
7676
* TestObserver&lt;Integer&gt; to1 = subject1.test();
77-
*
77+
*
7878
* // MaybeSubjects are empty by default
7979
* to1.assertEmpty();
80-
*
80+
*
8181
* subject1.onSuccess(1);
82-
*
82+
*
8383
* // onSuccess is a terminal event with MaybeSubjects
8484
* // TestObserver converts onSuccess into onNext + onComplete
8585
* to1.assertResult(1);
8686
*
8787
* TestObserver&lt;Integer&gt; to2 = subject1.test();
88-
*
88+
*
8989
* // late Observers receive the terminal signal (onSuccess) too
9090
* to2.assertResult(1);
9191
*
@@ -94,14 +94,14 @@
9494
* MaybeSubject&lt;Integer&gt; subject2 = MaybeSubject.create();
9595
*
9696
* TestObserver&lt;Integer&gt; to3 = subject2.test();
97-
*
97+
*
9898
* subject2.onComplete();
99-
*
99+
*
100100
* // a completed MaybeSubject completes its MaybeObservers
101101
* to3.assertResult();
102102
*
103103
* TestObserver&lt;Integer&gt; to4 = subject1.test();
104-
*
104+
*
105105
* // late Observers receive the terminal signal (onComplete) too
106106
* to4.assertResult();
107107
* </code></pre>
@@ -263,6 +263,7 @@ void remove(MaybeDisposable<T> inner) {
263263
* Returns the success value if this MaybeSubject was terminated with a success value.
264264
* @return the success value or null
265265
*/
266+
@Nullable
266267
public T getValue() {
267268
if (observers.get() == TERMINATED) {
268269
return value;
@@ -282,6 +283,7 @@ public boolean hasValue() {
282283
* Returns the terminal error if this MaybeSubject has been terminated with an error, null otherwise.
283284
* @return the terminal error or null if not terminated or not with an error
284285
*/
286+
@Nullable
285287
public Throwable getThrowable() {
286288
if (observers.get() == TERMINATED) {
287289
return error;

src/main/java/io/reactivex/subjects/PublishSubject.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
package io.reactivex.subjects;
1515

1616
import io.reactivex.annotations.CheckReturnValue;
17+
import io.reactivex.annotations.Nullable;
1718
import java.util.concurrent.atomic.*;
1819

1920
import io.reactivex.Observer;
@@ -263,6 +264,7 @@ public boolean hasObservers() {
263264
}
264265

265266
@Override
267+
@Nullable
266268
public Throwable getThrowable() {
267269
if (subscribers.get() == TERMINATED) {
268270
return error;

src/main/java/io/reactivex/subjects/ReplaySubject.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313

1414
package io.reactivex.subjects;
1515

16+
import io.reactivex.annotations.Nullable;
1617
import java.lang.reflect.Array;
1718
import java.util.*;
1819
import java.util.concurrent.TimeUnit;
@@ -395,6 +396,7 @@ public boolean hasObservers() {
395396
}
396397

397398
@Override
399+
@Nullable
398400
public Throwable getThrowable() {
399401
Object o = buffer.get();
400402
if (NotificationLite.isError(o)) {
@@ -408,6 +410,7 @@ public Throwable getThrowable() {
408410
* <p>The method is thread-safe.
409411
* @return a single value the Subject currently has or null if no such value exists
410412
*/
413+
@Nullable
411414
public T getValue() {
412415
return buffer.getValue();
413416
}
@@ -542,6 +545,7 @@ interface ReplayBuffer<T> {
542545

543546
int size();
544547

548+
@Nullable
545549
T getValue();
546550

547551
T[] getValues(T[] array);
@@ -620,6 +624,7 @@ public void addFinal(Object notificationLite) {
620624
}
621625

622626
@Override
627+
@Nullable
623628
@SuppressWarnings("unchecked")
624629
public T getValue() {
625630
int s = size;
@@ -838,6 +843,7 @@ public void addFinal(Object notificationLite) {
838843
}
839844

840845
@Override
846+
@Nullable
841847
@SuppressWarnings("unchecked")
842848
public T getValue() {
843849
Node<Object> prev = null;
@@ -1080,6 +1086,7 @@ public void addFinal(Object notificationLite) {
10801086
}
10811087

10821088
@Override
1089+
@Nullable
10831090
@SuppressWarnings("unchecked")
10841091
public T getValue() {
10851092
TimedNode<Object> prev = null;

src/main/java/io/reactivex/subjects/SerializedSubject.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
package io.reactivex.subjects;
1515

1616
import io.reactivex.Observer;
17+
import io.reactivex.annotations.Nullable;
1718
import io.reactivex.disposables.Disposable;
1819
import io.reactivex.internal.util.*;
1920
import io.reactivex.internal.util.AppendOnlyLinkedArrayList.NonThrowingPredicate;
@@ -193,6 +194,7 @@ public boolean hasThrowable() {
193194
}
194195

195196
@Override
197+
@Nullable
196198
public Throwable getThrowable() {
197199
return actual.getThrowable();
198200
}

src/main/java/io/reactivex/subjects/UnicastSubject.java

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -105,37 +105,37 @@
105105
* Example usage:
106106
* <pre><code>
107107
* UnicastSubject&lt;Integer&gt; subject = UnicastSubject.create();
108-
*
108+
*
109109
* TestObserver&lt;Integer&gt; to1 = subject.test();
110-
*
110+
*
111111
* // fresh UnicastSubjects are empty
112112
* to1.assertEmpty();
113-
*
113+
*
114114
* TestObserver&lt;Integer&gt; to2 = subject.test();
115-
*
115+
*
116116
* // A UnicastSubject only allows one Observer during its lifetime
117117
* to2.assertFailure(IllegalStateException.class);
118-
*
118+
*
119119
* subject.onNext(1);
120120
* to1.assertValue(1);
121-
*
121+
*
122122
* subject.onNext(2);
123123
* to1.assertValues(1, 2);
124-
*
124+
*
125125
* subject.onComplete();
126126
* to1.assertResult(1, 2);
127-
*
127+
*
128128
* // ----------------------------------------------------
129-
*
129+
*
130130
* UnicastSubject&lt;Integer&gt; subject2 = UnicastSubject.create();
131-
*
131+
*
132132
* // a UnicastSubject caches events util its single Observer subscribes
133133
* subject.onNext(1);
134134
* subject.onNext(2);
135135
* subject.onComplete();
136-
*
136+
*
137137
* TestObserver&lt;Integer&gt; to3 = subject2.test();
138-
*
138+
*
139139
* // the cached events are emitted in order
140140
* to3.assertResult(1, 2);
141141
* </code></pre>
@@ -498,6 +498,7 @@ public boolean hasObservers() {
498498
}
499499

500500
@Override
501+
@Nullable
501502
public Throwable getThrowable() {
502503
if (done) {
503504
return error;

0 commit comments

Comments
 (0)