Skip to content

Commit b58642b

Browse files
authored
2.x: reflection-based parameter validator & fixes (ReactiveX#5187)
1 parent 2d03fa9 commit b58642b

File tree

10 files changed

+1374
-14
lines changed

10 files changed

+1374
-14
lines changed

src/main/java/io/reactivex/Completable.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -929,6 +929,7 @@ public final void blockingAwait() {
929929
@CheckReturnValue
930930
@SchedulerSupport(SchedulerSupport.NONE)
931931
public final boolean blockingAwait(long timeout, TimeUnit unit) {
932+
ObjectHelper.requireNonNull(unit, "unit is null");
932933
BlockingMultiObserver<Void> observer = new BlockingMultiObserver<Void>();
933934
subscribe(observer);
934935
return observer.blockingAwait(timeout, unit);

src/main/java/io/reactivex/Flowable.java

Lines changed: 64 additions & 9 deletions
Large diffs are not rendered by default.

src/main/java/io/reactivex/Maybe.java

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -827,6 +827,8 @@ public static <T> Flowable<T> merge(Publisher<? extends MaybeSource<? extends T>
827827
@SchedulerSupport(SchedulerSupport.NONE)
828828
@SuppressWarnings({ "unchecked", "rawtypes" })
829829
public static <T> Flowable<T> merge(Publisher<? extends MaybeSource<? extends T>> sources, int maxConcurrency) {
830+
ObjectHelper.requireNonNull(sources, "source is null");
831+
ObjectHelper.verifyPositive(maxConcurrency, "maxConcurrency");
830832
return RxJavaPlugins.onAssembly(new FlowableFlatMapPublisher(sources, MaybeToPublisher.instance(), false, maxConcurrency, Flowable.bufferSize()));
831833
}
832834

@@ -852,6 +854,7 @@ public static <T> Flowable<T> merge(Publisher<? extends MaybeSource<? extends T>
852854
@SchedulerSupport(SchedulerSupport.NONE)
853855
@SuppressWarnings({ "unchecked", "rawtypes" })
854856
public static <T> Maybe<T> merge(MaybeSource<? extends MaybeSource<? extends T>> source) {
857+
ObjectHelper.requireNonNull(source, "source is null");
855858
return RxJavaPlugins.onAssembly(new MaybeFlatten(source, Functions.identity()));
856859
}
857860

@@ -1028,6 +1031,9 @@ public static <T> Flowable<T> mergeArray(MaybeSource<? extends T>... sources) {
10281031
@CheckReturnValue
10291032
@SchedulerSupport(SchedulerSupport.NONE)
10301033
public static <T> Flowable<T> mergeArrayDelayError(MaybeSource<? extends T>... sources) {
1034+
if (sources.length == 0) {
1035+
return Flowable.empty();
1036+
}
10311037
return Flowable.fromArray(sources).flatMap((Function)MaybeToPublisher.instance(), true, sources.length);
10321038
}
10331039

@@ -1309,6 +1315,9 @@ public static <T> Single<Boolean> sequenceEqual(MaybeSource<? extends T> source1
13091315
@SchedulerSupport(SchedulerSupport.NONE)
13101316
public static <T> Single<Boolean> sequenceEqual(MaybeSource<? extends T> source1, MaybeSource<? extends T> source2,
13111317
BiPredicate<? super T, ? super T> isEqual) {
1318+
ObjectHelper.requireNonNull(source1, "source1 is null");
1319+
ObjectHelper.requireNonNull(source2, "source2 is null");
1320+
ObjectHelper.requireNonNull(isEqual, "isEqual is null");
13121321
return RxJavaPlugins.onAssembly(new MaybeEqualSingle<T>(source1, source2, isEqual));
13131322
}
13141323

@@ -2281,6 +2290,7 @@ public final Maybe<T> delay(long delay, TimeUnit unit, Scheduler scheduler) {
22812290
@SchedulerSupport(SchedulerSupport.NONE)
22822291
@BackpressureSupport(BackpressureKind.UNBOUNDED_IN)
22832292
public final <U, V> Maybe<T> delay(Publisher<U> delayIndicator) {
2293+
ObjectHelper.requireNonNull(delayIndicator, "delayIndicator is null");
22842294
return RxJavaPlugins.onAssembly(new MaybeDelayOtherPublisher<T, U>(this, delayIndicator));
22852295
}
22862296

@@ -2677,6 +2687,8 @@ public final <R> Maybe<R> flatMap(
26772687
@SchedulerSupport(SchedulerSupport.NONE)
26782688
public final <U, R> Maybe<R> flatMap(Function<? super T, ? extends MaybeSource<? extends U>> mapper,
26792689
BiFunction<? super T, ? super U, ? extends R> resultSelector) {
2690+
ObjectHelper.requireNonNull(mapper, "mapper is null");
2691+
ObjectHelper.requireNonNull(resultSelector, "resultSelector is null");
26802692
return RxJavaPlugins.onAssembly(new MaybeFlatMapBiSelector<T, U, R>(this, mapper, resultSelector));
26812693
}
26822694

@@ -2704,6 +2716,7 @@ public final <U, R> Maybe<R> flatMap(Function<? super T, ? extends MaybeSource<?
27042716
@CheckReturnValue
27052717
@SchedulerSupport(SchedulerSupport.NONE)
27062718
public final <U> Flowable<U> flattenAsFlowable(final Function<? super T, ? extends Iterable<? extends U>> mapper) {
2719+
ObjectHelper.requireNonNull(mapper, "mapper is null");
27072720
return RxJavaPlugins.onAssembly(new MaybeFlatMapIterableFlowable<T, U>(this, mapper));
27082721
}
27092722

@@ -2727,6 +2740,7 @@ public final <U> Flowable<U> flattenAsFlowable(final Function<? super T, ? exten
27272740
@CheckReturnValue
27282741
@SchedulerSupport(SchedulerSupport.NONE)
27292742
public final <U> Observable<U> flattenAsObservable(final Function<? super T, ? extends Iterable<? extends U>> mapper) {
2743+
ObjectHelper.requireNonNull(mapper, "mapper is null");
27302744
return RxJavaPlugins.onAssembly(new MaybeFlatMapIterableObservable<T, U>(this, mapper));
27312745
}
27322746

@@ -3691,6 +3705,9 @@ public final Disposable subscribe(Consumer<? super T> onSuccess, Consumer<? supe
36913705
@SchedulerSupport(SchedulerSupport.NONE)
36923706
public final Disposable subscribe(Consumer<? super T> onSuccess, Consumer<? super Throwable> onError,
36933707
Action onComplete) {
3708+
ObjectHelper.requireNonNull(onSuccess, "onSuccess is null");
3709+
ObjectHelper.requireNonNull(onError, "onError is null");
3710+
ObjectHelper.requireNonNull(onComplete, "onComplete is null");
36943711
return subscribeWith(new MaybeCallbackObserver<T>(onSuccess, onError, onComplete));
36953712
}
36963713

0 commit comments

Comments
 (0)