diff --git a/language-adaptors/rxjava-scala/src/main/scala/rx/lang/scala/RxImplicits.scala b/language-adaptors/rxjava-scala/src/main/scala/rx/lang/scala/RxImplicits.scala index 67fd4ec0f1..72e07a1315 100644 --- a/language-adaptors/rxjava-scala/src/main/scala/rx/lang/scala/RxImplicits.scala +++ b/language-adaptors/rxjava-scala/src/main/scala/rx/lang/scala/RxImplicits.scala @@ -106,7 +106,7 @@ object RxImplicits { * type never escapes the for-comprehension */ implicit class ScalaObservable[A](wrapped: Observable[A]) { - def map[B](f: A => B): Observable[B] = wrapped.map(f) + def map[B](f: A => B): Observable[B] = wrapped.map[B](f) def flatMap[B](f: A => Observable[B]): Observable[B] = wrapped.mapMany(f) def foreach(f: A => Unit): Unit = wrapped.toBlockingObservable.forEach(f) def withFilter(p: A => Boolean): WithFilter = new WithFilter(p) @@ -147,7 +147,7 @@ class UnitTestSuite extends JUnitSuite { class ObservableWithException(s: Subscription, values: String*) extends Observable[String] { var t: Thread = null - override def subscribe(observer: Observer[String]): Subscription = { + override def subscribe(observer: Observer[_ >: String]): Subscription = { println("ObservableWithException subscribed to ...") t = new Thread(new Runnable() { override def run() { @@ -248,7 +248,7 @@ class UnitTestSuite extends JUnitSuite { @Test def testFlattenMerge { val observable = Observable.from(Observable.from(1, 2, 3)) - val merged = Observable.merge(observable) + val merged = Observable.merge[Int](observable) assertSubscribeReceives(merged)(1, 2, 3) } @@ -272,6 +272,18 @@ class UnitTestSuite extends JUnitSuite { assertSubscribeReceives(synchronized)(1, 2, 3) } + @Test def testZip2() { + val colors: Observable[String] = Observable.from("red", "green", "blue") + val names: Observable[String] = Observable.from("lion-o", "cheetara", "panthro") + + case class Character(color: String, name: String) + + val cheetara = Character("green", "cheetara") + val panthro = Character("blue", "panthro") + val characters = Observable.zip[String, String, Character](colors, names, Character.apply _) + assertSubscribeReceives(characters)(cheetara, panthro) + } + @Test def testZip3() { val numbers = Observable.from(1, 2, 3) val colors = Observable.from("red", "green", "blue") @@ -283,7 +295,7 @@ class UnitTestSuite extends JUnitSuite { val cheetara = Character(2, "green", "cheetara") val panthro = Character(3, "blue", "panthro") - val characters = Observable.zip(numbers, colors, names, Character.apply _) + val characters = Observable.zip[Int, String, String, Character](numbers, colors, names, Character.apply _) assertSubscribeReceives(characters)(liono, cheetara, panthro) } @@ -299,7 +311,7 @@ class UnitTestSuite extends JUnitSuite { val cheetara = Character(2, "green", "cheetara", false) val panthro = Character(3, "blue", "panthro", false) - val characters = Observable.zip(numbers, colors, names, isLeader, Character.apply _) + val characters = Observable.zip[Int, String, String, Boolean, Character](numbers, colors, names, isLeader, Character.apply _) assertSubscribeReceives(characters)(liono, cheetara, panthro) } @@ -338,7 +350,8 @@ class UnitTestSuite extends JUnitSuite { @Test def testMap { val numbers = Observable.from(1, 2, 3, 4, 5, 6, 7, 8, 9) val mappedNumbers = ArrayBuffer.empty[Int] - numbers.map((x: Int) => x * x).subscribe((squareVal: Int) => { + val mapped: Observable[Int] = numbers map ((x: Int) => x * x) + mapped.subscribe((squareVal: Int) => { mappedNumbers.append(squareVal) }) assertEquals(List(1, 4, 9, 16, 25, 36, 49, 64, 81), mappedNumbers.toList) @@ -458,18 +471,9 @@ class UnitTestSuite extends JUnitSuite { assertSubscribeReceives(skipped)(3, 4) } - /** - * Both testTake and testTakeWhileWithIndex exposed a bug with unsubscribes not properly propagating. - * observable.take(2) produces onNext(first), onNext(second), and 4 onCompleteds - * it should produce onNext(first), onNext(second), and 1 onCompleted - * - * Switching to Observable.create(OperationTake.take(observable, 2)) works as expected - */ @Test def testTake { - import rx.operators._ - val observable = Observable.from(1, 2, 3, 4, 5) - val took = Observable.create(OperationTake.take(observable, 2)) + val took = observable.take(2) assertSubscribeReceives(took)(1, 2) } @@ -479,11 +483,11 @@ class UnitTestSuite extends JUnitSuite { assertSubscribeReceives(took)(1, 3, 5) } - /*@Test def testTakeWhileWithIndex { - val observable = Observable.from(1, 3, 5, 6, 7, 9, 11, 12, 13, 15, 17) - val took = observable.takeWhileWithIndex((i: Int, idx: Int) => isOdd(i) && idx > 4) - assertSubscribeReceives(took)(9, 11) - }*/ + @Test def testTakeWhileWithIndex { + val observable = Observable.from(1, 3, 5, 7, 9, 11, 12, 13, 15, 17) + val took = observable.takeWhileWithIndex((i: Int, idx: Int) => isOdd(i) && idx < 8) + assertSubscribeReceives(took)(1, 3, 5, 7, 9, 11) + } @Test def testTakeLast { val observable = Observable.from(1, 2, 3, 4, 5, 6, 7, 8, 9) @@ -559,7 +563,7 @@ class UnitTestSuite extends JUnitSuite { @Test def testFilterInForComprehension { val doubler = (i: Int) => Observable.from(i, i) - val filteredObservable = for { + val filteredObservable: Observable[Int] = for { i: Int <- Observable.from(1, 2, 3, 4) j: Int <- doubler(i) if isOdd(i) } yield j diff --git a/rxjava-contrib/rxjava-android/src/main/java/rx/android/concurrency/HandlerThreadScheduler.java b/rxjava-contrib/rxjava-android/src/main/java/rx/android/concurrency/HandlerThreadScheduler.java index a9cfb55fc9..cd1af987ae 100644 --- a/rxjava-contrib/rxjava-android/src/main/java/rx/android/concurrency/HandlerThreadScheduler.java +++ b/rxjava-contrib/rxjava-android/src/main/java/rx/android/concurrency/HandlerThreadScheduler.java @@ -1,11 +1,13 @@ package rx.android.concurrency; import android.os.Handler; + import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.ArgumentCaptor; import org.robolectric.RobolectricTestRunner; import org.robolectric.annotation.Config; + import rx.Scheduler; import rx.Subscription; import rx.operators.SafeObservableSubscription; @@ -39,7 +41,7 @@ public HandlerThreadScheduler(Handler handler) { * See {@link #schedule(Object, rx.util.functions.Func2, long, java.util.concurrent.TimeUnit)} */ @Override - public Subscription schedule(final T state, final Func2 action) { + public Subscription schedule(final T state, final Func2 action) { return schedule(state, action, 0L, TimeUnit.MILLISECONDS); } @@ -56,7 +58,7 @@ public Subscription schedule(final T state, final Func2 Subscription schedule(final T state, final Func2 action, long delayTime, TimeUnit unit) { + public Subscription schedule(final T state, final Func2 action, long delayTime, TimeUnit unit) { final SafeObservableSubscription subscription = new SafeObservableSubscription(); final Scheduler _scheduler = this; handler.postDelayed(new Runnable() { @@ -76,6 +78,7 @@ public static final class UnitTest { public void shouldScheduleImmediateActionOnHandlerThread() { final Handler handler = mock(Handler.class); final Object state = new Object(); + @SuppressWarnings("unchecked") final Func2 action = mock(Func2.class); Scheduler scheduler = new HandlerThreadScheduler(handler); @@ -94,6 +97,7 @@ public void shouldScheduleImmediateActionOnHandlerThread() { public void shouldScheduleDelayedActionOnHandlerThread() { final Handler handler = mock(Handler.class); final Object state = new Object(); + @SuppressWarnings("unchecked") final Func2 action = mock(Func2.class); Scheduler scheduler = new HandlerThreadScheduler(handler); diff --git a/rxjava-contrib/rxjava-swing/src/main/java/rx/concurrency/SwingScheduler.java b/rxjava-contrib/rxjava-swing/src/main/java/rx/concurrency/SwingScheduler.java index 2ce298c590..f2d10d69b0 100644 --- a/rxjava-contrib/rxjava-swing/src/main/java/rx/concurrency/SwingScheduler.java +++ b/rxjava-contrib/rxjava-swing/src/main/java/rx/concurrency/SwingScheduler.java @@ -55,7 +55,7 @@ private SwingScheduler() { } @Override - public Subscription schedule(final T state, final Func2 action) { + public Subscription schedule(final T state, final Func2 action) { final AtomicReference sub = new AtomicReference(); EventQueue.invokeLater(new Runnable() { @Override @@ -75,7 +75,7 @@ public void call() { } @Override - public Subscription schedule(final T state, final Func2 action, long dueTime, TimeUnit unit) { + public Subscription schedule(final T state, final Func2 action, long dueTime, TimeUnit unit) { final AtomicReference sub = new AtomicReference(); long delay = unit.toMillis(dueTime); assertThatTheDelayIsValidForTheSwingTimer(delay); @@ -113,7 +113,7 @@ public void call() { } @Override - public Subscription schedulePeriodically(T state, final Func2 action, long initialDelay, long period, TimeUnit unit) { + public Subscription schedulePeriodically(T state, final Func2 action, long initialDelay, long period, TimeUnit unit) { final AtomicReference timer = new AtomicReference(); final long delay = unit.toMillis(period); diff --git a/rxjava-contrib/rxjava-swing/src/main/java/rx/swing/sources/AbstractButtonSource.java b/rxjava-contrib/rxjava-swing/src/main/java/rx/swing/sources/AbstractButtonSource.java index ef3612b080..b51bb60b16 100644 --- a/rxjava-contrib/rxjava-swing/src/main/java/rx/swing/sources/AbstractButtonSource.java +++ b/rxjava-contrib/rxjava-swing/src/main/java/rx/swing/sources/AbstractButtonSource.java @@ -42,9 +42,9 @@ public enum AbstractButtonSource { ; // no instances * @see SwingObservable.fromButtonAction */ public static Observable fromActionOf(final AbstractButton button) { - return Observable.create(new Func1, Subscription>() { + return Observable.create(new Func1, Subscription>() { @Override - public Subscription call(final Observer observer) { + public Subscription call(final Observer observer) { final ActionListener listener = new ActionListener() { @Override public void actionPerformed(ActionEvent e) { diff --git a/rxjava-contrib/rxjava-swing/src/main/java/rx/swing/sources/ComponentEventSource.java b/rxjava-contrib/rxjava-swing/src/main/java/rx/swing/sources/ComponentEventSource.java index 4b1917454a..cbb0008b5f 100644 --- a/rxjava-contrib/rxjava-swing/src/main/java/rx/swing/sources/ComponentEventSource.java +++ b/rxjava-contrib/rxjava-swing/src/main/java/rx/swing/sources/ComponentEventSource.java @@ -36,9 +36,9 @@ public enum ComponentEventSource { ; // no instances * @see SwingObservable.fromComponentEvents */ public static Observable fromComponentEventsOf(final Component component) { - return Observable.create(new Func1, Subscription>() { + return Observable.create(new Func1, Subscription>() { @Override - public Subscription call(final Observer observer) { + public Subscription call(final Observer observer) { final ComponentListener listener = new ComponentListener() { @Override public void componentHidden(ComponentEvent event) { diff --git a/rxjava-contrib/rxjava-swing/src/main/java/rx/swing/sources/KeyEventSource.java b/rxjava-contrib/rxjava-swing/src/main/java/rx/swing/sources/KeyEventSource.java index 291e0202aa..eba7406331 100644 --- a/rxjava-contrib/rxjava-swing/src/main/java/rx/swing/sources/KeyEventSource.java +++ b/rxjava-contrib/rxjava-swing/src/main/java/rx/swing/sources/KeyEventSource.java @@ -50,9 +50,9 @@ public enum KeyEventSource { ; // no instances * @see SwingObservable.fromKeyEvents(Component) */ public static Observable fromKeyEventsOf(final Component component) { - return Observable.create(new Func1, Subscription>() { + return Observable.create(new Func1, Subscription>() { @Override - public Subscription call(final Observer observer) { + public Subscription call(final Observer observer) { final KeyListener listener = new KeyListener() { @Override public void keyPressed(KeyEvent event) { diff --git a/rxjava-contrib/rxjava-swing/src/main/java/rx/swing/sources/MouseEventSource.java b/rxjava-contrib/rxjava-swing/src/main/java/rx/swing/sources/MouseEventSource.java index 7bfe4efa3e..32a12bd206 100644 --- a/rxjava-contrib/rxjava-swing/src/main/java/rx/swing/sources/MouseEventSource.java +++ b/rxjava-contrib/rxjava-swing/src/main/java/rx/swing/sources/MouseEventSource.java @@ -33,9 +33,9 @@ public enum MouseEventSource { ; // no instances * @see SwingObservable.fromMouseEvents */ public static Observable fromMouseEventsOf(final Component component) { - return Observable.create(new Func1, Subscription>() { + return Observable.create(new Func1, Subscription>() { @Override - public Subscription call(final Observer observer) { + public Subscription call(final Observer observer) { final MouseListener listener = new MouseListener() { @Override public void mouseClicked(MouseEvent event) { @@ -78,9 +78,9 @@ public void call() { * @see SwingObservable.fromMouseMotionEvents */ public static Observable fromMouseMotionEventsOf(final Component component) { - return Observable.create(new Func1, Subscription>() { + return Observable.create(new Func1, Subscription>() { @Override - public Subscription call(final Observer observer) { + public Subscription call(final Observer observer) { final MouseMotionListener listener = new MouseMotionListener() { @Override public void mouseDragged(MouseEvent event) { diff --git a/rxjava-core/src/main/java/rx/Observable.java b/rxjava-core/src/main/java/rx/Observable.java index 50aef90ce9..c21b62b300 100644 --- a/rxjava-core/src/main/java/rx/Observable.java +++ b/rxjava-core/src/main/java/rx/Observable.java @@ -83,6 +83,11 @@ import rx.util.functions.Func2; import rx.util.functions.Func3; import rx.util.functions.Func4; +import rx.util.functions.Func5; +import rx.util.functions.Func6; +import rx.util.functions.Func7; +import rx.util.functions.Func8; +import rx.util.functions.Func9; import rx.util.functions.FuncN; import rx.util.functions.Function; @@ -108,7 +113,7 @@ public class Observable { private final static RxJavaObservableExecutionHook hook = RxJavaPlugins.getInstance().getObservableExecutionHook(); - private final Func1, Subscription> onSubscribe; + private final Func1, ? extends Subscription> onSubscribe; /** * Observable with Function to execute when subscribed to. @@ -119,7 +124,7 @@ public class Observable { * @param onSubscribe * {@link Func1} to be executed when {@link #subscribe(Observer)} is called. */ - protected Observable(Func1, Subscription> onSubscribe) { + protected Observable(Func1, ? extends Subscription> onSubscribe) { this.onSubscribe = onSubscribe; } @@ -155,9 +160,9 @@ protected Observable() { * @throws IllegalArgumentException * if the {@link Observer} provided as the argument to {@code subscribe()} is {@code null} */ - public Subscription subscribe(Observer observer) { + public Subscription subscribe(Observer observer) { // allow the hook to intercept and/or decorate - Func1, Subscription> onSubscribeFunction = hook.onSubscribeStart(this, onSubscribe); + Func1, ? extends Subscription> onSubscribeFunction = hook.onSubscribeStart(this, onSubscribe); // validate and proceed if (observer == null) { throw new IllegalArgumentException("observer can not be null"); @@ -233,7 +238,7 @@ public Subscription subscribe(Observer observer) { * @throws IllegalArgumentException * if an argument to {@code subscribe()} is {@code null} */ - public Subscription subscribe(Observer observer, Scheduler scheduler) { + public Subscription subscribe(Observer observer, Scheduler scheduler) { return subscribeOn(scheduler).subscribe(observer); } @@ -242,12 +247,12 @@ public Subscription subscribe(Observer observer, Scheduler scheduler) { *

* See https://github.com/Netflix/RxJava/issues/216 for discussion on "Guideline 6.4: Protect calls to user code from within an operator" */ - private Subscription protectivelyWrapAndSubscribe(Observer o) { + private Subscription protectivelyWrapAndSubscribe(Observer o) { SafeObservableSubscription subscription = new SafeObservableSubscription(); return subscription.wrap(subscribe(new SafeObserver(subscription, o))); } - public Subscription subscribe(final Action1 onNext) { + public Subscription subscribe(final Action1 onNext) { if (onNext == null) { throw new IllegalArgumentException("onNext can not be null"); } @@ -278,11 +283,11 @@ public void onNext(T args) { }); } - public Subscription subscribe(final Action1 onNext, Scheduler scheduler) { + public Subscription subscribe(final Action1 onNext, Scheduler scheduler) { return subscribeOn(scheduler).subscribe(onNext); } - public Subscription subscribe(final Action1 onNext, final Action1 onError) { + public Subscription subscribe(final Action1 onNext, final Action1 onError) { if (onNext == null) { throw new IllegalArgumentException("onNext can not be null"); } @@ -316,11 +321,11 @@ public void onNext(T args) { }); } - public Subscription subscribe(final Action1 onNext, final Action1 onError, Scheduler scheduler) { + public Subscription subscribe(final Action1 onNext, final Action1 onError, Scheduler scheduler) { return subscribeOn(scheduler).subscribe(onNext, onError); } - public Subscription subscribe(final Action1 onNext, final Action1 onError, final Action0 onComplete) { + public Subscription subscribe(final Action1 onNext, final Action1 onError, final Action0 onComplete) { if (onNext == null) { throw new IllegalArgumentException("onNext can not be null"); } @@ -357,7 +362,7 @@ public void onNext(T args) { }); } - public Subscription subscribe(final Action1 onNext, final Action1 onError, final Action0 onComplete, Scheduler scheduler) { + public Subscription subscribe(final Action1 onNext, final Action1 onError, final Action0 onComplete, Scheduler scheduler) { return subscribeOn(scheduler).subscribe(onNext, onError, onComplete); } @@ -397,10 +402,10 @@ private void handleError(Throwable e) { */ private static class NeverObservable extends Observable { public NeverObservable() { - super(new Func1, Subscription>() { + super(new Func1, Subscription>() { @Override - public Subscription call(Observer t1) { + public Subscription call(Observer t1) { return Subscriptions.empty(); } @@ -417,7 +422,7 @@ public Subscription call(Observer t1) { private static class ThrowObservable extends Observable { public ThrowObservable(final Throwable exception) { - super(new Func1, Subscription>() { + super(new Func1, Subscription>() { /** * Accepts an {@link Observer} and calls its {@link Observer#onError onError} method. @@ -427,7 +432,7 @@ public ThrowObservable(final Throwable exception) { * @return a reference to the subscription */ @Override - public Subscription call(Observer observer) { + public Subscription call(Observer observer) { observer.onError(exception); return Subscriptions.empty(); } @@ -461,7 +466,7 @@ public Subscription call(Observer observer) { * @return an Observable that, when an {@link Observer} subscribes to it, will execute the given * function */ - public static Observable create(Func1, Subscription> func) { + public static Observable create(Func1, ? extends Subscription> func) { return new Observable(func); } @@ -510,7 +515,7 @@ public static Observable error(Throwable exception) { * emitted by the resulting Observable * @return an Observable that emits each item in the source {@link Iterable} sequence */ - public static Observable from(Iterable iterable) { + public static Observable from(Iterable iterable) { return create(OperationToObservableIterable.toObservableIterable(iterable)); } @@ -574,7 +579,7 @@ public static Observable range(int start, int count) { * @return an Observable whose {@link Observer}s trigger an invocation of the given Observable * factory function */ - public static Observable defer(Func0> observableFactory) { + public static Observable defer(Func0> observableFactory) { return create(OperationDefer.defer(observableFactory)); } @@ -617,7 +622,7 @@ public static Observable just(T value) { * @return an Observable that emits items that are the result of flattening the {@code source} list of Observables * @see MSDN: Observable.Merge */ - public static Observable merge(List> source) { + public static Observable merge(List> source) { return create(OperationMerge.merge(source)); } @@ -636,7 +641,7 @@ public static Observable merge(List> source) { * by the Observables emitted by the {@code source} Observable * @see MSDN: Observable.Merge Method */ - public static Observable merge(Observable> source) { + public static Observable merge(Observable> source) { return create(OperationMerge.merge(source)); } @@ -654,7 +659,7 @@ public static Observable merge(Observable> source) { * by the {@code source} Observables * @see MSDN: Observable.Merge Method */ - public static Observable merge(Observable... source) { + public static Observable merge(Observable... source) { return create(OperationMerge.merge(source)); } @@ -670,7 +675,7 @@ public static Observable merge(Observable... source) { * the {@code source} Observables, one after the other * @see MSDN: Observable.Concat Method */ - public static Observable concat(Observable... source) { + public static Observable concat(Observable... source) { return create(OperationConcat.concat(source)); } @@ -694,7 +699,7 @@ public static Observable concat(Observable... source) { * the {@code source} list of Observables * @see MSDN: Observable.Merge Method */ - public static Observable mergeDelayError(List> source) { + public static Observable mergeDelayError(List> source) { return create(OperationMergeDelayError.mergeDelayError(source)); } @@ -718,7 +723,7 @@ public static Observable mergeDelayError(List> source) { * the Observables emitted by the {@code source} Observable * @see MSDN: Observable.Merge Method */ - public static Observable mergeDelayError(Observable> source) { + public static Observable mergeDelayError(Observable> source) { return create(OperationMergeDelayError.mergeDelayError(source)); } @@ -742,7 +747,7 @@ public static Observable mergeDelayError(Observable> source * the {@code source} Observables * @see MSDN: Observable.Merge Method */ - public static Observable mergeDelayError(Observable... source) { + public static Observable mergeDelayError(Observable... source) { return create(OperationMergeDelayError.mergeDelayError(source)); } @@ -772,7 +777,7 @@ public static Observable never() { * @return an Observable that emits only the items emitted by the most recently published * Observable */ - public static Observable switchDo(Observable> sequenceOfSequences) { + public static Observable switchDo(Observable> sequenceOfSequences) { // TODO should this static remain? I have left it because it is an Observable return create(OperationSwitch.switchDo(sequenceOfSequences)); } @@ -792,7 +797,7 @@ public static Observable switchDo(Observable> sequenceOfSeq public Observable switchDo() { // TODO can we come up with a better name than this? It should be 'switch' but that is reserved. // Perhaps 'switchOnNext'? - return create(OperationSwitch.switchDo((Observable>) this)); + return create(OperationSwitch.switchDo((Observable>) this)); } /** @@ -812,7 +817,7 @@ public Observable switchDo() { * @return an Observable that is a chronologically well-behaved version of the source * Observable, and that synchronously notifies its {@link Observer}s */ - public static Observable synchronize(Observable observable) { + public static Observable synchronize(Observable observable) { return create(OperationSynchronize.synchronize(observable)); } @@ -845,7 +850,7 @@ public Observable> timestamp() { * be emitted by the resulting Observable * @return an Observable that emits the item from the source Future */ - public static Observable from(Future future) { + public static Observable from(Future future) { return create(OperationToObservableFuture.toObservableFuture(future)); } @@ -868,7 +873,7 @@ public static Observable from(Future future) { * be emitted by the resulting Observable * @return an Observable that emits the item from the source Future */ - public static Observable from(Future future, Scheduler scheduler) { + public static Observable from(Future future, Scheduler scheduler) { return create(OperationToObservableFuture.toObservableFuture(future)).subscribeOn(scheduler); } @@ -894,7 +899,7 @@ public static Observable from(Future future, Scheduler scheduler) { * be emitted by the resulting Observable * @return an Observable that emits the item from the source {@link Future} */ - public static Observable from(Future future, long timeout, TimeUnit unit) { + public static Observable from(Future future, long timeout, TimeUnit unit) { return create(OperationToObservableFuture.toObservableFuture(future, timeout, unit)); } @@ -908,18 +913,17 @@ public static Observable from(Future future, long timeout, TimeUnit un * The resulting {@code Observable} returned from {@code zip} will invoke {@link Observer#onNext onNext} as many times as the number of {@code onNext} invocations * of the source Observable that emits the fewest items. * - * @param w0 + * @param o1 * one source Observable - * @param w1 + * @param o2 * another source Observable - * @param reduceFunction - * a function that, when applied to a pair of items, each emitted by one of the two - * source Observables, results in an item that will be emitted by the resulting - * Observable + * @param zipFunction + * a function that, when applied to an item emitted by each of the source + * Observables, results in an item that will be emitted by the resulting Observable * @return an Observable that emits the zipped results */ - public static Observable zip(Observable w0, Observable w1, Func2 reduceFunction) { - return create(OperationZip.zip(w0, w1, reduceFunction)); + public static Observable zip(Observable o1, Observable o2, Func2 zipFunction) { + return create(OperationZip.zip(o1, o2, zipFunction)); } /** @@ -937,7 +941,7 @@ public static Observable zip(Observable w0, Observable w1 * @return an Observable that emits Booleans that indicate whether the corresponding items * emitted by the source Observables are equal */ - public static Observable sequenceEqual(Observable first, Observable second) { + public static Observable sequenceEqual(Observable first, Observable second) { return sequenceEqual(first, second, new Func2() { @Override public Boolean call(T first, T second) { @@ -964,7 +968,7 @@ public Boolean call(T first, T second) { * @return an Observable that emits Booleans that indicate whether the corresponding items * emitted by the source Observables are equal */ - public static Observable sequenceEqual(Observable first, Observable second, Func2 equality) { + public static Observable sequenceEqual(Observable first, Observable second, Func2 equality) { return zip(first, second, equality); } @@ -981,19 +985,19 @@ public static Observable sequenceEqual(Observable first, Observa * The resulting {@code Observable} returned from {@code zip} will invoke {@link Observer#onNext onNext} as many times as the number of {@code onNext} invocations * of the source Observable that emits the fewest items. * - * @param w0 + * @param o1 * one source Observable - * @param w1 - * another source Observable - * @param w2 + * @param o2 + * a second source Observable + * @param o3 * a third source Observable - * @param function + * @param zipFunction * a function that, when applied to an item emitted by each of the source * Observables, results in an item that will be emitted by the resulting Observable * @return an Observable that emits the zipped results */ - public static Observable zip(Observable w0, Observable w1, Observable w2, Func3 function) { - return create(OperationZip.zip(w0, w1, w2, function)); + public static Observable zip(Observable o1, Observable o2, Observable o3, Func3 zipFunction) { + return create(OperationZip.zip(o1, o2, o3, zipFunction)); } /** @@ -1010,21 +1014,210 @@ public static Observable zip(Observable w0, Observable} returned from {@code zip} will invoke {@link Observer#onNext onNext} as many times as the number of {@code onNext} invocations * of the source Observable that emits the fewest items. * - * @param w0 + * @param o1 * one source Observable - * @param w1 - * another source Observable - * @param w2 + * @param o2 + * a second source Observable + * @param o3 + * a third source Observable + * @param o4 + * a fourth source Observable + * @param zipFunction + * a function that, when applied to an item emitted by each of the source + * Observables, results in an item that will be emitted by the resulting Observable + * @return an Observable that emits the zipped results + */ + public static Observable zip(Observable o1, Observable o2, Observable o3, Observable o4, Func4 zipFunction) { + return create(OperationZip.zip(o1, o2, o3, o4, zipFunction)); + } + + /** + * Returns an Observable that emits the results of a function of your choosing applied to + * combinations of four items emitted, in sequence, by four other Observables. + *

+ * + *

{@code zip} applies this function in strict sequence, so the first item emitted by the + * new Observable will be the result of the function applied to the first item emitted by {@code w0}, the first item emitted by {@code w1}, the first item emitted by {@code w2}, and the first item + * emitted by {@code w3}; the second item emitted by + * the new Observable will be the result of the function applied to the second item emitted by + * each of those Observables; and so forth. + *

+ * The resulting {@code Observable} returned from {@code zip} will invoke {@link Observer#onNext onNext} as many times as the number of {@code onNext} invocations + * of the source Observable that emits the fewest items. + * + * @param o1 + * one source Observable + * @param o2 + * a second source Observable + * @param o3 + * a third source Observable + * @param o4 + * a fourth source Observable + * @param o5 + * a fifth source Observable + * @param zipFunction + * a function that, when applied to an item emitted by each of the source + * Observables, results in an item that will be emitted by the resulting Observable + * @return an Observable that emits the zipped results + */ + public static Observable zip(Observable o1, Observable o2, Observable o3, Observable o4, Observable o5, Func5 zipFunction) { + return create(OperationZip.zip(o1, o2, o3, o4, o5, zipFunction)); + } + + /** + * Returns an Observable that emits the results of a function of your choosing applied to + * combinations of four items emitted, in sequence, by four other Observables. + *

+ * + *

{@code zip} applies this function in strict sequence, so the first item emitted by the + * new Observable will be the result of the function applied to the first item emitted by {@code w0}, the first item emitted by {@code w1}, the first item emitted by {@code w2}, and the first item + * emitted by {@code w3}; the second item emitted by + * the new Observable will be the result of the function applied to the second item emitted by + * each of those Observables; and so forth. + *

+ * The resulting {@code Observable} returned from {@code zip} will invoke {@link Observer#onNext onNext} as many times as the number of {@code onNext} invocations + * of the source Observable that emits the fewest items. + * + * @param o1 + * one source Observable + * @param o2 + * a second source Observable + * @param o3 + * a third source Observable + * @param o4 + * a fourth source Observable + * @param o5 + * a fifth source Observable + * @param o6 + * a sixth source Observable + * @param zipFunction + * a function that, when applied to an item emitted by each of the source + * Observables, results in an item that will be emitted by the resulting Observable + * @return an Observable that emits the zipped results + */ + public static Observable zip(Observable o1, Observable o2, Observable o3, Observable o4, Observable o5, Observable o6, + Func6 zipFunction) { + return create(OperationZip.zip(o1, o2, o3, o4, o5, o6, zipFunction)); + } + + /** + * Returns an Observable that emits the results of a function of your choosing applied to + * combinations of four items emitted, in sequence, by four other Observables. + *

+ * + *

{@code zip} applies this function in strict sequence, so the first item emitted by the + * new Observable will be the result of the function applied to the first item emitted by {@code w0}, the first item emitted by {@code w1}, the first item emitted by {@code w2}, and the first item + * emitted by {@code w3}; the second item emitted by + * the new Observable will be the result of the function applied to the second item emitted by + * each of those Observables; and so forth. + *

+ * The resulting {@code Observable} returned from {@code zip} will invoke {@link Observer#onNext onNext} as many times as the number of {@code onNext} invocations + * of the source Observable that emits the fewest items. + * + * @param o1 + * one source Observable + * @param o2 + * a second source Observable + * @param o3 + * a third source Observable + * @param o4 + * a fourth source Observable + * @param o5 + * a fifth source Observable + * @param o6 + * a sixth source Observable + * @param o7 + * a seventh source Observable + * @param zipFunction + * a function that, when applied to an item emitted by each of the source + * Observables, results in an item that will be emitted by the resulting Observable + * @return an Observable that emits the zipped results + */ + public static Observable zip(Observable o1, Observable o2, Observable o3, Observable o4, Observable o5, Observable o6, Observable o7, + Func7 zipFunction) { + return create(OperationZip.zip(o1, o2, o3, o4, o5, o6, o7, zipFunction)); + } + + /** + * Returns an Observable that emits the results of a function of your choosing applied to + * combinations of four items emitted, in sequence, by four other Observables. + *

+ * + *

{@code zip} applies this function in strict sequence, so the first item emitted by the + * new Observable will be the result of the function applied to the first item emitted by {@code w0}, the first item emitted by {@code w1}, the first item emitted by {@code w2}, and the first item + * emitted by {@code w3}; the second item emitted by + * the new Observable will be the result of the function applied to the second item emitted by + * each of those Observables; and so forth. + *

+ * The resulting {@code Observable} returned from {@code zip} will invoke {@link Observer#onNext onNext} as many times as the number of {@code onNext} invocations + * of the source Observable that emits the fewest items. + * + * @param o1 + * one source Observable + * @param o2 + * a second source Observable + * @param o3 + * a third source Observable + * @param o4 + * a fourth source Observable + * @param o5 + * a fifth source Observable + * @param o6 + * a sixth source Observable + * @param o7 + * a seventh source Observable + * @param o8 + * an eighth source Observable + * @param zipFunction + * a function that, when applied to an item emitted by each of the source + * Observables, results in an item that will be emitted by the resulting Observable + * @return an Observable that emits the zipped results + */ + public static Observable zip(Observable o1, Observable o2, Observable o3, Observable o4, Observable o5, Observable o6, Observable o7, Observable o8, + Func8 zipFunction) { + return create(OperationZip.zip(o1, o2, o3, o4, o5, o6, o7, o8, zipFunction)); + } + + /** + * Returns an Observable that emits the results of a function of your choosing applied to + * combinations of four items emitted, in sequence, by four other Observables. + *

+ * + *

{@code zip} applies this function in strict sequence, so the first item emitted by the + * new Observable will be the result of the function applied to the first item emitted by {@code w0}, the first item emitted by {@code w1}, the first item emitted by {@code w2}, and the first item + * emitted by {@code w3}; the second item emitted by + * the new Observable will be the result of the function applied to the second item emitted by + * each of those Observables; and so forth. + *

+ * The resulting {@code Observable} returned from {@code zip} will invoke {@link Observer#onNext onNext} as many times as the number of {@code onNext} invocations + * of the source Observable that emits the fewest items. + * + * @param o1 + * one source Observable + * @param o2 + * a second source Observable + * @param o3 * a third source Observable - * @param w3 + * @param o4 * a fourth source Observable - * @param reduceFunction + * @param o5 + * a fifth source Observable + * @param o6 + * a sixth source Observable + * @param o7 + * a seventh source Observable + * @param o8 + * an eighth source Observable + * @param o9 + * a ninth source Observable + * @param zipFunction * a function that, when applied to an item emitted by each of the source * Observables, results in an item that will be emitted by the resulting Observable * @return an Observable that emits the zipped results */ - public static Observable zip(Observable w0, Observable w1, Observable w2, Observable w3, Func4 reduceFunction) { - return create(OperationZip.zip(w0, w1, w2, w3, reduceFunction)); + public static Observable zip(Observable o1, Observable o2, Observable o3, Observable o4, Observable o5, Observable o6, Observable o7, Observable o8, + Observable o9, Func9 zipFunction) { + return create(OperationZip.zip(o1, o2, o3, o4, o5, o6, o7, o8, o9, zipFunction)); } /** @@ -1033,30 +1226,71 @@ public static Observable zip(Observable w0, Observabl *

* * - * @param w0 + * @param o1 * The first source observable. - * @param w1 + * @param o2 * The second source observable. * @param combineFunction * The aggregation function used to combine the source observable values. * @return An Observable that combines the source Observables with the given combine function */ - public static Observable combineLatest(Observable w0, Observable w1, Func2 combineFunction) { - return create(OperationCombineLatest.combineLatest(w0, w1, combineFunction)); + public static Observable combineLatest(Observable o1, Observable o2, Func2 combineFunction) { + return create(OperationCombineLatest.combineLatest(o1, o2, combineFunction)); + } + + /** + * @see #combineLatest(Observable, Observable, Func2) + */ + public static Observable combineLatest(Observable o1, Observable o2, Observable o3, Func3 combineFunction) { + return create(OperationCombineLatest.combineLatest(o1, o2, o3, combineFunction)); + } + + /** + * @see #combineLatest(Observable, Observable, Func2) + */ + public static Observable combineLatest(Observable o1, Observable o2, Observable o3, Observable o4, + Func4 combineFunction) { + return create(OperationCombineLatest.combineLatest(o1, o2, o3, o4, combineFunction)); + } + + /** + * @see #combineLatest(Observable, Observable, Func2) + */ + public static Observable combineLatest(Observable o1, Observable o2, Observable o3, Observable o4, Observable o5, + Func5 combineFunction) { + return create(OperationCombineLatest.combineLatest(o1, o2, o3, o4, o5, combineFunction)); + } + + /** + * @see #combineLatest(Observable, Observable, Func2) + */ + public static Observable combineLatest(Observable o1, Observable o2, Observable o3, Observable o4, Observable o5, Observable o6, + Func6 combineFunction) { + return create(OperationCombineLatest.combineLatest(o1, o2, o3, o4, o5, o6, combineFunction)); + } + + /** + * @see #combineLatest(Observable, Observable, Func2) + */ + public static Observable combineLatest(Observable o1, Observable o2, Observable o3, Observable o4, Observable o5, Observable o6, Observable o7, + Func7 combineFunction) { + return create(OperationCombineLatest.combineLatest(o1, o2, o3, o4, o5, o6, o7, combineFunction)); } /** * @see #combineLatest(Observable, Observable, Func2) */ - public static Observable combineLatest(Observable w0, Observable w1, Observable w2, Func3 combineFunction) { - return create(OperationCombineLatest.combineLatest(w0, w1, w2, combineFunction)); + public static Observable combineLatest(Observable o1, Observable o2, Observable o3, Observable o4, Observable o5, Observable o6, Observable o7, Observable o8, + Func8 combineFunction) { + return create(OperationCombineLatest.combineLatest(o1, o2, o3, o4, o5, o6, o7, o8, combineFunction)); } /** * @see #combineLatest(Observable, Observable, Func2) */ - public static Observable combineLatest(Observable w0, Observable w1, Observable w2, Observable w3, Func4 combineFunction) { - return create(OperationCombineLatest.combineLatest(w0, w1, w2, w3, combineFunction)); + public static Observable combineLatest(Observable o1, Observable o2, Observable o3, Observable o4, Observable o5, Observable o6, Observable o7, Observable o8, Observable o9, + Func9 combineFunction) { + return create(OperationCombineLatest.combineLatest(o1, o2, o3, o4, o5, o6, o7, o8, o9, combineFunction)); } /** @@ -1074,7 +1308,7 @@ public static Observable combineLatest(Observable w0, * An {@link Observable} which produces connected non-overlapping buffers, which are emitted * when the current {@link Observable} created with the {@link Func0} argument produces a {@link BufferClosing} object. */ - public Observable> buffer(Func0> bufferClosingSelector) { + public Observable> buffer(Func0> bufferClosingSelector) { return create(OperationBuffer.buffer(this, bufferClosingSelector)); } @@ -1096,7 +1330,7 @@ public Observable> buffer(Func0> bufferClosing * @return * An {@link Observable} which produces buffers which are created and emitted when the specified {@link Observable}s publish certain objects. */ - public Observable> buffer(Observable bufferOpenings, Func1> bufferClosingSelector) { + public Observable> buffer(Observable bufferOpenings, Func1> bufferClosingSelector) { return create(OperationBuffer.buffer(this, bufferOpenings, bufferClosingSelector)); } @@ -1278,16 +1512,16 @@ public Observable> buffer(long timespan, long timeshift, TimeUnit unit, * * @param ws * An Observable of source Observables - * @param reduceFunction + * @param zipFunction * a function that, when applied to an item emitted by each of the source * Observables, results in an item that will be emitted by the resulting Observable * @return an Observable that emits the zipped results */ - public static Observable zip(Observable> ws, final FuncN reduceFunction) { - return ws.toList().mapMany(new Func1>, Observable>() { + public static Observable zip(Observable> ws, final FuncN zipFunction) { + return ws.toList().mapMany(new Func1>, Observable>() { @Override - public Observable call(List> wsList) { - return create(OperationZip.zip(wsList, reduceFunction)); + public Observable call(List> wsList) { + return create(OperationZip.zip(wsList, zipFunction)); } }); } @@ -1307,13 +1541,13 @@ public Observable call(List> wsList) { * * @param ws * A collection of source Observables - * @param reduceFunction + * @param zipFunction * a function that, when applied to an item emitted by each of the source * Observables, results in an item that will be emitted by the resulting Observable * @return an Observable that emits the zipped results */ - public static Observable zip(Collection> ws, FuncN reduceFunction) { - return create(OperationZip.zip(ws, reduceFunction)); + public static Observable zip(Collection> ws, FuncN zipFunction) { + return create(OperationZip.zip(ws, zipFunction)); } /** @@ -1325,7 +1559,7 @@ public static Observable zip(Collection> ws, FuncN reduc * @return an Observable that emits only those items in the original Observable that the filter * evaluates as {@code true} */ - public Observable filter(Func1 predicate) { + public Observable filter(Func1 predicate) { return create(OperationFilter.filter(this, predicate)); } @@ -1360,7 +1594,7 @@ public Observable finallyDo(Action0 action) { * obtained from this transformation. * @see #mapMany(Func1) */ - public Observable flatMap(Func1> func) { + public Observable flatMap(Func1> func) { return mapMany(func); } @@ -1374,7 +1608,7 @@ public Observable flatMap(Func1> func) { * evaluates as {@code true} * @see #filter(Func1) */ - public Observable where(Func1 predicate) { + public Observable where(Func1 predicate) { return filter(predicate); } @@ -1389,7 +1623,7 @@ public Observable where(Func1 predicate) { * @return an Observable that emits the items from the source Observable, transformed by the * given function */ - public Observable map(Func1 func) { + public Observable map(Func1 func) { return create(OperationMap.map(this, func)); } @@ -1410,7 +1644,7 @@ public Observable map(Func1 func) { * obtained from this transformation. * @see #flatMap(Func1) */ - public Observable mapMany(Func1> func) { + public Observable mapMany(Func1> func) { return create(OperationMap.mapMany(this, func)); } @@ -1469,7 +1703,7 @@ public Observable observeOn(Scheduler scheduler) { */ @SuppressWarnings("unchecked") public Observable dematerialize() { - return create(OperationDematerialize.dematerialize((Observable>) this)); + return create(OperationDematerialize.dematerialize((Observable>) this)); } /** @@ -1496,7 +1730,7 @@ public Observable dematerialize() { * encounters an error * @return the original Observable, with appropriately modified behavior */ - public Observable onErrorResumeNext(final Func1> resumeFunction) { + public Observable onErrorResumeNext(final Func1> resumeFunction) { return create(OperationOnErrorResumeNextViaFunction.onErrorResumeNextViaFunction(this, resumeFunction)); } @@ -1524,7 +1758,7 @@ public Observable onErrorResumeNext(final Func1> res * encounters an error * @return the original Observable, with appropriately modified behavior */ - public Observable onErrorResumeNext(final Observable resumeSequence) { + public Observable onErrorResumeNext(final Observable resumeSequence) { return create(OperationOnErrorResumeNextViaObservable.onErrorResumeNextViaObservable(this, resumeSequence)); } @@ -1554,7 +1788,7 @@ public Observable onErrorResumeNext(final Observable resumeSequence) { * encounters an error * @return the original Observable, with appropriately modified behavior */ - public Observable onExceptionResumeNext(final Observable resumeSequence) { + public Observable onExceptionResumeNext(final Observable resumeSequence) { return create(OperationOnExceptionResumeNextViaObservable.onExceptionResumeNextViaObservable(this, resumeSequence)); } @@ -1581,7 +1815,7 @@ public Observable onExceptionResumeNext(final Observable resumeSequence) { * Observable encounters an error * @return the original Observable with appropriately modified behavior */ - public Observable onErrorReturn(Func1 resumeFunction) { + public Observable onErrorReturn(Func1 resumeFunction) { return create(OperationOnErrorReturn.onErrorReturn(this, resumeFunction)); } @@ -1606,7 +1840,7 @@ public Observable onErrorReturn(Func1 resumeFunction) { * @see MSDN: Observable.Aggregate * @see Wikipedia: Fold (higher-order function) */ - public Observable reduce(Func2 accumulator) { + public Observable reduce(Func2 accumulator) { return create(OperationScan.scan(this, accumulator)).takeLast(1); } @@ -1663,7 +1897,7 @@ public ConnectableObservable publish() { * * @see #reduce(Func2) */ - public Observable aggregate(Func2 accumulator) { + public Observable aggregate(Func2 accumulator) { return reduce(accumulator); } @@ -1690,7 +1924,7 @@ public Observable aggregate(Func2 accumulator) { * @see MSDN: Observable.Aggregate * @see Wikipedia: Fold (higher-order function) */ - public Observable reduce(R initialValue, Func2 accumulator) { + public Observable reduce(R initialValue, Func2 accumulator) { return create(OperationScan.scan(this, initialValue, accumulator)).takeLast(1); } @@ -1701,7 +1935,7 @@ public Observable reduce(R initialValue, Func2 accumulator) { * * @see #reduce(Object, Func2) */ - public Observable aggregate(R initialValue, Func2 accumulator) { + public Observable aggregate(R initialValue, Func2 accumulator) { return reduce(initialValue, accumulator); } @@ -1724,7 +1958,7 @@ public Observable aggregate(R initialValue, Func2 accumulator) { * @return an Observable that emits the results of each call to the accumulator function * @see MSDN: Observable.Scan */ - public Observable scan(Func2 accumulator) { + public Observable scan(Func2 accumulator) { return create(OperationScan.scan(this, accumulator)); } @@ -1785,7 +2019,7 @@ public Observable sample(long period, TimeUnit unit, Scheduler scheduler) { * @return an Observable that emits the results of each call to the accumulator function * @see MSDN: Observable.Scan */ - public Observable scan(R initialValue, Func2 accumulator) { + public Observable scan(R initialValue, Func2 accumulator) { return create(OperationScan.scan(this, initialValue, accumulator)); } @@ -1800,7 +2034,7 @@ public Observable scan(R initialValue, Func2 accumulator) { * @return an Observable that emits true if all items emitted by the source * Observable satisfy the predicate; otherwise, false */ - public Observable all(Func1 predicate) { + public Observable all(Func1 predicate) { return create(OperationAll.all(this, predicate)); } @@ -1853,7 +2087,7 @@ public Observable take(final int num) { * @return an Observable that emits the items from the source Observable so long as each item * satisfies the condition defined by predicate */ - public Observable takeWhile(final Func1 predicate) { + public Observable takeWhile(final Func1 predicate) { return create(OperationTakeWhile.takeWhile(this, predicate)); } @@ -1870,7 +2104,7 @@ public Observable takeWhile(final Func1 predicate) { * @return an Observable that emits items from the source Observable so long as the predicate * continues to return true for each item, then completes */ - public Observable takeWhileWithIndex(final Func2 predicate) { + public Observable takeWhileWithIndex(final Func2 predicate) { return create(OperationTakeWhile.takeWhileWithIndex(this, predicate)); } @@ -1904,7 +2138,7 @@ public Observable takeLast(final int count) { * @return an Observable that emits the items of the source Observable until such time as * other emits its first item */ - public Observable takeUntil(Observable other) { + public Observable takeUntil(Observable other) { return OperationTakeUntil.takeUntil(this, other); } @@ -1956,7 +2190,7 @@ public Observable> toSortedList() { * an Integer that indicates their sort order * @return an Observable that emits the items from the source Observable in sorted order */ - public Observable> toSortedList(Func2 sortFunction) { + public Observable> toSortedList(Func2 sortFunction) { return create(OperationToObservableSortedList.toSortedList(this, sortFunction)); } @@ -1992,7 +2226,7 @@ public Observable startWith(T... values) { * unique key value and emits items representing items from the source Observable that * share that key value */ - public Observable> groupBy(final Func1 keySelector, final Func1 elementSelector) { + public Observable> groupBy(final Func1 keySelector, final Func1 elementSelector) { return create(OperationGroupBy.groupBy(this, keySelector, elementSelector)); } @@ -2010,7 +2244,7 @@ public Observable> groupBy(final Func1 keyS * unique key value and emits items representing items from the source Observable that * share that key value */ - public Observable> groupBy(final Func1 keySelector) { + public Observable> groupBy(final Func1 keySelector) { return create(OperationGroupBy.groupBy(this, keySelector)); } diff --git a/rxjava-core/src/main/java/rx/Scheduler.java b/rxjava-core/src/main/java/rx/Scheduler.java index 4af62d0d83..06a708d4d4 100644 --- a/rxjava-core/src/main/java/rx/Scheduler.java +++ b/rxjava-core/src/main/java/rx/Scheduler.java @@ -62,7 +62,7 @@ public abstract class Scheduler { * Action to schedule. * @return a subscription to be able to unsubscribe from action. */ - public abstract Subscription schedule(T state, Func2 action); + public abstract Subscription schedule(T state, Func2 action); /** * Schedules a cancelable action to be executed in delayTime. @@ -77,7 +77,7 @@ public abstract class Scheduler { * Time unit of the delay time. * @return a subscription to be able to unsubscribe from action. */ - public abstract Subscription schedule(T state, Func2 action, long delayTime, TimeUnit unit); + public abstract Subscription schedule(T state, Func2 action, long delayTime, TimeUnit unit); /** * Schedules a cancelable action to be executed periodically. @@ -96,7 +96,7 @@ public abstract class Scheduler { * The time unit the interval above is given in. * @return A subscription to be able to unsubscribe from action. */ - public Subscription schedulePeriodically(T state, final Func2 action, long initialDelay, long period, TimeUnit unit) { + public Subscription schedulePeriodically(T state, final Func2 action, long initialDelay, long period, TimeUnit unit) { final long periodInNanos = unit.toNanos(period); final AtomicBoolean complete = new AtomicBoolean(); @@ -140,7 +140,7 @@ public void call() { * Time the action is to be executed. If in the past it will be executed immediately. * @return a subscription to be able to unsubscribe from action. */ - public Subscription schedule(T state, Func2 action, Date dueTime) { + public Subscription schedule(T state, Func2 action, Date dueTime) { long scheduledTime = dueTime.getTime(); long timeInFuture = scheduledTime - now(); if (timeInFuture <= 0) { @@ -162,7 +162,7 @@ public Subscription schedule(final Action0 action) { return schedule(null, new Func2() { @Override - public Subscription call(@SuppressWarnings("unused") Scheduler scheduler, @SuppressWarnings("unused") Void state) { + public Subscription call(Scheduler scheduler, Void state) { action.call(); return Subscriptions.empty(); } @@ -180,7 +180,7 @@ public Subscription schedule(final Action0 action, long delayTime, TimeUnit unit return schedule(null, new Func2() { @Override - public Subscription call(@SuppressWarnings("unused") Scheduler scheduler, @SuppressWarnings("unused") Void state) { + public Subscription call(Scheduler scheduler, Void state) { action.call(); return Subscriptions.empty(); } @@ -204,7 +204,7 @@ public Subscription call(@SuppressWarnings("unused") Scheduler scheduler, @Suppr public Subscription schedulePeriodically(final Action0 action, long initialDelay, long period, TimeUnit unit) { return schedulePeriodically(null, new Func2() { @Override - public Subscription call(@SuppressWarnings("unused") Scheduler scheduler, @SuppressWarnings("unused") Void state) { + public Subscription call(Scheduler scheduler, Void state) { action.call(); return Subscriptions.empty(); } diff --git a/rxjava-core/src/main/java/rx/concurrency/CurrentThreadScheduler.java b/rxjava-core/src/main/java/rx/concurrency/CurrentThreadScheduler.java index dd45102fd1..455b49d04c 100644 --- a/rxjava-core/src/main/java/rx/concurrency/CurrentThreadScheduler.java +++ b/rxjava-core/src/main/java/rx/concurrency/CurrentThreadScheduler.java @@ -47,14 +47,14 @@ private CurrentThreadScheduler() { private final AtomicInteger counter = new AtomicInteger(0); @Override - public Subscription schedule(T state, Func2 action) { + public Subscription schedule(T state, Func2 action) { DiscardableAction discardableAction = new DiscardableAction(state, action); enqueue(discardableAction, now()); return discardableAction; } @Override - public Subscription schedule(T state, Func2 action, long dueTime, TimeUnit unit) { + public Subscription schedule(T state, Func2 action, long dueTime, TimeUnit unit) { long execTime = now() + unit.toMillis(dueTime); DiscardableAction discardableAction = new DiscardableAction(state, new SleepingAction(action, this, execTime)); diff --git a/rxjava-core/src/main/java/rx/concurrency/DiscardableAction.java b/rxjava-core/src/main/java/rx/concurrency/DiscardableAction.java index c0c7402455..94d04075c5 100644 --- a/rxjava-core/src/main/java/rx/concurrency/DiscardableAction.java +++ b/rxjava-core/src/main/java/rx/concurrency/DiscardableAction.java @@ -27,13 +27,13 @@ * Combines standard {@link Subscription#unsubscribe()} functionality with ability to skip execution if an unsubscribe occurs before the {@link #call()} method is invoked. */ /* package */class DiscardableAction implements Func1, Subscription { - private final Func2 underlying; + private final Func2 underlying; private final T state; private final SafeObservableSubscription wrapper = new SafeObservableSubscription(); private final AtomicBoolean ready = new AtomicBoolean(true); - public DiscardableAction(T state, Func2 underlying) { + public DiscardableAction(T state, Func2 underlying) { this.state = state; this.underlying = underlying; } diff --git a/rxjava-core/src/main/java/rx/concurrency/ExecutorScheduler.java b/rxjava-core/src/main/java/rx/concurrency/ExecutorScheduler.java index a2522a2900..a1fd36179e 100644 --- a/rxjava-core/src/main/java/rx/concurrency/ExecutorScheduler.java +++ b/rxjava-core/src/main/java/rx/concurrency/ExecutorScheduler.java @@ -45,7 +45,7 @@ public ExecutorScheduler(ScheduledExecutorService executor) { } @Override - public Subscription schedulePeriodically(final T state, final Func2 action, long initialDelay, long period, TimeUnit unit) { + public Subscription schedulePeriodically(final T state, final Func2 action, long initialDelay, long period, TimeUnit unit) { if (executor instanceof ScheduledExecutorService) { final CompositeSubscription subscriptions = new CompositeSubscription(); @@ -66,7 +66,7 @@ public void run() { } @Override - public Subscription schedule(final T state, final Func2 action, long delayTime, TimeUnit unit) { + public Subscription schedule(final T state, final Func2 action, long delayTime, TimeUnit unit) { final DiscardableAction discardableAction = new DiscardableAction(state, action); final Scheduler _scheduler = this; // all subscriptions that may need to be unsubscribed @@ -113,7 +113,7 @@ public void run() { } @Override - public Subscription schedule(T state, Func2 action) { + public Subscription schedule(T state, Func2 action) { final DiscardableAction discardableAction = new DiscardableAction(state, action); final Scheduler _scheduler = this; // all subscriptions that may need to be unsubscribed diff --git a/rxjava-core/src/main/java/rx/concurrency/ImmediateScheduler.java b/rxjava-core/src/main/java/rx/concurrency/ImmediateScheduler.java index 198073b960..f3f4353bb7 100644 --- a/rxjava-core/src/main/java/rx/concurrency/ImmediateScheduler.java +++ b/rxjava-core/src/main/java/rx/concurrency/ImmediateScheduler.java @@ -41,12 +41,12 @@ private ImmediateScheduler() { } @Override - public Subscription schedule(T state, Func2 action) { + public Subscription schedule(T state, Func2 action) { return action.call(this, state); } @Override - public Subscription schedule(T state, Func2 action, long dueTime, TimeUnit unit) { + public Subscription schedule(T state, Func2 action, long dueTime, TimeUnit unit) { // since we are executing immediately on this thread we must cause this thread to sleep long execTime = now() + unit.toMillis(dueTime); diff --git a/rxjava-core/src/main/java/rx/concurrency/NewThreadScheduler.java b/rxjava-core/src/main/java/rx/concurrency/NewThreadScheduler.java index caf4e5a51d..d8e178bc0d 100644 --- a/rxjava-core/src/main/java/rx/concurrency/NewThreadScheduler.java +++ b/rxjava-core/src/main/java/rx/concurrency/NewThreadScheduler.java @@ -36,7 +36,7 @@ public static NewThreadScheduler getInstance() { } @Override - public Subscription schedule(final T state, final Func2 action) { + public Subscription schedule(final T state, final Func2 action) { final SafeObservableSubscription subscription = new SafeObservableSubscription(); final Scheduler _scheduler = this; @@ -53,7 +53,7 @@ public void run() { } @Override - public Subscription schedule(final T state, final Func2 action, long delay, TimeUnit unit) { + public Subscription schedule(final T state, final Func2 action, long delay, TimeUnit unit) { // we will use the system scheduler since it doesn't make sense to launch a new Thread and then sleep // we will instead schedule the event then launch the thread after the delay has passed final Scheduler _scheduler = this; diff --git a/rxjava-core/src/main/java/rx/concurrency/SleepingAction.java b/rxjava-core/src/main/java/rx/concurrency/SleepingAction.java index d3c2f82cbb..eea75639b8 100644 --- a/rxjava-core/src/main/java/rx/concurrency/SleepingAction.java +++ b/rxjava-core/src/main/java/rx/concurrency/SleepingAction.java @@ -20,11 +20,11 @@ import rx.util.functions.Func2; /* package */class SleepingAction implements Func2 { - private final Func2 underlying; + private final Func2 underlying; private final Scheduler scheduler; private final long execTime; - public SleepingAction(Func2 underlying, Scheduler scheduler, long execTime) { + public SleepingAction(Func2 underlying, Scheduler scheduler, long execTime) { this.underlying = underlying; this.scheduler = scheduler; this.execTime = execTime; diff --git a/rxjava-core/src/main/java/rx/concurrency/TestScheduler.java b/rxjava-core/src/main/java/rx/concurrency/TestScheduler.java index 739c6cb6b4..7afab7ec42 100644 --- a/rxjava-core/src/main/java/rx/concurrency/TestScheduler.java +++ b/rxjava-core/src/main/java/rx/concurrency/TestScheduler.java @@ -30,11 +30,11 @@ public class TestScheduler extends Scheduler { private static class TimedAction { private final long time; - private final Func2 action; + private final Func2 action; private final T state; private final TestScheduler scheduler; - private TimedAction(TestScheduler scheduler, long time, Func2 action, T state) { + private TimedAction(TestScheduler scheduler, long time, Func2 action, T state) { this.time = time; this.action = action; this.state = state; @@ -91,12 +91,12 @@ private void triggerActions(long targetTimeInNanos) { } @Override - public Subscription schedule(T state, Func2 action) { + public Subscription schedule(T state, Func2 action) { return schedule(state, action, 0, TimeUnit.MILLISECONDS); } @Override - public Subscription schedule(T state, Func2 action, long delayTime, TimeUnit unit) { + public Subscription schedule(T state, Func2 action, long delayTime, TimeUnit unit) { queue.add(new TimedAction(this, time + unit.toNanos(delayTime), action, state)); return Subscriptions.empty(); } diff --git a/rxjava-core/src/main/java/rx/observables/BlockingObservable.java b/rxjava-core/src/main/java/rx/observables/BlockingObservable.java index 41d141afa4..40bda27d52 100644 --- a/rxjava-core/src/main/java/rx/observables/BlockingObservable.java +++ b/rxjava-core/src/main/java/rx/observables/BlockingObservable.java @@ -60,7 +60,7 @@ */ public class BlockingObservable extends Observable { - protected BlockingObservable(Func1, Subscription> onSubscribe) { + protected BlockingObservable(Func1, ? extends Subscription> onSubscribe) { super(onSubscribe); } @@ -75,11 +75,11 @@ private BlockingObservable() { /** * Convert an Observable into a BlockingObservable. */ - public static BlockingObservable from(final Observable o) { - return new BlockingObservable(new Func1, Subscription>() { + public static BlockingObservable from(final Observable o) { + return new BlockingObservable(new Func1, Subscription>() { @Override - public Subscription call(Observer observer) { + public Subscription call(Observer observer) { return o.subscribe(observer); } }); @@ -97,7 +97,7 @@ public Subscription call(Observer observer) { * the type of items emitted by the source {@link Observable} * @return an {@link Iterator} that can iterate over the items emitted by the {@link Observable} */ - public static Iterator toIterator(Observable source) { + public static Iterator toIterator(Observable source) { return OperationToIterator.toIterator(source); } @@ -110,7 +110,7 @@ public static Iterator toIterator(Observable source) { * the source {@link Observable} * @return the last item emitted by the source {@link Observable} */ - public static T last(final Observable source) { + public static T last(final Observable source) { return from(source).last(); } @@ -126,7 +126,7 @@ public static T last(final Observable source) { * @return the last item emitted by the {@link Observable} for which the predicate function * returns true */ - public static T last(final Observable source, final Func1 predicate) { + public static T last(final Observable source, final Func1 predicate) { return last(source.filter(predicate)); } @@ -145,7 +145,7 @@ public static T last(final Observable source, final Func1 pre * @return the last item emitted by an {@link Observable}, or the default value if no item is * emitted */ - public static T lastOrDefault(Observable source, T defaultValue) { + public static T lastOrDefault(Observable source, T defaultValue) { return from(source).lastOrDefault(defaultValue); } @@ -166,7 +166,7 @@ public static T lastOrDefault(Observable source, T defaultValue) { * @return the last item emitted by an {@link Observable} that matches the predicate, or the * default value if no matching item is emitted */ - public static T lastOrDefault(Observable source, T defaultValue, Func1 predicate) { + public static T lastOrDefault(Observable source, T defaultValue, Func1 predicate) { return lastOrDefault(source.filter(predicate), defaultValue); } @@ -186,7 +186,7 @@ public static T lastOrDefault(Observable source, T defaultValue, Func1 Iterable mostRecent(Observable source, T initialValue) { + public static Iterable mostRecent(Observable source, T initialValue) { return OperationMostRecent.mostRecent(source, initialValue); } @@ -203,12 +203,12 @@ public static Iterable mostRecent(Observable source, T initialValue) { * @return an {@link Iterable} that blocks upon each iteration until the {@link Observable} * emits a new item, whereupon the Iterable returns that item */ - public static Iterable next(Observable items) { + public static Iterable next(Observable items) { return OperationNext.next(items); } - private static T _singleOrDefault(BlockingObservable source, boolean hasDefault, T defaultValue) { - Iterator it = source.toIterable().iterator(); + private static T _singleOrDefault(BlockingObservable source, boolean hasDefault, T defaultValue) { + Iterator it = source.toIterable().iterator(); if (!it.hasNext()) { if (hasDefault) { @@ -238,7 +238,7 @@ private static T _singleOrDefault(BlockingObservable source, boolean hasD * @throws IllegalStateException * if the {@link Observable} does not emit exactly one item */ - public static T single(Observable source) { + public static T single(Observable source) { return from(source).single(); } @@ -257,7 +257,7 @@ public static T single(Observable source) { * if the {@link Observable} does not emit exactly one item that matches the * predicate */ - public static T single(Observable source, Func1 predicate) { + public static T single(Observable source, Func1 predicate) { return from(source).single(predicate); } @@ -274,7 +274,7 @@ public static T single(Observable source, Func1 predicate) { * @return the single item emitted by the source {@link Observable}, or a default value if no * value is emitted */ - public static T singleOrDefault(Observable source, T defaultValue) { + public static T singleOrDefault(Observable source, T defaultValue) { return from(source).singleOrDefault(defaultValue); } @@ -293,7 +293,7 @@ public static T singleOrDefault(Observable source, T defaultValue) { * @return the single item emitted by the source {@link Observable} that matches the predicate, * or a default value if no such value is emitted */ - public static T singleOrDefault(Observable source, T defaultValue, Func1 predicate) { + public static T singleOrDefault(Observable source, T defaultValue, Func1 predicate) { return from(source).singleOrDefault(defaultValue, predicate); } @@ -310,7 +310,7 @@ public static T singleOrDefault(Observable source, T defaultValue, Func1< * the source {@link Observable} * @return a Future that expects a single item to be emitted by the source {@link Observable} */ - public static Future toFuture(final Observable source) { + public static Future toFuture(final Observable source) { return OperationToFuture.toFuture(source); } @@ -323,7 +323,7 @@ public static Future toFuture(final Observable source) { * the source {@link Observable} * @return an {@link Iterable} version of the underlying {@link Observable} */ - public static Iterable toIterable(final Observable source) { + public static Iterable toIterable(final Observable source) { return from(source).toIterable(); } @@ -334,7 +334,7 @@ public static Iterable toIterable(final Observable source) { * See https://github.com/Netflix/RxJava/issues/216 for discussion on "Guideline 6.4: Protect * calls to user code from within an operator" */ - private Subscription protectivelyWrapAndSubscribe(Observer o) { + private Subscription protectivelyWrapAndSubscribe(Observer o) { SafeObservableSubscription subscription = new SafeObservableSubscription(); return subscription.wrap(subscribe(new SafeObserver(subscription, o))); } @@ -355,7 +355,7 @@ private Subscription protectivelyWrapAndSubscribe(Observer o) { * @throws RuntimeException * if an error occurs */ - public void forEach(final Action1 onNext) { + public void forEach(final Action1 onNext) { final CountDownLatch latch = new CountDownLatch(1); final AtomicReference exceptionFromOnError = new AtomicReference(); @@ -443,7 +443,7 @@ public T last() { * a predicate function to evaluate items emitted by the {@link Observable} * @return the last item emitted by the {@link Observable} that matches the predicate */ - public T last(final Func1 predicate) { + public T last(final Func1 predicate) { return last(this, predicate); } @@ -487,7 +487,7 @@ public T lastOrDefault(T defaultValue) { * @return the last item emitted by the {@link Observable} that matches the predicate, or the * default value if no matching items are emitted */ - public T lastOrDefault(T defaultValue, Func1 predicate) { + public T lastOrDefault(T defaultValue, Func1 predicate) { return lastOrDefault(this, defaultValue, predicate); } @@ -542,7 +542,7 @@ public T single() { * a predicate function to evaluate items emitted by the {@link Observable} * @return the single item emitted by the source {@link Observable} that matches the predicate */ - public T single(Func1 predicate) { + public T single(Func1 predicate) { return _singleOrDefault(from(this.filter(predicate)), false, null); } @@ -575,7 +575,7 @@ public T singleOrDefault(T defaultValue) { * @return the single item emitted by the {@link Observable} that matches the predicate, or the * default value if no such items are emitted */ - public T singleOrDefault(T defaultValue, Func1 predicate) { + public T singleOrDefault(T defaultValue, Func1 predicate) { return _singleOrDefault(from(this.filter(predicate)), true, defaultValue); } @@ -784,10 +784,10 @@ public void testToIterable() { @Test(expected = TestException.class) public void testToIterableWithException() { - BlockingObservable obs = BlockingObservable.from(create(new Func1, Subscription>() { + BlockingObservable obs = BlockingObservable.from(create(new Func1, Subscription>() { @Override - public Subscription call(Observer observer) { + public Subscription call(Observer observer) { observer.onNext("one"); observer.onError(new TestException()); return Subscriptions.empty(); @@ -807,10 +807,10 @@ public Subscription call(Observer observer) { @Test public void testForEachWithError() { try { - BlockingObservable.from(Observable.create(new Func1, Subscription>() { + BlockingObservable.from(Observable.create(new Func1, Subscription>() { @Override - public Subscription call(final Observer observer) { + public Subscription call(final Observer observer) { final BooleanSubscription subscription = new BooleanSubscription(); new Thread(new Runnable() { diff --git a/rxjava-core/src/main/java/rx/observables/ConnectableObservable.java b/rxjava-core/src/main/java/rx/observables/ConnectableObservable.java index de0fdba643..b229681522 100644 --- a/rxjava-core/src/main/java/rx/observables/ConnectableObservable.java +++ b/rxjava-core/src/main/java/rx/observables/ConnectableObservable.java @@ -37,7 +37,7 @@ public abstract class ConnectableObservable extends Observable { - protected ConnectableObservable(Func1, Subscription> onSubscribe) { + protected ConnectableObservable(Func1, ? extends Subscription> onSubscribe) { super(onSubscribe); } diff --git a/rxjava-core/src/main/java/rx/observables/GroupedObservable.java b/rxjava-core/src/main/java/rx/observables/GroupedObservable.java index 28019382f7..f7e2183635 100644 --- a/rxjava-core/src/main/java/rx/observables/GroupedObservable.java +++ b/rxjava-core/src/main/java/rx/observables/GroupedObservable.java @@ -32,7 +32,7 @@ public class GroupedObservable extends Observable { private final K key; - public GroupedObservable(K key, Func1, Subscription> onSubscribe) { + public GroupedObservable(K key, Func1, ? extends Subscription> onSubscribe) { super(onSubscribe); this.key = key; } diff --git a/rxjava-core/src/main/java/rx/operators/OperationAll.java b/rxjava-core/src/main/java/rx/operators/OperationAll.java index d504651eaa..862999b743 100644 --- a/rxjava-core/src/main/java/rx/operators/OperationAll.java +++ b/rxjava-core/src/main/java/rx/operators/OperationAll.java @@ -34,35 +34,35 @@ */ public class OperationAll { - public static Func1, Subscription> all(Observable sequence, Func1 predicate) { + public static Func1, Subscription> all(Observable sequence, Func1 predicate) { return new AllObservable(sequence, predicate); } - private static class AllObservable implements Func1, Subscription> { - private final Observable sequence; - private final Func1 predicate; + private static class AllObservable implements Func1, Subscription> { + private final Observable sequence; + private final Func1 predicate; private final SafeObservableSubscription subscription = new SafeObservableSubscription(); - private AllObservable(Observable sequence, Func1 predicate) { + private AllObservable(Observable sequence, Func1 predicate) { this.sequence = sequence; this.predicate = predicate; } @Override - public Subscription call(final Observer observer) { + public Subscription call(final Observer observer) { return subscription.wrap(sequence.subscribe(new AllObserver(observer))); } private class AllObserver implements Observer { - private final Observer underlying; + private final Observer underlying; private final AtomicBoolean status = new AtomicBoolean(true); - public AllObserver(Observer underlying) { + public AllObserver(Observer underlying) { this.underlying = underlying; } diff --git a/rxjava-core/src/main/java/rx/operators/OperationBuffer.java b/rxjava-core/src/main/java/rx/operators/OperationBuffer.java index f5e6a692a5..43ba46f137 100644 --- a/rxjava-core/src/main/java/rx/operators/OperationBuffer.java +++ b/rxjava-core/src/main/java/rx/operators/OperationBuffer.java @@ -69,10 +69,10 @@ public final class OperationBuffer { * @return * the {@link Func1} object representing the specified buffer operation. */ - public static Func1>, Subscription> buffer(final Observable source, final Func0> bufferClosingSelector) { - return new Func1>, Subscription>() { + public static Func1>, Subscription> buffer(final Observable source, final Func0> bufferClosingSelector) { + return new Func1>, Subscription>() { @Override - public Subscription call(final Observer> observer) { + public Subscription call(final Observer> observer) { NonOverlappingBuffers buffers = new NonOverlappingBuffers(observer); BufferCreator creator = new ObservableBasedSingleBufferCreator(buffers, bufferClosingSelector); return source.subscribe(new BufferObserver(buffers, observer, creator)); @@ -107,10 +107,10 @@ public Subscription call(final Observer> observer) { * @return * the {@link Func1} object representing the specified buffer operation. */ - public static Func1>, Subscription> buffer(final Observable source, final Observable bufferOpenings, final Func1> bufferClosingSelector) { - return new Func1>, Subscription>() { + public static Func1>, Subscription> buffer(final Observable source, final Observable bufferOpenings, final Func1> bufferClosingSelector) { + return new Func1>, Subscription>() { @Override - public Subscription call(final Observer> observer) { + public Subscription call(final Observer> observer) { OverlappingBuffers buffers = new OverlappingBuffers(observer); BufferCreator creator = new ObservableBasedMultiBufferCreator(buffers, bufferOpenings, bufferClosingSelector); return source.subscribe(new BufferObserver(buffers, observer, creator)); @@ -135,7 +135,7 @@ public Subscription call(final Observer> observer) { * @return * the {@link Func1} object representing the specified buffer operation. */ - public static Func1>, Subscription> buffer(Observable source, int count) { + public static Func1>, Subscription> buffer(Observable source, int count) { return buffer(source, count, count); } @@ -162,10 +162,10 @@ public static Func1>, Subscription> buffer(Observable so * @return * the {@link Func1} object representing the specified buffer operation. */ - public static Func1>, Subscription> buffer(final Observable source, final int count, final int skip) { - return new Func1>, Subscription>() { + public static Func1>, Subscription> buffer(final Observable source, final int count, final int skip) { + return new Func1>, Subscription>() { @Override - public Subscription call(final Observer> observer) { + public Subscription call(final Observer> observer) { Buffers buffers = new SizeBasedBuffers(observer, count); BufferCreator creator = new SkippingBufferCreator(buffers, skip); return source.subscribe(new BufferObserver(buffers, observer, creator)); @@ -192,7 +192,7 @@ public Subscription call(final Observer> observer) { * @return * the {@link Func1} object representing the specified buffer operation. */ - public static Func1>, Subscription> buffer(Observable source, long timespan, TimeUnit unit) { + public static Func1>, Subscription> buffer(Observable source, long timespan, TimeUnit unit) { return buffer(source, timespan, unit, Schedulers.threadPoolForComputation()); } @@ -217,10 +217,10 @@ public static Func1>, Subscription> buffer(Observable so * @return * the {@link Func1} object representing the specified buffer operation. */ - public static Func1>, Subscription> buffer(final Observable source, final long timespan, final TimeUnit unit, final Scheduler scheduler) { - return new Func1>, Subscription>() { + public static Func1>, Subscription> buffer(final Observable source, final long timespan, final TimeUnit unit, final Scheduler scheduler) { + return new Func1>, Subscription>() { @Override - public Subscription call(final Observer> observer) { + public Subscription call(final Observer> observer) { NonOverlappingBuffers buffers = new NonOverlappingBuffers(observer); BufferCreator creator = new TimeBasedBufferCreator(buffers, timespan, unit, scheduler); return source.subscribe(new BufferObserver(buffers, observer, creator)); @@ -250,7 +250,7 @@ public Subscription call(final Observer> observer) { * @return * the {@link Func1} object representing the specified buffer operation. */ - public static Func1>, Subscription> buffer(Observable source, long timespan, TimeUnit unit, int count) { + public static Func1>, Subscription> buffer(Observable source, long timespan, TimeUnit unit, int count) { return buffer(source, timespan, unit, count, Schedulers.threadPoolForComputation()); } @@ -278,10 +278,10 @@ public static Func1>, Subscription> buffer(Observable so * @return * the {@link Func1} object representing the specified buffer operation. */ - public static Func1>, Subscription> buffer(final Observable source, final long timespan, final TimeUnit unit, final int count, final Scheduler scheduler) { - return new Func1>, Subscription>() { + public static Func1>, Subscription> buffer(final Observable source, final long timespan, final TimeUnit unit, final int count, final Scheduler scheduler) { + return new Func1>, Subscription>() { @Override - public Subscription call(final Observer> observer) { + public Subscription call(final Observer> observer) { Buffers buffers = new TimeAndSizeBasedBuffers(observer, count, timespan, unit, scheduler); BufferCreator creator = new SingleBufferCreator(buffers); return source.subscribe(new BufferObserver(buffers, observer, creator)); @@ -311,7 +311,7 @@ public Subscription call(final Observer> observer) { * @return * the {@link Func1} object representing the specified buffer operation. */ - public static Func1>, Subscription> buffer(Observable source, long timespan, long timeshift, TimeUnit unit) { + public static Func1>, Subscription> buffer(Observable source, long timespan, long timeshift, TimeUnit unit) { return buffer(source, timespan, timeshift, unit, Schedulers.threadPoolForComputation()); } @@ -339,10 +339,10 @@ public static Func1>, Subscription> buffer(Observable so * @return * the {@link Func1} object representing the specified buffer operation. */ - public static Func1>, Subscription> buffer(final Observable source, final long timespan, final long timeshift, final TimeUnit unit, final Scheduler scheduler) { - return new Func1>, Subscription>() { + public static Func1>, Subscription> buffer(final Observable source, final long timespan, final long timeshift, final TimeUnit unit, final Scheduler scheduler) { + return new Func1>, Subscription>() { @Override - public Subscription call(final Observer> observer) { + public Subscription call(final Observer> observer) { OverlappingBuffers buffers = new TimeBasedBuffers(observer, timespan, unit, scheduler); BufferCreator creator = new TimeBasedBufferCreator(buffers, timeshift, unit, scheduler); return source.subscribe(new BufferObserver(buffers, observer, creator)); @@ -362,10 +362,10 @@ public Subscription call(final Observer> observer) { private static class BufferObserver implements Observer { private final Buffers buffers; - private final Observer> observer; + private final Observer> observer; private final BufferCreator creator; - public BufferObserver(Buffers buffers, Observer> observer, BufferCreator creator) { + public BufferObserver(Buffers buffers, Observer> observer, BufferCreator creator) { this.observer = observer; this.creator = creator; this.buffers = buffers; @@ -444,10 +444,10 @@ public void stop() { private static class ObservableBasedSingleBufferCreator implements BufferCreator { private final SafeObservableSubscription subscription = new SafeObservableSubscription(); - private final Func0> bufferClosingSelector; + private final Func0> bufferClosingSelector; private final NonOverlappingBuffers buffers; - public ObservableBasedSingleBufferCreator(NonOverlappingBuffers buffers, Func0> bufferClosingSelector) { + public ObservableBasedSingleBufferCreator(NonOverlappingBuffers buffers, Func0> bufferClosingSelector) { this.buffers = buffers; this.bufferClosingSelector = bufferClosingSelector; @@ -456,7 +456,7 @@ public ObservableBasedSingleBufferCreator(NonOverlappingBuffers buffers, Func } private void listenForBufferEnd() { - Observable closingObservable = bufferClosingSelector.call(); + Observable closingObservable = bufferClosingSelector.call(); closingObservable.subscribe(new Action1() { @Override public void call(BufferClosing closing) { @@ -489,12 +489,12 @@ private static class ObservableBasedMultiBufferCreator implements BufferCreat private final SafeObservableSubscription subscription = new SafeObservableSubscription(); - public ObservableBasedMultiBufferCreator(final OverlappingBuffers buffers, Observable bufferOpenings, final Func1> bufferClosingSelector) { + public ObservableBasedMultiBufferCreator(final OverlappingBuffers buffers, Observable bufferOpenings, final Func1> bufferClosingSelector) { subscription.wrap(bufferOpenings.subscribe(new Action1() { @Override public void call(BufferOpening opening) { final Buffer buffer = buffers.createBuffer(); - Observable closingObservable = bufferClosingSelector.call(opening); + Observable closingObservable = bufferClosingSelector.call(opening); closingObservable.subscribe(new Action1() { @Override @@ -597,7 +597,7 @@ private static class NonOverlappingBuffers extends Buffers { private final Object lock = new Object(); - public NonOverlappingBuffers(Observer> observer) { + public NonOverlappingBuffers(Observer> observer) { super(observer); } @@ -624,7 +624,7 @@ public void pushValue(T value) { * @param The type of object all internal {@link Buffer} objects record. */ private static class OverlappingBuffers extends Buffers { - public OverlappingBuffers(Observer> observer) { + public OverlappingBuffers(Observer> observer) { super(observer); } } @@ -646,7 +646,7 @@ private static class TimeAndSizeBasedBuffers extends Buffers { private final TimeUnit unit; private final int maxSize; - public TimeAndSizeBasedBuffers(Observer> observer, int maxSize, long maxTime, TimeUnit unit, Scheduler scheduler) { + public TimeAndSizeBasedBuffers(Observer> observer, int maxSize, long maxTime, TimeUnit unit, Scheduler scheduler) { super(observer); this.maxSize = maxSize; this.maxTime = maxTime; @@ -710,7 +710,7 @@ private static class TimeBasedBuffers extends OverlappingBuffers { private final long time; private final TimeUnit unit; - public TimeBasedBuffers(Observer> observer, long time, TimeUnit unit, Scheduler scheduler) { + public TimeBasedBuffers(Observer> observer, long time, TimeUnit unit, Scheduler scheduler) { super(observer); this.time = time; this.unit = unit; @@ -747,7 +747,7 @@ private static class SizeBasedBuffers extends Buffers { private final int size; - public SizeBasedBuffers(Observer> observer, int size) { + public SizeBasedBuffers(Observer> observer, int size) { super(observer); this.size = size; } @@ -776,7 +776,7 @@ public void pushValue(T value) { private static class Buffers { private final Queue> buffers = new ConcurrentLinkedQueue>(); - private final Observer> observer; + private final Observer> observer; /** * Constructs a new {@link Buffers} object for the specified {@link Observer}. @@ -785,7 +785,7 @@ private static class Buffers { * The {@link Observer} to which this object will emit its internal * {@link Buffer} objects to when requested. */ - public Buffers(Observer> observer) { + public Buffers(Observer> observer) { this.observer = observer; } @@ -889,9 +889,9 @@ public void before() { @Test public void testComplete() { - Observable source = Observable.create(new Func1, Subscription>() { + Observable source = Observable.create(new Func1, Subscription>() { @Override - public Subscription call(Observer observer) { + public Subscription call(Observer observer) { observer.onCompleted(); return Subscriptions.empty(); } @@ -907,9 +907,9 @@ public Subscription call(Observer observer) { @Test public void testSkipAndCountOverlappingBuffers() { - Observable source = Observable.create(new Func1, Subscription>() { + Observable source = Observable.create(new Func1, Subscription>() { @Override - public Subscription call(Observer observer) { + public Subscription call(Observer observer) { observer.onNext("one"); observer.onNext("two"); observer.onNext("three"); @@ -933,9 +933,9 @@ public Subscription call(Observer observer) { @Test public void testSkipAndCountGaplessBuffers() { - Observable source = Observable.create(new Func1, Subscription>() { + Observable source = Observable.create(new Func1, Subscription>() { @Override - public Subscription call(Observer observer) { + public Subscription call(Observer observer) { observer.onNext("one"); observer.onNext("two"); observer.onNext("three"); @@ -959,9 +959,9 @@ public Subscription call(Observer observer) { @Test public void testSkipAndCountBuffersWithGaps() { - Observable source = Observable.create(new Func1, Subscription>() { + Observable source = Observable.create(new Func1, Subscription>() { @Override - public Subscription call(Observer observer) { + public Subscription call(Observer observer) { observer.onNext("one"); observer.onNext("two"); observer.onNext("three"); @@ -985,9 +985,9 @@ public Subscription call(Observer observer) { @Test public void testTimedAndCount() { - Observable source = Observable.create(new Func1, Subscription>() { + Observable source = Observable.create(new Func1, Subscription>() { @Override - public Subscription call(Observer observer) { + public Subscription call(Observer observer) { push(observer, "one", 10); push(observer, "two", 90); push(observer, "three", 110); @@ -1017,9 +1017,9 @@ public Subscription call(Observer observer) { @Test public void testTimed() { - Observable source = Observable.create(new Func1, Subscription>() { + Observable source = Observable.create(new Func1, Subscription>() { @Override - public Subscription call(Observer observer) { + public Subscription call(Observer observer) { push(observer, "one", 98); push(observer, "two", 99); push(observer, "three", 100); @@ -1046,9 +1046,9 @@ public Subscription call(Observer observer) { @Test public void testObservableBasedOpenerAndCloser() { - Observable source = Observable.create(new Func1, Subscription>() { + Observable source = Observable.create(new Func1, Subscription>() { @Override - public Subscription call(Observer observer) { + public Subscription call(Observer observer) { push(observer, "one", 10); push(observer, "two", 60); push(observer, "three", 110); @@ -1059,9 +1059,9 @@ public Subscription call(Observer observer) { } }); - Observable openings = Observable.create(new Func1, Subscription>() { + Observable openings = Observable.create(new Func1, Subscription>() { @Override - public Subscription call(Observer observer) { + public Subscription call(Observer observer) { push(observer, BufferOpenings.create(), 50); push(observer, BufferOpenings.create(), 200); complete(observer, 250); @@ -1072,9 +1072,9 @@ public Subscription call(Observer observer) { Func1> closer = new Func1>() { @Override public Observable call(BufferOpening opening) { - return Observable.create(new Func1, Subscription>() { + return Observable.create(new Func1, Subscription>() { @Override - public Subscription call(Observer observer) { + public Subscription call(Observer observer) { push(observer, BufferClosings.create(), 100); complete(observer, 101); return Subscriptions.empty(); @@ -1097,9 +1097,9 @@ public Subscription call(Observer observer) { @Test public void testObservableBasedCloser() { - Observable source = Observable.create(new Func1, Subscription>() { + Observable source = Observable.create(new Func1, Subscription>() { @Override - public Subscription call(Observer observer) { + public Subscription call(Observer observer) { push(observer, "one", 10); push(observer, "two", 60); push(observer, "three", 110); @@ -1113,9 +1113,9 @@ public Subscription call(Observer observer) { Func0> closer = new Func0>() { @Override public Observable call() { - return Observable.create(new Func1, Subscription>() { + return Observable.create(new Func1, Subscription>() { @Override - public Subscription call(Observer observer) { + public Subscription call(Observer observer) { push(observer, BufferClosings.create(), 100); complete(observer, 101); return Subscriptions.empty(); diff --git a/rxjava-core/src/main/java/rx/operators/OperationCache.java b/rxjava-core/src/main/java/rx/operators/OperationCache.java index 92707ba4d8..c6aa62af38 100644 --- a/rxjava-core/src/main/java/rx/operators/OperationCache.java +++ b/rxjava-core/src/main/java/rx/operators/OperationCache.java @@ -47,14 +47,14 @@ */ public class OperationCache { - public static Func1, Subscription> cache(final Observable source) { - return new Func1, Subscription>() { + public static Func1, Subscription> cache(final Observable source) { + return new Func1, Subscription>() { final AtomicBoolean subscribed = new AtomicBoolean(false); private final ReplaySubject cache = ReplaySubject.create(); @Override - public Subscription call(Observer observer) { + public Subscription call(Observer observer) { if (subscribed.compareAndSet(false, true)) { // subscribe to the source once source.subscribe(cache); @@ -76,10 +76,10 @@ public static class UnitTest { @Test public void testCache() throws InterruptedException { final AtomicInteger counter = new AtomicInteger(); - Observable o = Observable.create(cache(Observable.create(new Func1, Subscription>() { + Observable o = Observable.create(cache(Observable.create(new Func1, Subscription>() { @Override - public Subscription call(final Observer observer) { + public Subscription call(final Observer observer) { final BooleanSubscription subscription = new BooleanSubscription(); new Thread(new Runnable() { diff --git a/rxjava-core/src/main/java/rx/operators/OperationCombineLatest.java b/rxjava-core/src/main/java/rx/operators/OperationCombineLatest.java index f11af77898..d53f764566 100644 --- a/rxjava-core/src/main/java/rx/operators/OperationCombineLatest.java +++ b/rxjava-core/src/main/java/rx/operators/OperationCombineLatest.java @@ -38,6 +38,11 @@ import rx.util.functions.Func2; import rx.util.functions.Func3; import rx.util.functions.Func4; +import rx.util.functions.Func5; +import rx.util.functions.Func6; +import rx.util.functions.Func7; +import rx.util.functions.Func8; +import rx.util.functions.Func9; import rx.util.functions.FuncN; import rx.util.functions.Functions; @@ -62,7 +67,7 @@ public class OperationCombineLatest { * The aggregation function used to combine the source observable values. * @return A function from an observer to a subscription. This can be used to create an observable from. */ - public static Func1, Subscription> combineLatest(Observable w0, Observable w1, Func2 combineLatestFunction) { + public static Func1, Subscription> combineLatest(Observable w0, Observable w1, Func2 combineLatestFunction) { Aggregator a = new Aggregator(Functions.fromFunc(combineLatestFunction)); a.addObserver(new CombineObserver(a, w0)); a.addObserver(new CombineObserver(a, w1)); @@ -72,7 +77,8 @@ public static Func1, Subscription> combineLatest(Observa /** * @see #combineLatest(Observable w0, Observable w1, Func2 combineLatestFunction) */ - public static Func1, Subscription> combineLatest(Observable w0, Observable w1, Observable w2, Func3 combineLatestFunction) { + public static Func1, Subscription> combineLatest(Observable w0, Observable w1, Observable w2, + Func3 combineLatestFunction) { Aggregator a = new Aggregator(Functions.fromFunc(combineLatestFunction)); a.addObserver(new CombineObserver(a, w0)); a.addObserver(new CombineObserver(a, w1)); @@ -83,7 +89,8 @@ public static Func1, Subscription> combineLatest(Obs /** * @see #combineLatest(Observable w0, Observable w1, Func2 combineLatestFunction) */ - public static Func1, Subscription> combineLatest(Observable w0, Observable w1, Observable w2, Observable w3, Func4 combineLatestFunction) { + public static Func1, Subscription> combineLatest(Observable w0, Observable w1, Observable w2, Observable w3, + Func4 combineLatestFunction) { Aggregator a = new Aggregator(Functions.fromFunc(combineLatestFunction)); a.addObserver(new CombineObserver(a, w0)); a.addObserver(new CombineObserver(a, w1)); @@ -92,12 +99,92 @@ public static Func1, Subscription> combineLatest return a; } + /** + * @see #combineLatest(Observable w0, Observable w1, Func2 combineLatestFunction) + */ + public static Func1, Subscription> combineLatest(Observable w0, Observable w1, Observable w2, Observable w3, Observable w4, + Func5 combineLatestFunction) { + Aggregator a = new Aggregator(Functions.fromFunc(combineLatestFunction)); + a.addObserver(new CombineObserver(a, w0)); + a.addObserver(new CombineObserver(a, w1)); + a.addObserver(new CombineObserver(a, w2)); + a.addObserver(new CombineObserver(a, w3)); + a.addObserver(new CombineObserver(a, w4)); + return a; + } + + /** + * @see #combineLatest(Observable w0, Observable w1, Func2 combineLatestFunction) + */ + public static Func1, Subscription> combineLatest(Observable w0, Observable w1, Observable w2, Observable w3, Observable w4, Observable w5, + Func6 combineLatestFunction) { + Aggregator a = new Aggregator(Functions.fromFunc(combineLatestFunction)); + a.addObserver(new CombineObserver(a, w0)); + a.addObserver(new CombineObserver(a, w1)); + a.addObserver(new CombineObserver(a, w2)); + a.addObserver(new CombineObserver(a, w3)); + a.addObserver(new CombineObserver(a, w4)); + a.addObserver(new CombineObserver(a, w5)); + return a; + } + + /** + * @see #combineLatest(Observable w0, Observable w1, Func2 combineLatestFunction) + */ + public static Func1, Subscription> combineLatest(Observable w0, Observable w1, Observable w2, Observable w3, Observable w4, Observable w5, Observable w6, + Func7 combineLatestFunction) { + Aggregator a = new Aggregator(Functions.fromFunc(combineLatestFunction)); + a.addObserver(new CombineObserver(a, w0)); + a.addObserver(new CombineObserver(a, w1)); + a.addObserver(new CombineObserver(a, w2)); + a.addObserver(new CombineObserver(a, w3)); + a.addObserver(new CombineObserver(a, w4)); + a.addObserver(new CombineObserver(a, w5)); + a.addObserver(new CombineObserver(a, w6)); + return a; + } + + /** + * @see #combineLatest(Observable w0, Observable w1, Func2 combineLatestFunction) + */ + public static Func1, Subscription> combineLatest(Observable w0, Observable w1, Observable w2, Observable w3, Observable w4, Observable w5, Observable w6, Observable w7, + Func8 combineLatestFunction) { + Aggregator a = new Aggregator(Functions.fromFunc(combineLatestFunction)); + a.addObserver(new CombineObserver(a, w0)); + a.addObserver(new CombineObserver(a, w1)); + a.addObserver(new CombineObserver(a, w2)); + a.addObserver(new CombineObserver(a, w3)); + a.addObserver(new CombineObserver(a, w4)); + a.addObserver(new CombineObserver(a, w5)); + a.addObserver(new CombineObserver(a, w6)); + a.addObserver(new CombineObserver(a, w7)); + return a; + } + + /** + * @see #combineLatest(Observable w0, Observable w1, Func2 combineLatestFunction) + */ + public static Func1, Subscription> combineLatest(Observable w0, Observable w1, Observable w2, Observable w3, Observable w4, Observable w5, Observable w6, Observable w7, Observable w8, + Func9 combineLatestFunction) { + Aggregator a = new Aggregator(Functions.fromFunc(combineLatestFunction)); + a.addObserver(new CombineObserver(a, w0)); + a.addObserver(new CombineObserver(a, w1)); + a.addObserver(new CombineObserver(a, w2)); + a.addObserver(new CombineObserver(a, w3)); + a.addObserver(new CombineObserver(a, w4)); + a.addObserver(new CombineObserver(a, w5)); + a.addObserver(new CombineObserver(a, w6)); + a.addObserver(new CombineObserver(a, w7)); + a.addObserver(new CombineObserver(a, w8)); + return a; + } + private static class CombineObserver implements Observer { - final Observable w; + final Observable w; final Aggregator a; private Subscription subscription; - public CombineObserver(Aggregator a, Observable w) { + public CombineObserver(Aggregator a, Observable w) { this.a = a; this.w = w; } @@ -130,7 +217,7 @@ public void onNext(T args) { * whenever we have received an event from one of the observables, as soon as each Observable has received * at least one event. */ - private static class Aggregator implements Func1, Subscription> { + private static class Aggregator implements Func1, Subscription> { private volatile Observer observer; @@ -232,7 +319,7 @@ void next(CombineObserver w, T arg) { } @Override - public Subscription call(Observer observer) { + public Subscription call(Observer observer) { if (this.observer != null) { throw new IllegalStateException("Only one Observer can subscribe to this Observable."); } @@ -283,8 +370,8 @@ public String call(String v1, String v2) { })); combined.subscribe(w); - w1.Observer.onNext("first value of w1"); - w2.Observer.onNext("first value of w2"); + w1.observer.onNext("first value of w1"); + w2.observer.onNext("first value of w2"); verify(w, never()).onNext(anyString()); verify(w, never()).onCompleted(); @@ -305,18 +392,18 @@ public void testCombineLatestDifferentLengthObservableSequences1() { /* simulate sending data */ // once for w1 - w1.Observer.onNext("1a"); - w2.Observer.onNext("2a"); - w3.Observer.onNext("3a"); - w1.Observer.onCompleted(); + w1.observer.onNext("1a"); + w2.observer.onNext("2a"); + w3.observer.onNext("3a"); + w1.observer.onCompleted(); // twice for w2 - w2.Observer.onNext("2b"); - w2.Observer.onCompleted(); + w2.observer.onNext("2b"); + w2.observer.onCompleted(); // 4 times for w3 - w3.Observer.onNext("3b"); - w3.Observer.onNext("3c"); - w3.Observer.onNext("3d"); - w3.Observer.onCompleted(); + w3.observer.onNext("3b"); + w3.observer.onNext("3c"); + w3.observer.onNext("3d"); + w3.observer.onCompleted(); /* we should have been called 4 times on the Observer */ InOrder inOrder = inOrder(w); @@ -343,18 +430,18 @@ public void testCombineLatestDifferentLengthObservableSequences2() { /* simulate sending data */ // 4 times for w1 - w1.Observer.onNext("1a"); - w1.Observer.onNext("1b"); - w1.Observer.onNext("1c"); - w1.Observer.onNext("1d"); - w1.Observer.onCompleted(); + w1.observer.onNext("1a"); + w1.observer.onNext("1b"); + w1.observer.onNext("1c"); + w1.observer.onNext("1d"); + w1.observer.onCompleted(); // twice for w2 - w2.Observer.onNext("2a"); - w2.Observer.onNext("2b"); - w2.Observer.onCompleted(); + w2.observer.onNext("2a"); + w2.observer.onNext("2b"); + w2.observer.onCompleted(); // 1 times for w3 - w3.Observer.onNext("3a"); - w3.Observer.onCompleted(); + w3.observer.onNext("3a"); + w3.observer.onCompleted(); /* we should have been called 1 time only on the Observer since we only combine the "latest" we don't go back and loop through others once completed */ InOrder inOrder = inOrder(w); @@ -378,19 +465,19 @@ public void testCombineLatestWithInterleavingSequences() { combineLatestW.subscribe(w); /* simulate sending data */ - w1.Observer.onNext("1a"); - w2.Observer.onNext("2a"); - w2.Observer.onNext("2b"); - w3.Observer.onNext("3a"); - - w1.Observer.onNext("1b"); - w2.Observer.onNext("2c"); - w2.Observer.onNext("2d"); - w3.Observer.onNext("3b"); + w1.observer.onNext("1a"); + w2.observer.onNext("2a"); + w2.observer.onNext("2b"); + w3.observer.onNext("3a"); + + w1.observer.onNext("1b"); + w2.observer.onNext("2c"); + w2.observer.onNext("2d"); + w3.observer.onNext("3b"); - w1.Observer.onCompleted(); - w2.Observer.onCompleted(); - w3.Observer.onCompleted(); + w1.observer.onCompleted(); + w2.observer.onCompleted(); + w3.observer.onCompleted(); /* we should have been called 5 times on the Observer */ InOrder inOrder = inOrder(w); @@ -851,12 +938,12 @@ private static String getStringValue(Object o) { private static class TestObservable extends Observable { - Observer Observer; + Observer observer; @Override - public Subscription subscribe(Observer Observer) { + public Subscription subscribe(Observer observer) { // just store the variable where it can be accessed so we can manually trigger it - this.Observer = Observer; + this.observer = observer; return Subscriptions.empty(); } diff --git a/rxjava-core/src/main/java/rx/operators/OperationConcat.java b/rxjava-core/src/main/java/rx/operators/OperationConcat.java index af15ee83cc..36f06992cc 100644 --- a/rxjava-core/src/main/java/rx/operators/OperationConcat.java +++ b/rxjava-core/src/main/java/rx/operators/OperationConcat.java @@ -56,30 +56,30 @@ public final class OperationConcat { * An observable sequence of elements to project. * @return An observable sequence whose elements are the result of combining the output from the list of Observables. */ - public static Func1, Subscription> concat(final Observable... sequences) { + public static Func1, Subscription> concat(final Observable... sequences) { return concat(Observable.from(sequences)); } - public static Func1, Subscription> concat(final List> sequences) { + public static Func1, Subscription> concat(final List> sequences) { return concat(Observable.from(sequences)); } - public static Func1, Subscription> concat(final Observable> sequences) { + public static Func1, Subscription> concat(final Observable> sequences) { return new Concat(sequences); } - private static class Concat implements Func1, Subscription> { - private Observable> sequences; + private static class Concat implements Func1, Subscription> { + private Observable> sequences; private SafeObservableSubscription innerSubscription = null; - public Concat(Observable> sequences) { + public Concat(Observable> sequences) { this.sequences = sequences; } - public Subscription call(final Observer observer) { + public Subscription call(final Observer observer) { final AtomicBoolean completedOrErred = new AtomicBoolean(false); final AtomicBoolean allSequencesReceived = new AtomicBoolean(false); - final Queue> nextSequences = new ConcurrentLinkedQueue>(); + final Queue> nextSequences = new ConcurrentLinkedQueue>(); final SafeObservableSubscription outerSubscription = new SafeObservableSubscription(); final Observer reusableObserver = new Observer() { @@ -117,9 +117,9 @@ public void onCompleted() { } }; - outerSubscription.wrap(sequences.subscribe(new Observer>() { + outerSubscription.wrap(sequences.subscribe(new Observer>() { @Override - public void onNext(Observable nextSequence) { + public void onNext(Observable nextSequence) { synchronized (nextSequences) { if (innerSubscription == null) { // We are currently not subscribed to any sequence @@ -217,10 +217,10 @@ public void testConcatObservableOfObservables() { final Observable odds = Observable.from(o); final Observable even = Observable.from(e); - Observable> observableOfObservables = Observable.create(new Func1>, Subscription>() { + Observable> observableOfObservables = Observable.create(new Func1>, Subscription>() { @Override - public Subscription call(Observer> observer) { + public Subscription call(Observer> observer) { // simulate what would happen in an observable observer.onNext(odds); observer.onNext(even); @@ -288,10 +288,10 @@ public void testNestedAsyncConcat() throws Throwable { final CountDownLatch allowThird = new CountDownLatch(1); final AtomicReference parent = new AtomicReference(); - Observable> observableOfObservables = Observable.create(new Func1>, Subscription>() { + Observable> observableOfObservables = Observable.create(new Func1>, Subscription>() { @Override - public Subscription call(final Observer> observer) { + public Subscription call(final Observer> observer) { final BooleanSubscription s = new BooleanSubscription(); parent.set(new Thread(new Runnable() { @@ -404,7 +404,7 @@ public void testBlockedObservableOfObservables() { final CountDownLatch callOnce = new CountDownLatch(1); final CountDownLatch okToContinue = new CountDownLatch(1); TestObservable> observableOfObservables = new TestObservable>(callOnce, okToContinue, odds, even); - Func1, Subscription> concatF = concat(observableOfObservables); + Func1, Subscription> concatF = concat(observableOfObservables); Observable concat = Observable.create(concatF); concat.subscribe(observer); try { @@ -444,7 +444,7 @@ public void testConcatConcurrentWithInfinity() { Observer aObserver = mock(Observer.class); @SuppressWarnings("unchecked") TestObservable> observableOfObservables = new TestObservable>(w1, w2); - Func1, Subscription> concatF = concat(observableOfObservables); + Func1, Subscription> concatF = concat(observableOfObservables); Observable concat = Observable.create(concatF); @@ -480,10 +480,10 @@ public void testConcatNonBlockingObservables() { @SuppressWarnings("unchecked") Observer aObserver = mock(Observer.class); - Observable> observableOfObservables = Observable.create(new Func1>, Subscription>() { + Observable> observableOfObservables = Observable.create(new Func1>, Subscription>() { @Override - public Subscription call(Observer> observer) { + public Subscription call(Observer> observer) { // simulate what would happen in an observable observer.onNext(w1); observer.onNext(w2); @@ -584,7 +584,7 @@ public void testConcatUnsubscribeConcurrent() { Observer aObserver = mock(Observer.class); @SuppressWarnings("unchecked") TestObservable> observableOfObservables = new TestObservable>(w1, w2); - Func1, Subscription> concatF = concat(observableOfObservables); + Func1, Subscription> concatF = concat(observableOfObservables); Observable concat = Observable.create(concatF); @@ -656,7 +656,7 @@ public TestObservable(T seed, int size) { } @Override - public Subscription subscribe(final Observer observer) { + public Subscription subscribe(final Observer observer) { t = new Thread(new Runnable() { @Override diff --git a/rxjava-core/src/main/java/rx/operators/OperationDefer.java b/rxjava-core/src/main/java/rx/operators/OperationDefer.java index 169227f17c..c258b36398 100644 --- a/rxjava-core/src/main/java/rx/operators/OperationDefer.java +++ b/rxjava-core/src/main/java/rx/operators/OperationDefer.java @@ -37,12 +37,12 @@ */ public final class OperationDefer { - public static Func1, Subscription> defer(final Func0> observableFactory) { + public static Func1, Subscription> defer(final Func0> observableFactory) { - return new Func1, Subscription>() { + return new Func1, Subscription>() { @Override - public Subscription call(Observer observer) { - Observable obs = observableFactory.call(); + public Subscription call(Observer observer) { + Observable obs = observableFactory.call(); return obs.subscribe(observer); } }; diff --git a/rxjava-core/src/main/java/rx/operators/OperationDematerialize.java b/rxjava-core/src/main/java/rx/operators/OperationDematerialize.java index 14ac8748b6..52a817a23e 100644 --- a/rxjava-core/src/main/java/rx/operators/OperationDematerialize.java +++ b/rxjava-core/src/main/java/rx/operators/OperationDematerialize.java @@ -45,21 +45,21 @@ public final class OperationDematerialize { * @return An observable sequence exhibiting the behavior corresponding to the source sequence's notification values. * @see Observable.Dematerialize(TSource) Method */ - public static Func1, Subscription> dematerialize(final Observable> sequence) { + public static Func1, Subscription> dematerialize(final Observable> sequence) { return new DematerializeObservable(sequence); } - private static class DematerializeObservable implements Func1, Subscription> { + private static class DematerializeObservable implements Func1, Subscription> { - private final Observable> sequence; + private final Observable> sequence; - public DematerializeObservable(Observable> sequence) { + public DematerializeObservable(Observable> sequence) { this.sequence = sequence; } @Override - public Subscription call(final Observer observer) { - return sequence.subscribe(new Observer>() { + public Subscription call(final Observer observer) { + return sequence.subscribe(new Observer>() { @Override public void onCompleted() { } @@ -69,7 +69,7 @@ public void onError(Throwable e) { } @Override - public void onNext(Notification value) { + public void onNext(Notification value) { switch (value.getKind()) { case OnNext: observer.onNext(value.getValue()); diff --git a/rxjava-core/src/main/java/rx/operators/OperationFilter.java b/rxjava-core/src/main/java/rx/operators/OperationFilter.java index 1e0b7d6fd9..35654f5761 100644 --- a/rxjava-core/src/main/java/rx/operators/OperationFilter.java +++ b/rxjava-core/src/main/java/rx/operators/OperationFilter.java @@ -33,21 +33,21 @@ */ public final class OperationFilter { - public static Func1, Subscription> filter(Observable that, Func1 predicate) { + public static Func1, Subscription> filter(Observable that, Func1 predicate) { return new Filter(that, predicate); } - private static class Filter implements Func1, Subscription> { + private static class Filter implements Func1, Subscription> { - private final Observable that; - private final Func1 predicate; + private final Observable that; + private final Func1 predicate; - public Filter(Observable that, Func1 predicate) { + public Filter(Observable that, Func1 predicate) { this.that = that; this.predicate = predicate; } - public Subscription call(final Observer observer) { + public Subscription call(final Observer observer) { final SafeObservableSubscription subscription = new SafeObservableSubscription(); return subscription.wrap(that.subscribe(new Observer() { public void onNext(T value) { diff --git a/rxjava-core/src/main/java/rx/operators/OperationFinally.java b/rxjava-core/src/main/java/rx/operators/OperationFinally.java index 82fcfd4686..b07ae5c234 100644 --- a/rxjava-core/src/main/java/rx/operators/OperationFinally.java +++ b/rxjava-core/src/main/java/rx/operators/OperationFinally.java @@ -52,32 +52,32 @@ public final class OperationFinally { * the given action will be called. * @see MSDN Observable.Finally method */ - public static Func1, Subscription> finallyDo(final Observable sequence, final Action0 action) { - return new Func1, Subscription>() { + public static Func1, Subscription> finallyDo(final Observable sequence, final Action0 action) { + return new Func1, Subscription>() { @Override - public Subscription call(Observer observer) { + public Subscription call(Observer observer) { return new Finally(sequence, action).call(observer); } }; } - private static class Finally implements Func1, Subscription> { - private final Observable sequence; + private static class Finally implements Func1, Subscription> { + private final Observable sequence; private final Action0 finalAction; - Finally(final Observable sequence, Action0 finalAction) { + Finally(final Observable sequence, Action0 finalAction) { this.sequence = sequence; this.finalAction = finalAction; } - public Subscription call(Observer observer) { + public Subscription call(Observer observer) { return sequence.subscribe(new FinallyObserver(observer)); } private class FinallyObserver implements Observer { - private final Observer observer; + private final Observer observer; - FinallyObserver(Observer observer) { + FinallyObserver(Observer observer) { this.observer = observer; } diff --git a/rxjava-core/src/main/java/rx/operators/OperationGroupBy.java b/rxjava-core/src/main/java/rx/operators/OperationGroupBy.java index 77e04324b0..c26d1b431d 100644 --- a/rxjava-core/src/main/java/rx/operators/OperationGroupBy.java +++ b/rxjava-core/src/main/java/rx/operators/OperationGroupBy.java @@ -48,7 +48,7 @@ */ public final class OperationGroupBy { - public static Func1>, Subscription> groupBy(Observable source, final Func1 keySelector, final Func1 elementSelector) { + public static Func1>, Subscription> groupBy(Observable source, final Func1 keySelector, final Func1 elementSelector) { final Observable> keyval = source.map(new Func1>() { @Override @@ -63,11 +63,11 @@ public KeyValue call(T t) { return new GroupBy(keyval); } - public static Func1>, Subscription> groupBy(Observable source, final Func1 keySelector) { + public static Func1>, Subscription> groupBy(Observable source, final Func1 keySelector) { return groupBy(source, keySelector, Functions. identity()); } - private static class GroupBy implements Func1>, Subscription> { + private static class GroupBy implements Func1>, Subscription> { private final Observable> source; private final ConcurrentHashMap> groupedObservables = new ConcurrentHashMap>(); @@ -80,7 +80,7 @@ private GroupBy(Observable> source) { } @Override - public Subscription call(final Observer> observer) { + public Subscription call(final Observer> observer) { final GroupBy _this = this; actualParentSubscription.wrap(source.subscribe(new Observer>() { @@ -173,27 +173,23 @@ private void unsubscribeKey(K key) { private static class GroupedSubject extends GroupedObservable implements Observer { static GroupedSubject create(final K key, final GroupBy parent) { - @SuppressWarnings("unchecked") - final AtomicReference> subscribedObserver = new AtomicReference>(EMPTY_OBSERVER); - - return new GroupedSubject(key, new Func1, Subscription>() { + final AtomicReference> subscribedObserver = new AtomicReference>(OperationGroupBy.emptyObserver()); + return new GroupedSubject(key, new Func1, Subscription>() { private final SafeObservableSubscription subscription = new SafeObservableSubscription(); @Override - public Subscription call(Observer observer) { + public Subscription call(Observer observer) { // register Observer subscribedObserver.set(observer); parent.subscribeKey(key); return subscription.wrap(new Subscription() { - - @SuppressWarnings("unchecked") @Override public void unsubscribe() { // we remove the Observer so we stop emitting further events (they will be ignored if parent continues to send) - subscribedObserver.set(EMPTY_OBSERVER); + subscribedObserver.set(OperationGroupBy.emptyObserver()); // now we need to notify the parent that we're unsubscribed parent.unsubscribeKey(key); } @@ -202,9 +198,9 @@ public void unsubscribe() { }, subscribedObserver); } - private final AtomicReference> subscribedObserver; + private final AtomicReference> subscribedObserver; - public GroupedSubject(K key, Func1, Subscription> onSubscribe, AtomicReference> subscribedObserver) { + public GroupedSubject(K key, Func1, ? extends Subscription> onSubscribe, AtomicReference> subscribedObserver) { super(key, onSubscribe); this.subscribedObserver = subscribedObserver; } @@ -226,25 +222,24 @@ public void onNext(T v) { } - @SuppressWarnings("rawtypes") - private static Observer EMPTY_OBSERVER = new Observer() { - - @Override - public void onCompleted() { - // do nothing - } - - @Override - public void onError(Throwable e) { - // do nothing - } - - @Override - public void onNext(Object args) { - // do nothing - } - - }; + private static Observer emptyObserver() { + return new Observer() { + @Override + public void onCompleted() { + // do nothing + } + + @Override + public void onError(Throwable e) { + // do nothing + } + + @Override + public void onNext(T t) { + // do nothing + } + }; + } private static class KeyValue { private final K key; @@ -377,10 +372,10 @@ public void testGroupedEventStream() throws Throwable { final int count = 100; final int groupCount = 2; - Observable es = Observable.create(new Func1, Subscription>() { + Observable es = Observable.create(new Func1, Subscription>() { @Override - public Subscription call(final Observer observer) { + public Subscription call(final Observer observer) { System.out.println("*** Subscribing to EventStream ***"); subscribeCounter.incrementAndGet(); new Thread(new Runnable() { @@ -423,7 +418,7 @@ public String call(Event event) { } }); - }; + } }).subscribe(new Observer() { @Override @@ -465,10 +460,10 @@ public void testUnsubscribe() throws InterruptedException { final int count = 100; final int groupCount = 2; - Observable es = Observable.create(new Func1, Subscription>() { + Observable es = Observable.create(new Func1, Subscription>() { @Override - public Subscription call(final Observer observer) { + public Subscription call(final Observer observer) { final BooleanSubscription s = new BooleanSubscription(); System.out.println("testUnsubscribe => *** Subscribing to EventStream ***"); subscribeCounter.incrementAndGet(); @@ -520,7 +515,7 @@ public String call(Event event) { } }); - }; + } }).subscribe(new Observer() { @Override diff --git a/rxjava-core/src/main/java/rx/operators/OperationInterval.java b/rxjava-core/src/main/java/rx/operators/OperationInterval.java index 3b0b00ca15..6cef0c5215 100644 --- a/rxjava-core/src/main/java/rx/operators/OperationInterval.java +++ b/rxjava-core/src/main/java/rx/operators/OperationInterval.java @@ -44,18 +44,18 @@ public final class OperationInterval { /** * Creates an event each time interval. */ - public static Func1, Subscription> interval(long interval, TimeUnit unit) { + public static Func1, Subscription> interval(long interval, TimeUnit unit) { return new Interval(interval, unit, Schedulers.executor(Executors.newSingleThreadScheduledExecutor())); } /** * Creates an event each time interval. */ - public static Func1, Subscription> interval(long interval, TimeUnit unit, Scheduler scheduler) { + public static Func1, Subscription> interval(long interval, TimeUnit unit, Scheduler scheduler) { return new Interval(interval, unit, scheduler); } - private static class Interval implements Func1, Subscription> { + private static class Interval implements Func1, Subscription> { private final long period; private final TimeUnit unit; private final Scheduler scheduler; @@ -69,7 +69,7 @@ private Interval(long period, TimeUnit unit, Scheduler scheduler) { } @Override - public Subscription call(final Observer observer) { + public Subscription call(final Observer observer) { final Subscription wrapped = scheduler.schedulePeriodically(new Action0() { @Override public void call() { diff --git a/rxjava-core/src/main/java/rx/operators/OperationMap.java b/rxjava-core/src/main/java/rx/operators/OperationMap.java index 85ec5b38b3..8c0554b878 100644 --- a/rxjava-core/src/main/java/rx/operators/OperationMap.java +++ b/rxjava-core/src/main/java/rx/operators/OperationMap.java @@ -55,7 +55,7 @@ public final class OperationMap { * the type of the output sequence. * @return a sequence that is the result of applying the transformation function to each item in the input sequence. */ - public static Func1, Subscription> map(Observable sequence, Func1 func) { + public static Func1, Subscription> map(Observable sequence, Func1 func) { return new MapObservable(sequence, func); } @@ -75,7 +75,7 @@ public static Func1, Subscription> map(Observable sequence * the type of the output sequence. * @return a sequence that is the result of applying the transformation function to each item in the input sequence. */ - public static Func1, Subscription> mapMany(Observable sequence, Func1> func) { + public static Func1, Subscription> mapMany(Observable sequence, Func1> func) { return OperationMerge.merge(Observable.create(map(sequence, func))); } @@ -87,17 +87,17 @@ public static Func1, Subscription> mapMany(Observable sequ * @param * the type of the output sequence. */ - private static class MapObservable implements Func1, Subscription> { - public MapObservable(Observable sequence, Func1 func) { + private static class MapObservable implements Func1, Subscription> { + public MapObservable(Observable sequence, Func1 func) { this.sequence = sequence; this.func = func; } - private Observable sequence; + private Observable sequence; - private Func1 func; + private Func1 func; - public Subscription call(Observer observer) { + public Subscription call(Observer observer) { return sequence.subscribe(new MapObserver(observer, func)); } } @@ -111,14 +111,14 @@ public Subscription call(Observer observer) { * the type of the inner observer items. */ private static class MapObserver implements Observer { - public MapObserver(Observer observer, Func1 func) { + public MapObserver(Observer observer, Func1 func) { this.observer = observer; this.func = func; } - Observer observer; + Observer observer; - Func1 func; + Func1 func; public void onNext(T value) { // let the exception be thrown if func fails as a SafeObserver wrapping this will handle it diff --git a/rxjava-core/src/main/java/rx/operators/OperationMaterialize.java b/rxjava-core/src/main/java/rx/operators/OperationMaterialize.java index 279bff006a..39cc1606d1 100644 --- a/rxjava-core/src/main/java/rx/operators/OperationMaterialize.java +++ b/rxjava-core/src/main/java/rx/operators/OperationMaterialize.java @@ -48,20 +48,20 @@ public final class OperationMaterialize { * @return An observable sequence whose elements are the result of materializing the notifications of the given sequence. * @see Observable.Materialize(TSource) Method */ - public static Func1>, Subscription> materialize(final Observable sequence) { + public static Func1>, Subscription> materialize(final Observable sequence) { return new MaterializeObservable(sequence); } - private static class MaterializeObservable implements Func1>, Subscription> { + private static class MaterializeObservable implements Func1>, Subscription> { - private final Observable sequence; + private final Observable sequence; - public MaterializeObservable(Observable sequence) { + public MaterializeObservable(Observable sequence) { this.sequence = sequence; } @Override - public Subscription call(final Observer> observer) { + public Subscription call(final Observer> observer) { return sequence.subscribe(new Observer() { @Override @@ -185,7 +185,7 @@ private static class TestAsyncErrorObservable extends Observable { volatile Thread t; @Override - public Subscription subscribe(final Observer observer) { + public Subscription subscribe(final Observer observer) { t = new Thread(new Runnable() { @Override diff --git a/rxjava-core/src/main/java/rx/operators/OperationMerge.java b/rxjava-core/src/main/java/rx/operators/OperationMerge.java index c183fe957e..a26cad2fd9 100644 --- a/rxjava-core/src/main/java/rx/operators/OperationMerge.java +++ b/rxjava-core/src/main/java/rx/operators/OperationMerge.java @@ -55,29 +55,29 @@ public final class OperationMerge { * @return An observable sequence whose elements are the result of flattening the output from the list of Observables. * @see Observable.Merge(TSource) Method (IObservable(TSource)[]) */ - public static Func1, Subscription> merge(final Observable> o) { + public static Func1, Subscription> merge(final Observable> o) { // wrap in a Func so that if a chain is built up, then asynchronously subscribed to twice we will have 2 instances of Take rather than 1 handing both, which is not thread-safe. - return new Func1, Subscription>() { + return new Func1, Subscription>() { @Override - public Subscription call(Observer observer) { + public Subscription call(Observer observer) { return new MergeObservable(o).call(observer); } }; } - public static Func1, Subscription> merge(final Observable... sequences) { + public static Func1, Subscription> merge(final Observable... sequences) { return merge(Arrays.asList(sequences)); } - public static Func1, Subscription> merge(final List> sequences) { - return merge(Observable.create(new Func1>, Subscription>() { + public static Func1, Subscription> merge(final List> sequences) { + return merge(Observable.create(new Func1>, Subscription>() { private volatile boolean unsubscribed = false; @Override - public Subscription call(Observer> observer) { - for (Observable o : sequences) { + public Subscription call(Observer> observer) { + for (Observable o : sequences) { if (!unsubscribed) { observer.onNext(o); } else { @@ -112,19 +112,19 @@ public void unsubscribe() { * * @param */ - private static final class MergeObservable implements Func1, Subscription> { - private final Observable> sequences; + private static final class MergeObservable implements Func1, Subscription> { + private final Observable> sequences; private final MergeSubscription ourSubscription = new MergeSubscription(); private AtomicBoolean stopped = new AtomicBoolean(false); private volatile boolean parentCompleted = false; private final ConcurrentHashMap childObservers = new ConcurrentHashMap(); private final ConcurrentHashMap childSubscriptions = new ConcurrentHashMap(); - private MergeObservable(Observable> sequences) { + private MergeObservable(Observable> sequences) { this.sequences = sequences; } - public Subscription call(Observer actualObserver) { + public Subscription call(Observer actualObserver) { /** * We must synchronize a merge because we subscribe to multiple sequences in parallel that will each be emitting. @@ -178,7 +178,7 @@ public boolean stop() { * * @param */ - private class ParentObserver implements Observer> { + private class ParentObserver implements Observer> { private final Observer actualObserver; public ParentObserver(Observer actualObserver) { @@ -207,7 +207,7 @@ public void onError(Throwable e) { } @Override - public void onNext(Observable childObservable) { + public void onNext(Observable childObservable) { if (stopped.get()) { // we won't act on any further items return; @@ -295,10 +295,10 @@ public void testMergeObservableOfObservables() { final Observable o1 = new TestSynchronousObservable(); final Observable o2 = new TestSynchronousObservable(); - Observable> observableOfObservables = Observable.create(new Func1>, Subscription>() { + Observable> observableOfObservables = Observable.create(new Func1>, Subscription>() { @Override - public Subscription call(Observer> observer) { + public Subscription call(Observer> observer) { // simulate what would happen in an observable observer.onNext(o1); observer.onNext(o2); @@ -528,7 +528,7 @@ public void testError2() { private static class TestSynchronousObservable extends Observable { @Override - public Subscription subscribe(Observer observer) { + public Subscription subscribe(Observer observer) { observer.onNext("hello"); observer.onCompleted(); @@ -549,7 +549,7 @@ private static class TestASynchronousObservable extends Observable { final CountDownLatch onNextBeingSent = new CountDownLatch(1); @Override - public Subscription subscribe(final Observer observer) { + public Subscription subscribe(final Observer observer) { t = new Thread(new Runnable() { @Override @@ -580,7 +580,7 @@ public void unsubscribe() { */ private static class TestObservable extends Observable { - Observer observer = null; + Observer observer = null; volatile boolean unsubscribed = false; Subscription s = new Subscription() { @@ -609,7 +609,7 @@ public void sendOnError(Throwable e) { } @Override - public Subscription subscribe(final Observer observer) { + public Subscription subscribe(final Observer observer) { this.observer = observer; return s; } @@ -624,7 +624,7 @@ private static class TestErrorObservable extends Observable { } @Override - public Subscription subscribe(Observer observer) { + public Subscription subscribe(Observer observer) { for (String s : valuesToReturn) { if (s == null) { diff --git a/rxjava-core/src/main/java/rx/operators/OperationMergeDelayError.java b/rxjava-core/src/main/java/rx/operators/OperationMergeDelayError.java index a54f193a2f..12341e6367 100644 --- a/rxjava-core/src/main/java/rx/operators/OperationMergeDelayError.java +++ b/rxjava-core/src/main/java/rx/operators/OperationMergeDelayError.java @@ -64,24 +64,24 @@ public final class OperationMergeDelayError { * @return An observable sequence whose elements are the result of flattening the output from the list of Observables. * @see Observable.Merge(TSource) Method (IObservable(TSource)[]) */ - public static Func1, Subscription> mergeDelayError(final Observable> sequences) { + public static Func1, Subscription> mergeDelayError(final Observable> sequences) { // wrap in a Func so that if a chain is built up, then asynchronously subscribed to twice we will have 2 instances of Take rather than 1 handing both, which is not thread-safe. - return new Func1, Subscription>() { + return new Func1, Subscription>() { @Override - public Subscription call(Observer observer) { + public Subscription call(Observer observer) { return new MergeDelayErrorObservable(sequences).call(observer); } }; } - public static Func1, Subscription> mergeDelayError(final Observable... sequences) { - return mergeDelayError(Observable.create(new Func1>, Subscription>() { + public static Func1, Subscription> mergeDelayError(final Observable... sequences) { + return mergeDelayError(Observable.create(new Func1>, Subscription>() { private volatile boolean unsubscribed = false; @Override - public Subscription call(Observer> observer) { - for (Observable o : sequences) { + public Subscription call(Observer> observer) { + for (Observable o : sequences) { if (!unsubscribed) { observer.onNext(o); } else { @@ -104,14 +104,14 @@ public void unsubscribe() { })); } - public static Func1, Subscription> mergeDelayError(final List> sequences) { - return mergeDelayError(Observable.create(new Func1>, Subscription>() { + public static Func1, Subscription> mergeDelayError(final List> sequences) { + return mergeDelayError(Observable.create(new Func1>, Subscription>() { private volatile boolean unsubscribed = false; @Override - public Subscription call(Observer> observer) { - for (Observable o : sequences) { + public Subscription call(Observer> observer) { + for (Observable o : sequences) { if (!unsubscribed) { observer.onNext(o); } else { @@ -146,8 +146,8 @@ public void unsubscribe() { * * @param */ - private static final class MergeDelayErrorObservable implements Func1, Subscription> { - private final Observable> sequences; + private static final class MergeDelayErrorObservable implements Func1, Subscription> { + private final Observable> sequences; private final MergeSubscription ourSubscription = new MergeSubscription(); private AtomicBoolean stopped = new AtomicBoolean(false); private volatile boolean parentCompleted = false; @@ -156,11 +156,11 @@ private static final class MergeDelayErrorObservable implements Func1 onErrorReceived = new ConcurrentLinkedQueue(); - private MergeDelayErrorObservable(Observable> sequences) { + private MergeDelayErrorObservable(Observable> sequences) { this.sequences = sequences; } - public Subscription call(Observer actualObserver) { + public Subscription call(Observer actualObserver) { /** * Subscribe to the parent Observable to get to the children Observables */ @@ -203,10 +203,10 @@ public boolean stop() { * * @param */ - private class ParentObserver implements Observer> { - private final Observer actualObserver; + private class ParentObserver implements Observer> { + private final Observer actualObserver; - public ParentObserver(Observer actualObserver) { + public ParentObserver(Observer actualObserver) { this.actualObserver = actualObserver; } @@ -241,7 +241,7 @@ public void onError(Throwable e) { } @Override - public void onNext(Observable childObservable) { + public void onNext(Observable childObservable) { if (stopped.get()) { // we won't act on any further items return; @@ -271,10 +271,10 @@ public void onNext(Observable childObservable) { */ private class ChildObserver implements Observer { - private final Observer actualObserver; + private final Observer actualObserver; private volatile boolean finished = false; - public ChildObserver(Observer actualObserver) { + public ChildObserver(Observer actualObserver) { this.actualObserver = actualObserver; } @@ -525,10 +525,10 @@ public void testMergeObservableOfObservables() { final Observable o1 = new TestSynchronousObservable(); final Observable o2 = new TestSynchronousObservable(); - Observable> observableOfObservables = Observable.create(new Func1>, Subscription>() { + Observable> observableOfObservables = Observable.create(new Func1>, Subscription>() { @Override - public Subscription call(Observer> observer) { + public Subscription call(Observer> observer) { // simulate what would happen in an observable observer.onNext(o1); observer.onNext(o2); @@ -634,7 +634,7 @@ public void testMergeArrayWithThreading() { private static class TestSynchronousObservable extends Observable { @Override - public Subscription subscribe(Observer observer) { + public Subscription subscribe(Observer observer) { observer.onNext("hello"); observer.onCompleted(); @@ -654,7 +654,7 @@ private static class TestASynchronousObservable extends Observable { Thread t; @Override - public Subscription subscribe(final Observer observer) { + public Subscription subscribe(final Observer observer) { t = new Thread(new Runnable() { @Override @@ -682,7 +682,7 @@ public void unsubscribe() { */ private static class TestObservable extends Observable { - Observer observer = null; + Observer observer = null; volatile boolean unsubscribed = false; Subscription s = new Subscription() { @@ -711,7 +711,7 @@ public void sendOnError(Throwable e) { } @Override - public Subscription subscribe(final Observer observer) { + public Subscription subscribe(final Observer observer) { this.observer = observer; return s; } @@ -726,7 +726,7 @@ private static class TestErrorObservable extends Observable { } @Override - public Subscription subscribe(Observer observer) { + public Subscription subscribe(Observer observer) { boolean errorThrown = false; for (String s : valuesToReturn) { if (s == null) { @@ -765,7 +765,7 @@ private static class TestAsyncErrorObservable extends Observable { Thread t; @Override - public Subscription subscribe(final Observer observer) { + public Subscription subscribe(final Observer observer) { t = new Thread(new Runnable() { @Override diff --git a/rxjava-core/src/main/java/rx/operators/OperationMostRecent.java b/rxjava-core/src/main/java/rx/operators/OperationMostRecent.java index ce7e3dbbcc..0522234e0a 100644 --- a/rxjava-core/src/main/java/rx/operators/OperationMostRecent.java +++ b/rxjava-core/src/main/java/rx/operators/OperationMostRecent.java @@ -37,7 +37,7 @@ */ public final class OperationMostRecent { - public static Iterable mostRecent(final Observable source, T initialValue) { + public static Iterable mostRecent(final Observable source, T initialValue) { MostRecentObserver mostRecentObserver = new MostRecentObserver(initialValue); final MostRecentIterator nextIterator = new MostRecentIterator(mostRecentObserver); @@ -164,7 +164,7 @@ public void testMostRecentWithException() { private static class TestObservable extends Observable { - Observer observer = null; + Observer observer = null; Subscription s; public TestObservable(Subscription s) { @@ -187,7 +187,7 @@ public void sendOnError(Throwable e) { } @Override - public Subscription subscribe(final Observer observer) { + public Subscription subscribe(final Observer observer) { this.observer = observer; return s; } diff --git a/rxjava-core/src/main/java/rx/operators/OperationMulticast.java b/rxjava-core/src/main/java/rx/operators/OperationMulticast.java index 1961bd712c..7452819d99 100644 --- a/rxjava-core/src/main/java/rx/operators/OperationMulticast.java +++ b/rxjava-core/src/main/java/rx/operators/OperationMulticast.java @@ -28,22 +28,22 @@ import rx.util.functions.Func1; public class OperationMulticast { - public static ConnectableObservable multicast(Observable source, final Subject subject) { + public static ConnectableObservable multicast(Observable source, final Subject subject) { return new MulticastConnectableObservable(source, subject); } private static class MulticastConnectableObservable extends ConnectableObservable { private final Object lock = new Object(); - private final Observable source; + private final Observable source; private final Subject subject; private Subscription subscription; - public MulticastConnectableObservable(Observable source, final Subject subject) { - super(new Func1, Subscription>() { + public MulticastConnectableObservable(Observable source, final Subject subject) { + super(new Func1, Subscription>() { @Override - public Subscription call(Observer observer) { + public Subscription call(Observer observer) { return subject.subscribe(observer); } }); @@ -179,7 +179,7 @@ public void testMulticastDisconnect() { private static class TestObservable extends Observable { - Observer observer = new Observer() { + Observer observer = new Observer() { @Override public void onCompleted() { // Do nothing @@ -231,7 +231,7 @@ public void sendOnNext(String value) { } @Override - public Subscription subscribe(final Observer observer) { + public Subscription subscribe(final Observer observer) { this.observer = observer; return s; } diff --git a/rxjava-core/src/main/java/rx/operators/OperationNext.java b/rxjava-core/src/main/java/rx/operators/OperationNext.java index 5c0a8a7553..bcb684ac85 100644 --- a/rxjava-core/src/main/java/rx/operators/OperationNext.java +++ b/rxjava-core/src/main/java/rx/operators/OperationNext.java @@ -48,7 +48,7 @@ */ public final class OperationNext { - public static Iterable next(final Observable items) { + public static Iterable next(final Observable items) { NextObserver nextObserver = new NextObserver(); final NextIterator nextIterator = new NextIterator(nextObserver); @@ -66,9 +66,9 @@ public Iterator iterator() { private static class NextIterator implements Iterator { - private final NextObserver observer; + private final NextObserver observer; - private NextIterator(NextObserver observer) { + private NextIterator(NextObserver observer) { this.observer = observer; } @@ -100,8 +100,8 @@ public void remove() { } } - private static class NextObserver implements Observer> { - private final BlockingQueue> buf = new ArrayBlockingQueue>(1); + private static class NextObserver implements Observer> { + private final BlockingQueue> buf = new ArrayBlockingQueue>(1); private final AtomicBoolean waiting = new AtomicBoolean(false); @Override @@ -115,12 +115,12 @@ public void onError(Throwable e) { } @Override - public void onNext(Notification args) { + public void onNext(Notification args) { if (waiting.getAndSet(false) || !args.isOnNext()) { - Notification toOffer = args; + Notification toOffer = args; while (!buf.offer(toOffer)) { - Notification concurrentItem = buf.poll(); + Notification concurrentItem = buf.poll(); // in case if we won race condition with onComplete/onError method if (!concurrentItem.isOnNext()) { @@ -136,7 +136,7 @@ public void await() { } public boolean isCompleted(boolean rethrowExceptionIfExists) { - Notification lastItem = buf.peek(); + Notification lastItem = buf.peek(); if (lastItem == null) { return false; } @@ -153,7 +153,7 @@ public boolean isCompleted(boolean rethrowExceptionIfExists) { } public T takeNext() throws InterruptedException { - Notification next = buf.take(); + Notification next = buf.take(); if (next.isOnError()) { throw Exceptions.propagate(next.getThrowable()); @@ -269,7 +269,7 @@ public String call() throws Exception { private static class TestObservable extends Observable { - Observer observer = null; + Observer observer = null; Subscription s; public TestObservable(Subscription s) { @@ -292,7 +292,7 @@ public void sendOnError(Throwable e) { } @Override - public Subscription subscribe(final Observer observer) { + public Subscription subscribe(final Observer observer) { this.observer = observer; return s; } @@ -318,10 +318,10 @@ public void testNoBufferingOrBlockingOfSequence() throws Throwable { final CountDownLatch timeHasPassed = new CountDownLatch(COUNT); final AtomicBoolean running = new AtomicBoolean(true); final AtomicInteger count = new AtomicInteger(0); - final Observable obs = Observable.create(new Func1, Subscription>() { + final Observable obs = Observable.create(new Func1, Subscription>() { @Override - public Subscription call(final Observer o) { + public Subscription call(final Observer o) { new Thread(new Runnable() { @Override diff --git a/rxjava-core/src/main/java/rx/operators/OperationObserveOn.java b/rxjava-core/src/main/java/rx/operators/OperationObserveOn.java index 080773c32f..a36e342f75 100644 --- a/rxjava-core/src/main/java/rx/operators/OperationObserveOn.java +++ b/rxjava-core/src/main/java/rx/operators/OperationObserveOn.java @@ -41,21 +41,21 @@ */ public class OperationObserveOn { - public static Func1, Subscription> observeOn(Observable source, Scheduler scheduler) { + public static Func1, Subscription> observeOn(Observable source, Scheduler scheduler) { return new ObserveOn(source, scheduler); } - private static class ObserveOn implements Func1, Subscription> { - private final Observable source; + private static class ObserveOn implements Func1, Subscription> { + private final Observable source; private final Scheduler scheduler; - public ObserveOn(Observable source, Scheduler scheduler) { + public ObserveOn(Observable source, Scheduler scheduler) { this.source = source; this.scheduler = scheduler; } @Override - public Subscription call(final Observer observer) { + public Subscription call(final Observer observer) { if (scheduler instanceof ImmediateScheduler) { // do nothing if we request ImmediateScheduler so we don't invoke overhead return source.subscribe(observer); diff --git a/rxjava-core/src/main/java/rx/operators/OperationOnErrorResumeNextViaFunction.java b/rxjava-core/src/main/java/rx/operators/OperationOnErrorResumeNextViaFunction.java index 7110804dd9..12821d970b 100644 --- a/rxjava-core/src/main/java/rx/operators/OperationOnErrorResumeNextViaFunction.java +++ b/rxjava-core/src/main/java/rx/operators/OperationOnErrorResumeNextViaFunction.java @@ -53,21 +53,21 @@ */ public final class OperationOnErrorResumeNextViaFunction { - public static Func1, Subscription> onErrorResumeNextViaFunction(Observable originalSequence, Func1> resumeFunction) { + public static Func1, Subscription> onErrorResumeNextViaFunction(Observable originalSequence, Func1> resumeFunction) { return new OnErrorResumeNextViaFunction(originalSequence, resumeFunction); } - private static class OnErrorResumeNextViaFunction implements Func1, Subscription> { + private static class OnErrorResumeNextViaFunction implements Func1, Subscription> { - private final Func1> resumeFunction; - private final Observable originalSequence; + private final Func1> resumeFunction; + private final Observable originalSequence; - public OnErrorResumeNextViaFunction(Observable originalSequence, Func1> resumeFunction) { + public OnErrorResumeNextViaFunction(Observable originalSequence, Func1> resumeFunction) { this.resumeFunction = resumeFunction; this.originalSequence = originalSequence; } - public Subscription call(final Observer observer) { + public Subscription call(final Observer observer) { // AtomicReference since we'll be accessing/modifying this across threads so we can switch it if needed final AtomicReference subscriptionRef = new AtomicReference(new SafeObservableSubscription()); @@ -87,7 +87,7 @@ public void onError(Throwable ex) { // check that we have not been unsubscribed before we can process the error if (currentSubscription != null) { try { - Observable resumeSequence = resumeFunction.call(ex); + Observable resumeSequence = resumeFunction.call(ex); /* error occurred, so switch subscription to the 'resumeSequence' */ SafeObservableSubscription innerSubscription = new SafeObservableSubscription(resumeSequence.subscribe(observer)); /* we changed the sequence, so also change the subscription to the one of the 'resumeSequence' instead */ @@ -127,10 +127,10 @@ public static class UnitTest { @Test public void testResumeNextWithSynchronousExecution() { final AtomicReference receivedException = new AtomicReference(); - Observable w = Observable.create(new Func1, Subscription>() { + Observable w = Observable.create(new Func1, Subscription>() { @Override - public Subscription call(Observer observer) { + public Subscription call(Observer observer) { observer.onNext("one"); observer.onError(new Throwable("injected failure")); return Subscriptions.empty(); @@ -245,7 +245,7 @@ public TestObservable(Subscription s, String... values) { } @Override - public Subscription subscribe(final Observer observer) { + public Subscription subscribe(final Observer observer) { System.out.println("TestObservable subscribed to ..."); t = new Thread(new Runnable() { diff --git a/rxjava-core/src/main/java/rx/operators/OperationOnErrorResumeNextViaObservable.java b/rxjava-core/src/main/java/rx/operators/OperationOnErrorResumeNextViaObservable.java index 4ea879bdb9..187f0bdd17 100644 --- a/rxjava-core/src/main/java/rx/operators/OperationOnErrorResumeNextViaObservable.java +++ b/rxjava-core/src/main/java/rx/operators/OperationOnErrorResumeNextViaObservable.java @@ -50,21 +50,21 @@ */ public final class OperationOnErrorResumeNextViaObservable { - public static Func1, Subscription> onErrorResumeNextViaObservable(Observable originalSequence, Observable resumeSequence) { + public static Func1, Subscription> onErrorResumeNextViaObservable(Observable originalSequence, Observable resumeSequence) { return new OnErrorResumeNextViaObservable(originalSequence, resumeSequence); } - private static class OnErrorResumeNextViaObservable implements Func1, Subscription> { + private static class OnErrorResumeNextViaObservable implements Func1, Subscription> { - private final Observable resumeSequence; - private final Observable originalSequence; + private final Observable resumeSequence; + private final Observable originalSequence; - public OnErrorResumeNextViaObservable(Observable originalSequence, Observable resumeSequence) { + public OnErrorResumeNextViaObservable(Observable originalSequence, Observable resumeSequence) { this.resumeSequence = resumeSequence; this.originalSequence = originalSequence; } - public Subscription call(final Observer observer) { + public Subscription call(final Observer observer) { final SafeObservableSubscription subscription = new SafeObservableSubscription(); // AtomicReference since we'll be accessing/modifying this across threads so we can switch it if needed @@ -197,7 +197,7 @@ public TestObservable(Subscription s, String... values) { } @Override - public Subscription subscribe(final Observer observer) { + public Subscription subscribe(final Observer observer) { System.out.println("TestObservable subscribed to ..."); t = new Thread(new Runnable() { diff --git a/rxjava-core/src/main/java/rx/operators/OperationOnErrorReturn.java b/rxjava-core/src/main/java/rx/operators/OperationOnErrorReturn.java index 81a242ec25..f4f6454e19 100644 --- a/rxjava-core/src/main/java/rx/operators/OperationOnErrorReturn.java +++ b/rxjava-core/src/main/java/rx/operators/OperationOnErrorReturn.java @@ -50,20 +50,20 @@ */ public final class OperationOnErrorReturn { - public static Func1, Subscription> onErrorReturn(Observable originalSequence, Func1 resumeFunction) { + public static Func1, Subscription> onErrorReturn(Observable originalSequence, Func1 resumeFunction) { return new OnErrorReturn(originalSequence, resumeFunction); } - private static class OnErrorReturn implements Func1, Subscription> { - private final Func1 resumeFunction; - private final Observable originalSequence; + private static class OnErrorReturn implements Func1, Subscription> { + private final Func1 resumeFunction; + private final Observable originalSequence; - public OnErrorReturn(Observable originalSequence, Func1 resumeFunction) { + public OnErrorReturn(Observable originalSequence, Func1 resumeFunction) { this.resumeFunction = resumeFunction; this.originalSequence = originalSequence; } - public Subscription call(final Observer observer) { + public Subscription call(final Observer observer) { final SafeObservableSubscription subscription = new SafeObservableSubscription(); // AtomicReference since we'll be accessing/modifying this across threads so we can switch it if needed @@ -210,7 +210,7 @@ public TestObservable(Subscription s, String... values) { } @Override - public Subscription subscribe(final Observer observer) { + public Subscription subscribe(final Observer observer) { System.out.println("TestObservable subscribed to ..."); t = new Thread(new Runnable() { diff --git a/rxjava-core/src/main/java/rx/operators/OperationOnExceptionResumeNextViaObservable.java b/rxjava-core/src/main/java/rx/operators/OperationOnExceptionResumeNextViaObservable.java index 9f633d0a2f..53b72b474f 100644 --- a/rxjava-core/src/main/java/rx/operators/OperationOnExceptionResumeNextViaObservable.java +++ b/rxjava-core/src/main/java/rx/operators/OperationOnExceptionResumeNextViaObservable.java @@ -52,21 +52,21 @@ */ public final class OperationOnExceptionResumeNextViaObservable { - public static Func1, Subscription> onExceptionResumeNextViaObservable(Observable originalSequence, Observable resumeSequence) { + public static Func1, Subscription> onExceptionResumeNextViaObservable(Observable originalSequence, Observable resumeSequence) { return new OnExceptionResumeNextViaObservable(originalSequence, resumeSequence); } - private static class OnExceptionResumeNextViaObservable implements Func1, Subscription> { + private static class OnExceptionResumeNextViaObservable implements Func1, Subscription> { - private final Observable resumeSequence; - private final Observable originalSequence; + private final Observable resumeSequence; + private final Observable originalSequence; - public OnExceptionResumeNextViaObservable(Observable originalSequence, Observable resumeSequence) { + public OnExceptionResumeNextViaObservable(Observable originalSequence, Observable resumeSequence) { this.resumeSequence = resumeSequence; this.originalSequence = originalSequence; } - public Subscription call(final Observer observer) { + public Subscription call(final Observer observer) { final SafeObservableSubscription subscription = new SafeObservableSubscription(); // AtomicReference since we'll be accessing/modifying this across threads so we can switch it if needed @@ -292,7 +292,7 @@ public TestObservable(Subscription s, String... values) { } @Override - public Subscription subscribe(final Observer observer) { + public Subscription subscribe(final Observer observer) { System.out.println("TestObservable subscribed to ..."); t = new Thread(new Runnable() { diff --git a/rxjava-core/src/main/java/rx/operators/OperationSample.java b/rxjava-core/src/main/java/rx/operators/OperationSample.java index b389fed150..f980815550 100644 --- a/rxjava-core/src/main/java/rx/operators/OperationSample.java +++ b/rxjava-core/src/main/java/rx/operators/OperationSample.java @@ -48,19 +48,19 @@ public final class OperationSample { /** * Samples the observable sequence at each interval. */ - public static Func1, Subscription> sample(final Observable source, long period, TimeUnit unit) { + public static Func1, Subscription> sample(final Observable source, long period, TimeUnit unit) { return new Sample(source, period, unit, Schedulers.executor(Executors.newSingleThreadScheduledExecutor())); } /** * Samples the observable sequence at each interval. */ - public static Func1, Subscription> sample(final Observable source, long period, TimeUnit unit, Scheduler scheduler) { + public static Func1, Subscription> sample(final Observable source, long period, TimeUnit unit, Scheduler scheduler) { return new Sample(source, period, unit, scheduler); } - private static class Sample implements Func1, Subscription> { - private final Observable source; + private static class Sample implements Func1, Subscription> { + private final Observable source; private final long period; private final TimeUnit unit; private final Scheduler scheduler; @@ -68,7 +68,7 @@ private static class Sample implements Func1, Subscription> { private final AtomicBoolean hasValue = new AtomicBoolean(); private final AtomicReference latestValue = new AtomicReference(); - private Sample(Observable source, long interval, TimeUnit unit, Scheduler scheduler) { + private Sample(Observable source, long interval, TimeUnit unit, Scheduler scheduler) { this.source = source; this.period = interval; this.unit = unit; @@ -76,7 +76,7 @@ private Sample(Observable source, long interval, TimeUnit unit, Scheduler sch } @Override - public Subscription call(final Observer observer) { + public Subscription call(final Observer observer) { Observable clock = Observable.create(OperationInterval.interval(period, unit, scheduler)); final Subscription clockSubscription = clock.subscribe(new Observer() { @Override @@ -136,9 +136,9 @@ public void before() { @Test public void testSample() { - Observable source = Observable.create(new Func1, Subscription>() { + Observable source = Observable.create(new Func1, Subscription>() { @Override - public Subscription call(final Observer observer1) { + public Subscription call(final Observer observer1) { scheduler.schedule(new Action0() { @Override public void call() { diff --git a/rxjava-core/src/main/java/rx/operators/OperationScan.java b/rxjava-core/src/main/java/rx/operators/OperationScan.java index 24cb6ea66f..b2d0bd3037 100644 --- a/rxjava-core/src/main/java/rx/operators/OperationScan.java +++ b/rxjava-core/src/main/java/rx/operators/OperationScan.java @@ -55,7 +55,7 @@ public final class OperationScan { * @return An observable sequence whose elements are the result of accumulating the output from the list of Observables. * @see Observable.Scan(TSource, TAccumulate) Method (IObservable(TSource), TAccumulate, Func(TAccumulate, TSource, TAccumulate)) */ - public static Func1, Subscription> scan(Observable sequence, R initialValue, Func2 accumulator) { + public static Func1, Subscription> scan(Observable sequence, R initialValue, Func2 accumulator) { return new Accumulator(sequence, initialValue, accumulator); } @@ -70,23 +70,23 @@ public static Func1, Subscription> scan(Observable sequenc * @return An observable sequence whose elements are the result of accumulating the output from the list of Observables. * @see Observable.Scan(TSource) Method (IObservable(TSource), Func(TSource, TSource, TSource)) */ - public static Func1, Subscription> scan(Observable sequence, Func2 accumulator) { + public static Func1, Subscription> scan(Observable sequence, Func2 accumulator) { return new AccuWithoutInitialValue(sequence, accumulator); } - private static class AccuWithoutInitialValue implements Func1, Subscription> { - private final Observable sequence; - private final Func2 accumulatorFunction; + private static class AccuWithoutInitialValue implements Func1, Subscription> { + private final Observable sequence; + private final Func2 accumulatorFunction; private AccumulatingObserver accumulatingObserver; - private AccuWithoutInitialValue(Observable sequence, Func2 accumulator) { + private AccuWithoutInitialValue(Observable sequence, Func2 accumulator) { this.sequence = sequence; this.accumulatorFunction = accumulator; } @Override - public Subscription call(final Observer observer) { + public Subscription call(final Observer observer) { return sequence.subscribe(new Observer() { // has to be synchronized so that the initial value is always sent only once. @@ -113,31 +113,31 @@ public void onCompleted() { } } - private static class Accumulator implements Func1, Subscription> { - private final Observable sequence; + private static class Accumulator implements Func1, Subscription> { + private final Observable sequence; private final R initialValue; - private final Func2 accumulatorFunction; + private final Func2 accumulatorFunction; - private Accumulator(Observable sequence, R initialValue, Func2 accumulator) { + private Accumulator(Observable sequence, R initialValue, Func2 accumulator) { this.sequence = sequence; this.initialValue = initialValue; this.accumulatorFunction = accumulator; } @Override - public Subscription call(final Observer observer) { + public Subscription call(final Observer observer) { observer.onNext(initialValue); return sequence.subscribe(new AccumulatingObserver(observer, initialValue, accumulatorFunction)); } } private static class AccumulatingObserver implements Observer { - private final Observer observer; - private final Func2 accumulatorFunction; + private final Observer observer; + private final Func2 accumulatorFunction; private R acc; - private AccumulatingObserver(Observer observer, R initialValue, Func2 accumulator) { + private AccumulatingObserver(Observer observer, R initialValue, Func2 accumulator) { this.observer = observer; this.accumulatorFunction = accumulator; diff --git a/rxjava-core/src/main/java/rx/operators/OperationSkip.java b/rxjava-core/src/main/java/rx/operators/OperationSkip.java index c238b2d2ae..3be0c3a705 100644 --- a/rxjava-core/src/main/java/rx/operators/OperationSkip.java +++ b/rxjava-core/src/main/java/rx/operators/OperationSkip.java @@ -47,12 +47,12 @@ public final class OperationSkip { * * @see Observable.Skip(TSource) Method */ - public static Func1, Subscription> skip(final Observable items, final int num) { + public static Func1, Subscription> skip(final Observable items, final int num) { // wrap in a Observable so that if a chain is built up, then asynchronously subscribed to twice we will have 2 instances of Take rather than 1 handing both, which is not thread-safe. - return new Func1, Subscription>() { + return new Func1, Subscription>() { @Override - public Subscription call(Observer observer) { + public Subscription call(Observer observer) { return new Skip(items, num).call(observer); } @@ -66,16 +66,16 @@ public Subscription call(Observer observer) { * * @param */ - private static class Skip implements Func1, Subscription> { + private static class Skip implements Func1, Subscription> { private final int num; - private final Observable items; + private final Observable items; - Skip(final Observable items, final int num) { + Skip(final Observable items, final int num) { this.num = num; this.items = items; } - public Subscription call(Observer observer) { + public Subscription call(Observer observer) { return items.subscribe(new ItemObserver(observer)); } @@ -85,9 +85,9 @@ public Subscription call(Observer observer) { private class ItemObserver implements Observer { private AtomicInteger counter = new AtomicInteger(); - private final Observer observer; + private final Observer observer; - public ItemObserver(Observer observer) { + public ItemObserver(Observer observer) { this.observer = observer; } diff --git a/rxjava-core/src/main/java/rx/operators/OperationSubscribeOn.java b/rxjava-core/src/main/java/rx/operators/OperationSubscribeOn.java index 6cf73580aa..a197de7a3c 100644 --- a/rxjava-core/src/main/java/rx/operators/OperationSubscribeOn.java +++ b/rxjava-core/src/main/java/rx/operators/OperationSubscribeOn.java @@ -36,21 +36,21 @@ */ public class OperationSubscribeOn { - public static Func1, Subscription> subscribeOn(Observable source, Scheduler scheduler) { + public static Func1, Subscription> subscribeOn(Observable source, Scheduler scheduler) { return new SubscribeOn(source, scheduler); } - private static class SubscribeOn implements Func1, Subscription> { - private final Observable source; + private static class SubscribeOn implements Func1, Subscription> { + private final Observable source; private final Scheduler scheduler; - public SubscribeOn(Observable source, Scheduler scheduler) { + public SubscribeOn(Observable source, Scheduler scheduler) { this.source = source; this.scheduler = scheduler; } @Override - public Subscription call(final Observer observer) { + public Subscription call(final Observer observer) { return scheduler.schedule(null, new Func2() { @Override public Subscription call(Scheduler s, T t) { diff --git a/rxjava-core/src/main/java/rx/operators/OperationSwitch.java b/rxjava-core/src/main/java/rx/operators/OperationSwitch.java index 55d7b94a29..b59ed3cdf2 100644 --- a/rxjava-core/src/main/java/rx/operators/OperationSwitch.java +++ b/rxjava-core/src/main/java/rx/operators/OperationSwitch.java @@ -49,38 +49,38 @@ public final class OperationSwitch { * The {@link Observable} sequence consisting of {@link Observable} sequences. * @return A {@link Func1} which does this transformation. */ - public static Func1, Subscription> switchDo(final Observable> sequences) { - return new Func1, Subscription>() { + public static Func1, Subscription> switchDo(final Observable> sequences) { + return new Func1, Subscription>() { @Override - public Subscription call(Observer observer) { + public Subscription call(Observer observer) { return new Switch(sequences).call(observer); } }; } - private static class Switch implements Func1, Subscription> { + private static class Switch implements Func1, Subscription> { - private final Observable> sequences; + private final Observable> sequences; - public Switch(Observable> sequences) { + public Switch(Observable> sequences) { this.sequences = sequences; } @Override - public Subscription call(Observer observer) { + public Subscription call(Observer observer) { SafeObservableSubscription subscription = new SafeObservableSubscription(); subscription.wrap(sequences.subscribe(new SwitchObserver(observer, subscription))); return subscription; } } - private static class SwitchObserver implements Observer> { + private static class SwitchObserver implements Observer> { - private final Observer observer; + private final Observer observer; private final SafeObservableSubscription parent; private final AtomicReference subsequence = new AtomicReference(); - public SwitchObserver(Observer observer, SafeObservableSubscription parent) { + public SwitchObserver(Observer observer, SafeObservableSubscription parent) { this.observer = observer; this.parent = parent; } @@ -98,7 +98,7 @@ public void onError(Throwable e) { } @Override - public void onNext(Observable args) { + public void onNext(Observable args) { unsubscribeFromSubSequence(); subsequence.set(args.subscribe(new Observer() { @@ -142,21 +142,21 @@ public void before() { @Test public void testSwitchWithComplete() { - Observable> source = Observable.create(new Func1>, Subscription>() { + Observable> source = Observable.create(new Func1>, Subscription>() { @Override - public Subscription call(Observer> observer) { - publishNext(observer, 50, Observable.create(new Func1, Subscription>() { + public Subscription call(Observer> observer) { + publishNext(observer, 50, Observable.create(new Func1, Subscription>() { @Override - public Subscription call(Observer observer) { + public Subscription call(Observer observer) { publishNext(observer, 50, "one"); publishNext(observer, 100, "two"); return Subscriptions.empty(); } })); - publishNext(observer, 200, Observable.create(new Func1, Subscription>() { + publishNext(observer, 200, Observable.create(new Func1, Subscription>() { @Override - public Subscription call(Observer observer) { + public Subscription call(Observer observer) { publishNext(observer, 0, "three"); publishNext(observer, 100, "four"); return Subscriptions.empty(); @@ -202,21 +202,21 @@ public Subscription call(Observer observer) { @Test public void testSwitchWithError() { - Observable> source = Observable.create(new Func1>, Subscription>() { + Observable> source = Observable.create(new Func1>, Subscription>() { @Override - public Subscription call(Observer> observer) { - publishNext(observer, 50, Observable.create(new Func1, Subscription>() { + public Subscription call(Observer> observer) { + publishNext(observer, 50, Observable.create(new Func1, Subscription>() { @Override - public Subscription call(Observer observer) { + public Subscription call(Observer observer) { publishNext(observer, 50, "one"); publishNext(observer, 100, "two"); return Subscriptions.empty(); } })); - publishNext(observer, 200, Observable.create(new Func1, Subscription>() { + publishNext(observer, 200, Observable.create(new Func1, Subscription>() { @Override - public Subscription call(Observer observer) { + public Subscription call(Observer observer) { publishNext(observer, 0, "three"); publishNext(observer, 100, "four"); return Subscriptions.empty(); @@ -262,29 +262,29 @@ public Subscription call(Observer observer) { @Test public void testSwitchWithSubsequenceComplete() { - Observable> source = Observable.create(new Func1>, Subscription>() { + Observable> source = Observable.create(new Func1>, Subscription>() { @Override - public Subscription call(Observer> observer) { - publishNext(observer, 50, Observable.create(new Func1, Subscription>() { + public Subscription call(Observer> observer) { + publishNext(observer, 50, Observable.create(new Func1, Subscription>() { @Override - public Subscription call(Observer observer) { + public Subscription call(Observer observer) { publishNext(observer, 50, "one"); publishNext(observer, 100, "two"); return Subscriptions.empty(); } })); - publishNext(observer, 130, Observable.create(new Func1, Subscription>() { + publishNext(observer, 130, Observable.create(new Func1, Subscription>() { @Override - public Subscription call(Observer observer) { + public Subscription call(Observer observer) { publishCompleted(observer, 0); return Subscriptions.empty(); } })); - publishNext(observer, 150, Observable.create(new Func1, Subscription>() { + publishNext(observer, 150, Observable.create(new Func1, Subscription>() { @Override - public Subscription call(Observer observer) { + public Subscription call(Observer observer) { publishNext(observer, 50, "three"); return Subscriptions.empty(); } @@ -317,29 +317,29 @@ public Subscription call(Observer observer) { @Test public void testSwitchWithSubsequenceError() { - Observable> source = Observable.create(new Func1>, Subscription>() { + Observable> source = Observable.create(new Func1>, Subscription>() { @Override - public Subscription call(Observer> observer) { - publishNext(observer, 50, Observable.create(new Func1, Subscription>() { + public Subscription call(Observer> observer) { + publishNext(observer, 50, Observable.create(new Func1, Subscription>() { @Override - public Subscription call(Observer observer) { + public Subscription call(Observer observer) { publishNext(observer, 50, "one"); publishNext(observer, 100, "two"); return Subscriptions.empty(); } })); - publishNext(observer, 130, Observable.create(new Func1, Subscription>() { + publishNext(observer, 130, Observable.create(new Func1, Subscription>() { @Override - public Subscription call(Observer observer) { + public Subscription call(Observer observer) { publishError(observer, 0, new TestException()); return Subscriptions.empty(); } })); - publishNext(observer, 150, Observable.create(new Func1, Subscription>() { + publishNext(observer, 150, Observable.create(new Func1, Subscription>() { @Override - public Subscription call(Observer observer) { + public Subscription call(Observer observer) { publishNext(observer, 50, "three"); return Subscriptions.empty(); } diff --git a/rxjava-core/src/main/java/rx/operators/OperationSynchronize.java b/rxjava-core/src/main/java/rx/operators/OperationSynchronize.java index b182063038..d559576552 100644 --- a/rxjava-core/src/main/java/rx/operators/OperationSynchronize.java +++ b/rxjava-core/src/main/java/rx/operators/OperationSynchronize.java @@ -57,20 +57,20 @@ public final class OperationSynchronize { * @param * @return the wrapped synchronized observable sequence */ - public static Func1, Subscription> synchronize(Observable observable) { + public static Func1, Subscription> synchronize(Observable observable) { return new Synchronize(observable); } - private static class Synchronize implements Func1, Subscription> { + private static class Synchronize implements Func1, Subscription> { - public Synchronize(Observable innerObservable) { + public Synchronize(Observable innerObservable) { this.innerObservable = innerObservable; } - private Observable innerObservable; + private Observable innerObservable; private SynchronizedObserver atomicObserver; - public Subscription call(Observer observer) { + public Subscription call(Observer observer) { SafeObservableSubscription subscription = new SafeObservableSubscription(); atomicObserver = new SynchronizedObserver(observer, subscription); return subscription.wrap(innerObservable.subscribe(atomicObserver)); @@ -234,7 +234,7 @@ public void testOnErrorAfterOnCompleted() { */ private static class TestObservable extends Observable { - Observer observer = null; + Observer observer = null; public TestObservable(Subscription s) { } @@ -255,7 +255,7 @@ public void sendOnError(Throwable e) { } @Override - public Subscription subscribe(final Observer observer) { + public Subscription subscribe(final Observer observer) { this.observer = observer; return new Subscription() { diff --git a/rxjava-core/src/main/java/rx/operators/OperationTake.java b/rxjava-core/src/main/java/rx/operators/OperationTake.java index 5359688e02..637fa15658 100644 --- a/rxjava-core/src/main/java/rx/operators/OperationTake.java +++ b/rxjava-core/src/main/java/rx/operators/OperationTake.java @@ -50,12 +50,12 @@ public final class OperationTake { * @param num * @return the specified number of contiguous values from the start of the given observable sequence */ - public static Func1, Subscription> take(final Observable items, final int num) { + public static Func1, Subscription> take(final Observable items, final int num) { // wrap in a Func so that if a chain is built up, then asynchronously subscribed to twice we will have 2 instances of Take rather than 1 handing both, which is not thread-safe. - return new Func1, Subscription>() { + return new Func1, Subscription>() { @Override - public Subscription call(Observer observer) { + public Subscription call(Observer observer) { return new Take(items, num).call(observer); } @@ -73,18 +73,18 @@ public Subscription call(Observer observer) { * * @param */ - private static class Take implements Func1, Subscription> { - private final Observable items; + private static class Take implements Func1, Subscription> { + private final Observable items; private final int num; private final SafeObservableSubscription subscription = new SafeObservableSubscription(); - private Take(Observable items, int num) { + private Take(Observable items, int num) { this.items = items; this.num = num; } @Override - public Subscription call(Observer observer) { + public Subscription call(Observer observer) { if (num < 1) { items.subscribe(new Observer() { @@ -111,11 +111,11 @@ public void onNext(T args) } private class ItemObserver implements Observer { - private final Observer observer; + private final Observer observer; private final AtomicInteger counter = new AtomicInteger(); - public ItemObserver(Observer observer) { + public ItemObserver(Observer observer) { this.observer = observer; } @@ -186,10 +186,10 @@ public void testTake2() { @Test public void testTakeDoesntLeakErrors() { - Observable source = Observable.create(new Func1, Subscription>() + Observable source = Observable.create(new Func1, Subscription>() { @Override - public Subscription call(Observer observer) + public Subscription call(Observer observer) { observer.onNext("one"); observer.onError(new Throwable("test failed")); @@ -213,10 +213,10 @@ public Subscription call(Observer observer) public void testTakeZeroDoesntLeakError() { final AtomicBoolean subscribed = new AtomicBoolean(false); final AtomicBoolean unSubscribed = new AtomicBoolean(false); - Observable source = Observable.create(new Func1, Subscription>() + Observable source = Observable.create(new Func1, Subscription>() { @Override - public Subscription call(Observer observer) + public Subscription call(Observer observer) { subscribed.set(true); observer.onError(new Throwable("test failed")); @@ -284,7 +284,7 @@ public TestObservable(Subscription s, String... values) { } @Override - public Subscription subscribe(final Observer observer) { + public Subscription subscribe(final Observer observer) { System.out.println("TestObservable subscribed to ..."); t = new Thread(new Runnable() { diff --git a/rxjava-core/src/main/java/rx/operators/OperationTakeLast.java b/rxjava-core/src/main/java/rx/operators/OperationTakeLast.java index 2abe8381b7..eb4ee4ba0f 100644 --- a/rxjava-core/src/main/java/rx/operators/OperationTakeLast.java +++ b/rxjava-core/src/main/java/rx/operators/OperationTakeLast.java @@ -37,37 +37,37 @@ */ public final class OperationTakeLast { - public static Func1, Subscription> takeLast(final Observable items, final int count) { - return new Func1, Subscription>() { + public static Func1, Subscription> takeLast(final Observable items, final int count) { + return new Func1, Subscription>() { @Override - public Subscription call(Observer observer) { + public Subscription call(Observer observer) { return new TakeLast(items, count).call(observer); } }; } - private static class TakeLast implements Func1, Subscription> { + private static class TakeLast implements Func1, Subscription> { private final int count; - private final Observable items; + private final Observable items; private final SafeObservableSubscription subscription = new SafeObservableSubscription(); - TakeLast(final Observable items, final int count) { + TakeLast(final Observable items, final int count) { this.count = count; this.items = items; } - public Subscription call(Observer observer) { + public Subscription call(Observer observer) { return subscription.wrap(items.subscribe(new ItemObserver(observer))); } private class ItemObserver implements Observer { private LinkedBlockingDeque deque = new LinkedBlockingDeque(count); - private final Observer observer; + private final Observer observer; - public ItemObserver(Observer observer) { + public ItemObserver(Observer observer) { this.observer = observer; } diff --git a/rxjava-core/src/main/java/rx/operators/OperationTakeUntil.java b/rxjava-core/src/main/java/rx/operators/OperationTakeUntil.java index fb33a08642..3f36053fb3 100644 --- a/rxjava-core/src/main/java/rx/operators/OperationTakeUntil.java +++ b/rxjava-core/src/main/java/rx/operators/OperationTakeUntil.java @@ -45,7 +45,7 @@ public class OperationTakeUntil { * the other type. * @return An observable sequence containing the elements of the source sequence up to the point the other sequence interrupted further propagation. */ - public static Observable takeUntil(final Observable source, final Observable other) { + public static Observable takeUntil(final Observable source, final Observable other) { Observable> s = Observable.create(new SourceObservable(source)); Observable> o = Observable.create(new OtherObservable(other)); @@ -89,15 +89,15 @@ private Notification(boolean halt, T value) { } - private static class SourceObservable implements Func1>, Subscription> { - private final Observable sequence; + private static class SourceObservable implements Func1>, Subscription> { + private final Observable sequence; - private SourceObservable(Observable sequence) { + private SourceObservable(Observable sequence) { this.sequence = sequence; } @Override - public Subscription call(final Observer> notificationObserver) { + public Subscription call(final Observer> notificationObserver) { return sequence.subscribe(new Observer() { @Override public void onCompleted() { @@ -117,15 +117,15 @@ public void onNext(T args) { } } - private static class OtherObservable implements Func1>, Subscription> { - private final Observable sequence; + private static class OtherObservable implements Func1>, Subscription> { + private final Observable sequence; - private OtherObservable(Observable sequence) { + private OtherObservable(Observable sequence) { this.sequence = sequence; } @Override - public Subscription call(final Observer> notificationObserver) { + public Subscription call(final Observer> notificationObserver) { return sequence.subscribe(new Observer() { @Override public void onCompleted() { @@ -270,7 +270,7 @@ public void testTakeUntilOtherCompleted() { private static class TestObservable extends Observable { - Observer observer = null; + Observer observer = null; Subscription s; public TestObservable(Subscription s) { @@ -293,7 +293,7 @@ public void sendOnError(Throwable e) { } @Override - public Subscription subscribe(final Observer observer) { + public Subscription subscribe(final Observer observer) { this.observer = observer; return s; } diff --git a/rxjava-core/src/main/java/rx/operators/OperationTakeWhile.java b/rxjava-core/src/main/java/rx/operators/OperationTakeWhile.java index 12038e72b0..f33dd69e7e 100644 --- a/rxjava-core/src/main/java/rx/operators/OperationTakeWhile.java +++ b/rxjava-core/src/main/java/rx/operators/OperationTakeWhile.java @@ -48,7 +48,7 @@ public final class OperationTakeWhile { * a function to test each source element for a condition * @return sequence of observable values from the start as long as the predicate is true */ - public static Func1, Subscription> takeWhile(final Observable items, final Func1 predicate) { + public static Func1, Subscription> takeWhile(final Observable items, final Func1 predicate) { return takeWhileWithIndex(items, OperationTakeWhile. skipIndex(predicate)); } @@ -60,19 +60,19 @@ public static Func1, Subscription> takeWhile(final Observable * a function to test each element for a condition; the second parameter of the function represents the index of the source element; otherwise, false. * @return sequence of observable values from the start as long as the predicate is true */ - public static Func1, Subscription> takeWhileWithIndex(final Observable items, final Func2 predicate) { + public static Func1, Subscription> takeWhileWithIndex(final Observable items, final Func2 predicate) { // wrap in a Func so that if a chain is built up, then asynchronously subscribed to twice we will have 2 instances of Take rather than 1 handing both, which is not thread-safe. - return new Func1, Subscription>() { + return new Func1, Subscription>() { @Override - public Subscription call(Observer observer) { + public Subscription call(Observer observer) { return new TakeWhile(items, predicate).call(observer); } }; } - private static Func2 skipIndex(final Func1 underlying) { + private static Func2 skipIndex(final Func1 underlying) { return new Func2() { @Override public Boolean call(T input, Integer index) { @@ -92,27 +92,27 @@ public Boolean call(T input, Integer index) { * * @param */ - private static class TakeWhile implements Func1, Subscription> { - private final Observable items; - private final Func2 predicate; + private static class TakeWhile implements Func1, Subscription> { + private final Observable items; + private final Func2 predicate; private final SafeObservableSubscription subscription = new SafeObservableSubscription(); - private TakeWhile(Observable items, Func2 predicate) { + private TakeWhile(Observable items, Func2 predicate) { this.items = items; this.predicate = predicate; } @Override - public Subscription call(Observer observer) { + public Subscription call(Observer observer) { return subscription.wrap(items.subscribe(new ItemObserver(observer))); } private class ItemObserver implements Observer { - private final Observer observer; + private final Observer observer; private final AtomicInteger counter = new AtomicInteger(); - public ItemObserver(Observer observer) { + public ItemObserver(Observer observer) { // Using AtomicObserver because the unsubscribe, onCompleted, onError and error handling behavior // needs "isFinished" logic to not send duplicated events // The 'testTakeWhile1' and 'testTakeWhile2' tests fail without this. @@ -231,10 +231,10 @@ public Boolean call(String input, Integer index) @Test public void testTakeWhileDoesntLeakErrors() { - Observable source = Observable.create(new Func1, Subscription>() + Observable source = Observable.create(new Func1, Subscription>() { @Override - public Subscription call(Observer observer) + public Subscription call(Observer observer) { observer.onNext("one"); observer.onError(new Throwable("test failed")); @@ -325,7 +325,7 @@ public TestObservable(Subscription s, String... values) { } @Override - public Subscription subscribe(final Observer observer) { + public Subscription subscribe(final Observer observer) { System.out.println("TestObservable subscribed to ..."); t = new Thread(new Runnable() { diff --git a/rxjava-core/src/main/java/rx/operators/OperationTimestamp.java b/rxjava-core/src/main/java/rx/operators/OperationTimestamp.java index 0b3dc7536c..5072801b82 100644 --- a/rxjava-core/src/main/java/rx/operators/OperationTimestamp.java +++ b/rxjava-core/src/main/java/rx/operators/OperationTimestamp.java @@ -37,7 +37,7 @@ public final class OperationTimestamp { * the type of the input sequence. * @return a sequence of timestamped values created by adding timestamps to each item in the input sequence. */ - public static Func1>, Subscription> timestamp(Observable sequence) { + public static Func1>, Subscription> timestamp(Observable sequence) { return OperationMap.map(sequence, new Func1>() { @Override public Timestamped call(T value) { diff --git a/rxjava-core/src/main/java/rx/operators/OperationToFuture.java b/rxjava-core/src/main/java/rx/operators/OperationToFuture.java index 3af8435d76..5f80baf44a 100644 --- a/rxjava-core/src/main/java/rx/operators/OperationToFuture.java +++ b/rxjava-core/src/main/java/rx/operators/OperationToFuture.java @@ -52,7 +52,7 @@ public class OperationToFuture { * the type of source. * @return the Future to retrieve a single elements from an Observable */ - public static Future toFuture(Observable that) { + public static Future toFuture(Observable that) { final CountDownLatch finished = new CountDownLatch(1); final AtomicReference value = new AtomicReference(); @@ -162,10 +162,10 @@ public void testExceptionWithMoreThanOneElement() throws InterruptedException, E @Test public void testToFutureWithException() { - Observable obs = Observable.create(new Func1, Subscription>() { + Observable obs = Observable.create(new Func1, Subscription>() { @Override - public Subscription call(Observer observer) { + public Subscription call(Observer observer) { observer.onNext("one"); observer.onError(new TestException()); return Subscriptions.empty(); diff --git a/rxjava-core/src/main/java/rx/operators/OperationToIterator.java b/rxjava-core/src/main/java/rx/operators/OperationToIterator.java index f48f56be4f..b8ee47c51a 100644 --- a/rxjava-core/src/main/java/rx/operators/OperationToIterator.java +++ b/rxjava-core/src/main/java/rx/operators/OperationToIterator.java @@ -47,10 +47,10 @@ public class OperationToIterator { * the type of source. * @return the iterator that could be used to iterate over the elements of the observable. */ - public static Iterator toIterator(Observable source) { - final BlockingQueue> notifications = new LinkedBlockingQueue>(); + public static Iterator toIterator(Observable source) { + final BlockingQueue> notifications = new LinkedBlockingQueue>(); - source.materialize().subscribe(new Observer>() { + source.materialize().subscribe(new Observer>() { @Override public void onCompleted() { // ignore @@ -62,13 +62,13 @@ public void onError(Throwable e) { } @Override - public void onNext(Notification args) { + public void onNext(Notification args) { notifications.offer(args); } }); return new Iterator() { - private Notification buf; + private Notification buf; @Override public boolean hasNext() { @@ -92,7 +92,7 @@ public T next() { return result; } - private Notification take() { + private Notification take() { try { return notifications.take(); } catch (InterruptedException e) { @@ -128,10 +128,10 @@ public void testToIterator() { @Test(expected = TestException.class) public void testToIteratorWithException() { - Observable obs = Observable.create(new Func1, Subscription>() { + Observable obs = Observable.create(new Func1, Subscription>() { @Override - public Subscription call(Observer observer) { + public Subscription call(Observer observer) { observer.onNext("one"); observer.onError(new TestException()); return Subscriptions.empty(); diff --git a/rxjava-core/src/main/java/rx/operators/OperationToObservableFuture.java b/rxjava-core/src/main/java/rx/operators/OperationToObservableFuture.java index 33c22639d6..c2ef17f312 100644 --- a/rxjava-core/src/main/java/rx/operators/OperationToObservableFuture.java +++ b/rxjava-core/src/main/java/rx/operators/OperationToObservableFuture.java @@ -39,27 +39,27 @@ * Observable.subscribe(Observer) does nothing. */ public class OperationToObservableFuture { - private static class ToObservableFuture implements Func1, Subscription> { - private final Future that; + private static class ToObservableFuture implements Func1, Subscription> { + private final Future that; private final Long time; private final TimeUnit unit; - public ToObservableFuture(Future that) { + public ToObservableFuture(Future that) { this.that = that; this.time = null; this.unit = null; } - public ToObservableFuture(Future that, long time, TimeUnit unit) { + public ToObservableFuture(Future that, long time, TimeUnit unit) { this.that = that; this.time = time; this.unit = unit; } @Override - public Subscription call(Observer observer) { + public Subscription call(Observer observer) { try { - T value = (time == null) ? that.get() : that.get(time, unit); + T value = (time == null) ? (T) that.get() : (T) that.get(time, unit); if (!that.isCancelled()) { observer.onNext(value); @@ -75,11 +75,11 @@ public Subscription call(Observer observer) { } } - public static Func1, Subscription> toObservableFuture(final Future that) { + public static Func1, Subscription> toObservableFuture(final Future that) { return new ToObservableFuture(that); } - public static Func1, Subscription> toObservableFuture(final Future that, long time, TimeUnit unit) { + public static Func1, Subscription> toObservableFuture(final Future that, long time, TimeUnit unit) { return new ToObservableFuture(that, time, unit); } diff --git a/rxjava-core/src/main/java/rx/operators/OperationToObservableIterable.java b/rxjava-core/src/main/java/rx/operators/OperationToObservableIterable.java index 0976f9113c..58dae4db11 100644 --- a/rxjava-core/src/main/java/rx/operators/OperationToObservableIterable.java +++ b/rxjava-core/src/main/java/rx/operators/OperationToObservableIterable.java @@ -39,18 +39,18 @@ */ public final class OperationToObservableIterable { - public static Func1, Subscription> toObservableIterable(Iterable list) { + public static Func1, Subscription> toObservableIterable(Iterable list) { return new ToObservableIterable(list); } - private static class ToObservableIterable implements Func1, Subscription> { - public ToObservableIterable(Iterable list) { + private static class ToObservableIterable implements Func1, Subscription> { + public ToObservableIterable(Iterable list) { this.iterable = list; } - public Iterable iterable; + public Iterable iterable; - public Subscription call(Observer observer) { + public Subscription call(Observer observer) { for (T item : iterable) { observer.onNext(item); } diff --git a/rxjava-core/src/main/java/rx/operators/OperationToObservableList.java b/rxjava-core/src/main/java/rx/operators/OperationToObservableList.java index 7258938d11..8117edaebc 100644 --- a/rxjava-core/src/main/java/rx/operators/OperationToObservableList.java +++ b/rxjava-core/src/main/java/rx/operators/OperationToObservableList.java @@ -47,19 +47,19 @@ */ public final class OperationToObservableList { - public static Func1>, Subscription> toObservableList(Observable that) { + public static Func1>, Subscription> toObservableList(Observable that) { return new ToObservableList(that); } - private static class ToObservableList implements Func1>, Subscription> { + private static class ToObservableList implements Func1>, Subscription> { - private final Observable that; + private final Observable that; - public ToObservableList(Observable that) { + public ToObservableList(Observable that) { this.that = that; } - public Subscription call(final Observer> observer) { + public Subscription call(final Observer> observer) { return that.subscribe(new Observer() { final ConcurrentLinkedQueue list = new ConcurrentLinkedQueue(); diff --git a/rxjava-core/src/main/java/rx/operators/OperationToObservableSortedList.java b/rxjava-core/src/main/java/rx/operators/OperationToObservableSortedList.java index 536def4cd2..7d34ea335e 100644 --- a/rxjava-core/src/main/java/rx/operators/OperationToObservableSortedList.java +++ b/rxjava-core/src/main/java/rx/operators/OperationToObservableSortedList.java @@ -53,7 +53,7 @@ public final class OperationToObservableSortedList { * if T objects do not implement Comparable * @return an observable containing the sorted list */ - public static Func1>, Subscription> toSortedList(Observable sequence) { + public static Func1>, Subscription> toSortedList(Observable sequence) { return new ToObservableSortedList(sequence); } @@ -64,28 +64,28 @@ public static Func1>, Subscription> toSortedList(Observable * @param sortFunction * @return an observable containing the sorted list */ - public static Func1>, Subscription> toSortedList(Observable sequence, Func2 sortFunction) { + public static Func1>, Subscription> toSortedList(Observable sequence, Func2 sortFunction) { return new ToObservableSortedList(sequence, sortFunction); } - private static class ToObservableSortedList implements Func1>, Subscription> { + private static class ToObservableSortedList implements Func1>, Subscription> { - private final Observable that; + private final Observable that; private final ConcurrentLinkedQueue list = new ConcurrentLinkedQueue(); - private final Func2 sortFunction; + private final Func2 sortFunction; // unchecked as we're support Object for the default @SuppressWarnings("unchecked") - private ToObservableSortedList(Observable that) { + private ToObservableSortedList(Observable that) { this(that, defaultSortFunction); } - private ToObservableSortedList(Observable that, Func2 sortFunction) { + private ToObservableSortedList(Observable that, Func2 sortFunction) { this.that = that; this.sortFunction = sortFunction; } - public Subscription call(final Observer> observer) { + public Subscription call(final Observer> observer) { return that.subscribe(new Observer() { public void onNext(T value) { // onNext can be concurrently executed so list must be thread-safe diff --git a/rxjava-core/src/main/java/rx/operators/OperationZip.java b/rxjava-core/src/main/java/rx/operators/OperationZip.java index 92d987ffa7..4bcee8854a 100644 --- a/rxjava-core/src/main/java/rx/operators/OperationZip.java +++ b/rxjava-core/src/main/java/rx/operators/OperationZip.java @@ -35,6 +35,11 @@ import rx.util.functions.Func2; import rx.util.functions.Func3; import rx.util.functions.Func4; +import rx.util.functions.Func5; +import rx.util.functions.Func6; +import rx.util.functions.Func7; +import rx.util.functions.Func8; +import rx.util.functions.Func9; import rx.util.functions.FuncN; import rx.util.functions.Functions; @@ -54,35 +59,98 @@ */ public final class OperationZip { - public static Func1, Subscription> zip(Observable w0, Observable w1, Func2 zipFunction) { + public static Func1, Subscription> zip(Observable o1, Observable o2, Func2 zipFunction) { Aggregator a = new Aggregator(Functions.fromFunc(zipFunction)); - a.addObserver(new ZipObserver(a, w0)); - a.addObserver(new ZipObserver(a, w1)); + a.addObserver(new ZipObserver(a, o1)); + a.addObserver(new ZipObserver(a, o2)); return a; } - public static Func1, Subscription> zip(Observable w0, Observable w1, Observable w2, Func3 zipFunction) { + public static Func1, Subscription> zip(Observable o1, Observable o2, Observable o3, Func3 zipFunction) { Aggregator a = new Aggregator(Functions.fromFunc(zipFunction)); - a.addObserver(new ZipObserver(a, w0)); - a.addObserver(new ZipObserver(a, w1)); - a.addObserver(new ZipObserver(a, w2)); + a.addObserver(new ZipObserver(a, o1)); + a.addObserver(new ZipObserver(a, o2)); + a.addObserver(new ZipObserver(a, o3)); return a; } - public static Func1, Subscription> zip(Observable w0, Observable w1, Observable w2, Observable w3, Func4 zipFunction) { + public static Func1, Subscription> zip(Observable o1, Observable o2, Observable o3, Observable o4, Func4 zipFunction) { Aggregator a = new Aggregator(Functions.fromFunc(zipFunction)); - a.addObserver(new ZipObserver(a, w0)); - a.addObserver(new ZipObserver(a, w1)); - a.addObserver(new ZipObserver(a, w2)); - a.addObserver(new ZipObserver(a, w3)); + a.addObserver(new ZipObserver(a, o1)); + a.addObserver(new ZipObserver(a, o2)); + a.addObserver(new ZipObserver(a, o3)); + a.addObserver(new ZipObserver(a, o4)); return a; } - @SuppressWarnings("unchecked") - public static Func1, Subscription> zip(Collection> ws, FuncN zipFunction) { - Aggregator a = new Aggregator(zipFunction); - for (Observable w : ws) { - ZipObserver zipObserver = new ZipObserver(a, w); + public static Func1, Subscription> zip(Observable o1, Observable o2, Observable o3, Observable o4, Observable o5, Func5 zipFunction) { + Aggregator a = new Aggregator(Functions.fromFunc(zipFunction)); + a.addObserver(new ZipObserver(a, o1)); + a.addObserver(new ZipObserver(a, o2)); + a.addObserver(new ZipObserver(a, o3)); + a.addObserver(new ZipObserver(a, o4)); + a.addObserver(new ZipObserver(a, o5)); + return a; + } + + public static Func1, Subscription> zip(Observable o1, Observable o2, Observable o3, Observable o4, Observable o5, Observable o6, + Func6 zipFunction) { + Aggregator a = new Aggregator(Functions.fromFunc(zipFunction)); + a.addObserver(new ZipObserver(a, o1)); + a.addObserver(new ZipObserver(a, o2)); + a.addObserver(new ZipObserver(a, o3)); + a.addObserver(new ZipObserver(a, o4)); + a.addObserver(new ZipObserver(a, o5)); + a.addObserver(new ZipObserver(a, o6)); + return a; + } + + public static Func1, Subscription> zip(Observable o1, Observable o2, Observable o3, Observable o4, Observable o5, Observable o6, Observable o7, + Func7 zipFunction) { + Aggregator a = new Aggregator(Functions.fromFunc(zipFunction)); + a.addObserver(new ZipObserver(a, o1)); + a.addObserver(new ZipObserver(a, o2)); + a.addObserver(new ZipObserver(a, o3)); + a.addObserver(new ZipObserver(a, o4)); + a.addObserver(new ZipObserver(a, o5)); + a.addObserver(new ZipObserver(a, o6)); + a.addObserver(new ZipObserver(a, o7)); + return a; + } + + public static Func1, Subscription> zip(Observable o1, Observable o2, Observable o3, Observable o4, Observable o5, Observable o6, Observable o7, Observable o8, + Func8 zipFunction) { + Aggregator a = new Aggregator(Functions.fromFunc(zipFunction)); + a.addObserver(new ZipObserver(a, o1)); + a.addObserver(new ZipObserver(a, o2)); + a.addObserver(new ZipObserver(a, o3)); + a.addObserver(new ZipObserver(a, o4)); + a.addObserver(new ZipObserver(a, o5)); + a.addObserver(new ZipObserver(a, o6)); + a.addObserver(new ZipObserver(a, o7)); + a.addObserver(new ZipObserver(a, o8)); + return a; + } + + public static Func1, Subscription> zip(Observable o1, Observable o2, Observable o3, Observable o4, Observable o5, Observable o6, Observable o7, Observable o8, + Observable o9, Func9 zipFunction) { + Aggregator a = new Aggregator(Functions.fromFunc(zipFunction)); + a.addObserver(new ZipObserver(a, o1)); + a.addObserver(new ZipObserver(a, o2)); + a.addObserver(new ZipObserver(a, o3)); + a.addObserver(new ZipObserver(a, o4)); + a.addObserver(new ZipObserver(a, o5)); + a.addObserver(new ZipObserver(a, o6)); + a.addObserver(new ZipObserver(a, o7)); + a.addObserver(new ZipObserver(a, o8)); + a.addObserver(new ZipObserver(a, o9)); + return a; + } + + public static Func1, Subscription> zip(Collection> ws, FuncN zipFunction) { + Aggregator a = new Aggregator(zipFunction); + for (Observable w : ws) { + ZipObserver zipObserver = new ZipObserver(a, w); a.addObserver(zipObserver); } return a; @@ -92,12 +160,12 @@ public static Func1, Subscription> zip(Collection> * ThreadSafe */ private static class ZipObserver implements Observer { - final Observable w; + final Observable w; final Aggregator a; private final SafeObservableSubscription subscription = new SafeObservableSubscription(); private final AtomicBoolean subscribed = new AtomicBoolean(false); - public ZipObserver(Aggregator a, Observable w) { + public ZipObserver(Aggregator a, Observable w) { this.a = a; this.w = w; } @@ -136,10 +204,10 @@ public void onNext(T args) { * * @param */ - private static class Aggregator implements Func1, Subscription> { + private static class Aggregator implements Func1, Subscription> { private volatile SynchronizedObserver observer; - private final FuncN zipFunction; + private final FuncN zipFunction; private final AtomicBoolean started = new AtomicBoolean(false); private final AtomicBoolean running = new AtomicBoolean(true); private final ConcurrentHashMap, Boolean> completed = new ConcurrentHashMap, Boolean>(); @@ -149,13 +217,13 @@ private static class Aggregator implements Func1, Subscription> { /* we use a ConcurrentLinkedQueue to retain ordering (I'd like to just use a ConcurrentLinkedHashMap for 'receivedValuesPerObserver' but that doesn't exist in standard java */ private ConcurrentLinkedQueue> observers = new ConcurrentLinkedQueue>(); - public Aggregator(FuncN zipFunction) { + public Aggregator(FuncN zipFunction) { this.zipFunction = zipFunction; } /** * Receive notification of a Observer starting (meaning we should require it for aggregation) - * + * * Thread Safety => Invoke ONLY from the static factory methods at top of this class which are always an atomic execution by a single thread. * * @param w @@ -244,7 +312,7 @@ void next(ZipObserver w, Object arg) { } @Override - public Subscription call(Observer observer) { + public Subscription call(Observer observer) { if (started.compareAndSet(false, true)) { SafeObservableSubscription subscription = new SafeObservableSubscription(); this.observer = new SynchronizedObserver(observer, subscription); @@ -295,15 +363,17 @@ private void stop() { } public static class UnitTest { - + @SuppressWarnings("unchecked") @Test public void testCollectionSizeDifferentThanFunction() { - FuncN zipr = Functions.from(getConcatStringIntegerIntArrayZipr()); + FuncN zipr = Functions.fromFunc(getConcatStringIntegerIntArrayZipr()); + //Func3 /* define a Observer to receive aggregated events */ Observer aObserver = mock(Observer.class); + @SuppressWarnings("rawtypes") Collection ws = java.util.Collections.singleton(Observable.from("one", "two")); Observable w = Observable.create(zip(ws, zipr)); w.subscribe(aObserver); @@ -328,18 +398,18 @@ public void testZippingDifferentLengthObservableSequences1() { /* simulate sending data */ // once for w1 - w1.Observer.onNext("1a"); - w1.Observer.onCompleted(); + w1.observer.onNext("1a"); + w1.observer.onCompleted(); // twice for w2 - w2.Observer.onNext("2a"); - w2.Observer.onNext("2b"); - w2.Observer.onCompleted(); + w2.observer.onNext("2a"); + w2.observer.onNext("2b"); + w2.observer.onCompleted(); // 4 times for w3 - w3.Observer.onNext("3a"); - w3.Observer.onNext("3b"); - w3.Observer.onNext("3c"); - w3.Observer.onNext("3d"); - w3.Observer.onCompleted(); + w3.observer.onNext("3a"); + w3.observer.onNext("3b"); + w3.observer.onNext("3c"); + w3.observer.onNext("3d"); + w3.observer.onCompleted(); /* we should have been called 1 time on the Observer */ InOrder inOrder = inOrder(w); @@ -362,18 +432,18 @@ public void testZippingDifferentLengthObservableSequences2() { /* simulate sending data */ // 4 times for w1 - w1.Observer.onNext("1a"); - w1.Observer.onNext("1b"); - w1.Observer.onNext("1c"); - w1.Observer.onNext("1d"); - w1.Observer.onCompleted(); + w1.observer.onNext("1a"); + w1.observer.onNext("1b"); + w1.observer.onNext("1c"); + w1.observer.onNext("1d"); + w1.observer.onCompleted(); // twice for w2 - w2.Observer.onNext("2a"); - w2.Observer.onNext("2b"); - w2.Observer.onCompleted(); + w2.observer.onNext("2a"); + w2.observer.onNext("2b"); + w2.observer.onCompleted(); // 1 times for w3 - w3.Observer.onNext("3a"); - w3.Observer.onCompleted(); + w3.observer.onNext("3a"); + w3.observer.onCompleted(); /* we should have been called 1 time on the Observer */ InOrder inOrder = inOrder(w); @@ -841,12 +911,12 @@ private static String getStringValue(Object o) { private static class TestObservable extends Observable { - Observer Observer; + Observer observer; @Override - public Subscription subscribe(Observer Observer) { + public Subscription subscribe(Observer Observer) { // just store the variable where it can be accessed so we can manually trigger it - this.Observer = Observer; + this.observer = Observer; return Subscriptions.empty(); } diff --git a/rxjava-core/src/main/java/rx/operators/OperatorTester.java b/rxjava-core/src/main/java/rx/operators/OperatorTester.java index 664dd37cc8..62b41a0567 100644 --- a/rxjava-core/src/main/java/rx/operators/OperatorTester.java +++ b/rxjava-core/src/main/java/rx/operators/OperatorTester.java @@ -64,7 +64,7 @@ public Subscription schedule(Action0 action) { } @Override - public Subscription schedule(T state, Func2 action) { + public Subscription schedule(T state, Func2 action) { return underlying.schedule(state, action); } @@ -74,7 +74,7 @@ public Subscription schedule(Action0 action, long dueTime, TimeUnit unit) { } @Override - public Subscription schedule(T state, Func2 action, long dueTime, TimeUnit unit) { + public Subscription schedule(T state, Func2 action, long dueTime, TimeUnit unit) { return underlying.schedule(state, action, dueTime, unit); } @@ -84,7 +84,7 @@ public Subscription schedulePeriodically(Action0 action, long initialDelay, long } @Override - public Subscription schedulePeriodically(T state, Func2 action, long initialDelay, long period, TimeUnit unit) { + public Subscription schedulePeriodically(T state, Func2 action, long initialDelay, long period, TimeUnit unit) { return underlying.schedulePeriodically(state, action, initialDelay, period, unit); } diff --git a/rxjava-core/src/main/java/rx/operators/SafeObserver.java b/rxjava-core/src/main/java/rx/operators/SafeObserver.java index d0c56ad110..3e6508dac9 100644 --- a/rxjava-core/src/main/java/rx/operators/SafeObserver.java +++ b/rxjava-core/src/main/java/rx/operators/SafeObserver.java @@ -57,11 +57,11 @@ */ public class SafeObserver implements Observer { - private final Observer actual; + private final Observer actual; private final AtomicBoolean isFinished = new AtomicBoolean(false); private final SafeObservableSubscription subscription; - public SafeObserver(SafeObservableSubscription subscription, Observer actual) { + public SafeObserver(SafeObservableSubscription subscription, Observer actual) { this.subscription = subscription; this.actual = actual; } diff --git a/rxjava-core/src/main/java/rx/operators/ScheduledObserver.java b/rxjava-core/src/main/java/rx/operators/ScheduledObserver.java index 205dfb0ca7..a5eff1b852 100644 --- a/rxjava-core/src/main/java/rx/operators/ScheduledObserver.java +++ b/rxjava-core/src/main/java/rx/operators/ScheduledObserver.java @@ -24,13 +24,13 @@ import rx.util.functions.Action0; /* package */class ScheduledObserver implements Observer { - private final Observer underlying; + private final Observer underlying; private final Scheduler scheduler; - private final ConcurrentLinkedQueue> queue = new ConcurrentLinkedQueue>(); + private final ConcurrentLinkedQueue> queue = new ConcurrentLinkedQueue>(); private final AtomicInteger counter = new AtomicInteger(0); - public ScheduledObserver(Observer underlying, Scheduler scheduler) { + public ScheduledObserver(Observer underlying, Scheduler scheduler) { this.underlying = underlying; this.scheduler = scheduler; } @@ -50,7 +50,7 @@ public void onNext(final T args) { enqueue(new Notification(args)); } - private void enqueue(Notification notification) { + private void enqueue(Notification notification) { // this must happen before 'counter' is used to provide synchronization between threads queue.offer(notification); @@ -66,7 +66,7 @@ private void processQueue() { scheduler.schedule(new Action0() { @Override public void call() { - Notification not = queue.poll(); + Notification not = queue.poll(); switch (not.getKind()) { case OnNext: diff --git a/rxjava-core/src/main/java/rx/operators/SynchronizedObserver.java b/rxjava-core/src/main/java/rx/operators/SynchronizedObserver.java index 37b36f2c27..d4cd28a849 100644 --- a/rxjava-core/src/main/java/rx/operators/SynchronizedObserver.java +++ b/rxjava-core/src/main/java/rx/operators/SynchronizedObserver.java @@ -464,7 +464,7 @@ public int assertEvents(TestConcurrencyObserverEvent expectedEndingEvent) throws * This spawns a single thread for the subscribe execution * */ - private static class TestSingleThreadedObservable implements Func1, Subscription> { + private static class TestSingleThreadedObservable implements Func1, Subscription> { final Subscription s; final String[] values; @@ -476,7 +476,7 @@ public TestSingleThreadedObservable(final Subscription s, final String... values } - public Subscription call(final Observer observer) { + public Subscription call(final Observer observer) { System.out.println("TestSingleThreadedObservable subscribed to ..."); t = new Thread(new Runnable() { @@ -515,7 +515,7 @@ public void waitToFinish() { * This spawns a thread for the subscription, then a separate thread for each onNext call. * */ - private static class TestMultiThreadedObservable implements Func1, Subscription> { + private static class TestMultiThreadedObservable implements Func1, Subscription> { final Subscription s; final String[] values; @@ -531,7 +531,7 @@ public TestMultiThreadedObservable(Subscription s, String... values) { } @Override - public Subscription call(final Observer observer) { + public Subscription call(final Observer observer) { System.out.println("TestMultiThreadedObservable subscribed to ..."); t = new Thread(new Runnable() { diff --git a/rxjava-core/src/main/java/rx/plugins/RxJavaObservableExecutionHook.java b/rxjava-core/src/main/java/rx/plugins/RxJavaObservableExecutionHook.java index 2aba6edecd..0a275d0248 100644 --- a/rxjava-core/src/main/java/rx/plugins/RxJavaObservableExecutionHook.java +++ b/rxjava-core/src/main/java/rx/plugins/RxJavaObservableExecutionHook.java @@ -47,7 +47,7 @@ public abstract class RxJavaObservableExecutionHook { * original {@link Func1}<{@link Observer}{@code }, {@link Subscription}> to be executed * @return {@link Func1}<{@link Observer}{@code }, {@link Subscription}> function that can be modified, decorated, replaced or just returned as a pass-thru. */ - public Func1, Subscription> onSubscribeStart(Observable observableInstance, Func1, Subscription> onSubscribe) { + public Func1, ? extends Subscription> onSubscribeStart(Observable observableInstance, Func1, ? extends Subscription> onSubscribe) { // pass-thru by default return onSubscribe; } @@ -63,7 +63,7 @@ public Func1, Subscription> onSubscribeStart(Observable obser * original {@link Subscription} * @return {@link Subscription} subscription that can be modified, decorated, replaced or just returned as a pass-thru. */ - public Subscription onSubscribeReturn(Observable observableInstance, Subscription subscription) { + public Subscription onSubscribeReturn(Observable observableInstance, Subscription subscription) { // pass-thru by default return subscription; } @@ -80,7 +80,7 @@ public Subscription onSubscribeReturn(Observable observableInstance, Subs * Throwable thrown by {@link Observable#subscribe(Observer)} * @return Throwable that can be decorated, replaced or just returned as a pass-thru. */ - public Throwable onSubscribeError(Observable observableInstance, Throwable e) { + public Throwable onSubscribeError(Observable observableInstance, Throwable e) { // pass-thru by default return e; } diff --git a/rxjava-core/src/main/java/rx/subjects/AsyncSubject.java b/rxjava-core/src/main/java/rx/subjects/AsyncSubject.java index c25ea56dee..6ff5e2f66a 100644 --- a/rxjava-core/src/main/java/rx/subjects/AsyncSubject.java +++ b/rxjava-core/src/main/java/rx/subjects/AsyncSubject.java @@ -68,11 +68,11 @@ public class AsyncSubject extends Subject { * @return a new AsyncSubject */ public static AsyncSubject create() { - final ConcurrentHashMap> observers = new ConcurrentHashMap>(); + final ConcurrentHashMap> observers = new ConcurrentHashMap>(); - Func1, Subscription> onSubscribe = new Func1, Subscription>() { + Func1, Subscription> onSubscribe = new Func1, Subscription>() { @Override - public Subscription call(Observer observer) { + public Subscription call(Observer observer) { final SafeObservableSubscription subscription = new SafeObservableSubscription(); subscription.wrap(new Subscription() { @@ -92,10 +92,10 @@ public void unsubscribe() { return new AsyncSubject(onSubscribe, observers); } - private final ConcurrentHashMap> observers; + private final ConcurrentHashMap> observers; private final AtomicReference currentValue; - protected AsyncSubject(Func1, Subscription> onSubscribe, ConcurrentHashMap> observers) { + protected AsyncSubject(Func1, ? extends Subscription> onSubscribe, ConcurrentHashMap> observers) { super(onSubscribe); this.observers = observers; this.currentValue = new AtomicReference(); @@ -104,17 +104,17 @@ protected AsyncSubject(Func1, Subscription> onSubscribe, ConcurrentH @Override public void onCompleted() { T finalValue = currentValue.get(); - for (Observer observer : observers.values()) { + for (Observer observer : observers.values()) { observer.onNext(finalValue); } - for (Observer observer : observers.values()) { + for (Observer observer : observers.values()) { observer.onCompleted(); } } @Override public void onError(Throwable e) { - for (Observer observer : observers.values()) { + for (Observer observer : observers.values()) { observer.onError(e); } } @@ -132,6 +132,7 @@ public static class UnitTest { public void testNeverCompleted() { AsyncSubject subject = AsyncSubject.create(); + @SuppressWarnings("unchecked") Observer aObserver = mock(Observer.class); subject.subscribe(aObserver); @@ -153,6 +154,7 @@ private void assertNeverCompletedObserver(Observer aObserver) public void testCompleted() { AsyncSubject subject = AsyncSubject.create(); + @SuppressWarnings("unchecked") Observer aObserver = mock(Observer.class); subject.subscribe(aObserver); @@ -175,6 +177,7 @@ private void assertCompletedObserver(Observer aObserver) public void testError() { AsyncSubject subject = AsyncSubject.create(); + @SuppressWarnings("unchecked") Observer aObserver = mock(Observer.class); subject.subscribe(aObserver); diff --git a/rxjava-core/src/main/java/rx/subjects/BehaviorSubject.java b/rxjava-core/src/main/java/rx/subjects/BehaviorSubject.java index bed456b5ba..9fcb38edb5 100644 --- a/rxjava-core/src/main/java/rx/subjects/BehaviorSubject.java +++ b/rxjava-core/src/main/java/rx/subjects/BehaviorSubject.java @@ -70,13 +70,13 @@ public class BehaviorSubject extends Subject { * @return the constructed {@link BehaviorSubject}. */ public static BehaviorSubject createWithDefaultValue(T defaultValue) { - final ConcurrentHashMap> observers = new ConcurrentHashMap>(); + final ConcurrentHashMap> observers = new ConcurrentHashMap>(); final AtomicReference currentValue = new AtomicReference(defaultValue); - Func1, Subscription> onSubscribe = new Func1, Subscription>() { + Func1, Subscription> onSubscribe = new Func1, Subscription>() { @Override - public Subscription call(Observer observer) { + public Subscription call(Observer observer) { final SafeObservableSubscription subscription = new SafeObservableSubscription(); subscription.wrap(new Subscription() { @@ -98,10 +98,10 @@ public void unsubscribe() { return new BehaviorSubject(currentValue, onSubscribe, observers); } - private final ConcurrentHashMap> observers; + private final ConcurrentHashMap> observers; private final AtomicReference currentValue; - protected BehaviorSubject(AtomicReference currentValue, Func1, Subscription> onSubscribe, ConcurrentHashMap> observers) { + protected BehaviorSubject(AtomicReference currentValue, Func1, ? extends Subscription> onSubscribe, ConcurrentHashMap> observers) { super(onSubscribe); this.currentValue = currentValue; this.observers = observers; @@ -109,14 +109,14 @@ protected BehaviorSubject(AtomicReference currentValue, Func1, Su @Override public void onCompleted() { - for (Observer observer : observers.values()) { + for (Observer observer : observers.values()) { observer.onCompleted(); } } @Override public void onError(Throwable e) { - for (Observer observer : observers.values()) { + for (Observer observer : observers.values()) { observer.onError(e); } } @@ -124,7 +124,7 @@ public void onError(Throwable e) { @Override public void onNext(T args) { currentValue.set(args); - for (Observer observer : observers.values()) { + for (Observer observer : observers.values()) { observer.onNext(args); } } diff --git a/rxjava-core/src/main/java/rx/subjects/PublishSubject.java b/rxjava-core/src/main/java/rx/subjects/PublishSubject.java index 467771758d..506639346f 100644 --- a/rxjava-core/src/main/java/rx/subjects/PublishSubject.java +++ b/rxjava-core/src/main/java/rx/subjects/PublishSubject.java @@ -67,12 +67,12 @@ */ public class PublishSubject extends Subject { public static PublishSubject create() { - final ConcurrentHashMap> observers = new ConcurrentHashMap>(); - final AtomicReference> terminalState = new AtomicReference>(); + final ConcurrentHashMap> observers = new ConcurrentHashMap>(); + final AtomicReference> terminalState = new AtomicReference>(); - Func1, Subscription> onSubscribe = new Func1, Subscription>() { + Func1, Subscription> onSubscribe = new Func1, Subscription>() { @Override - public Subscription call(Observer observer) { + public Subscription call(Observer observer) { // shortcut check if terminal state exists already Subscription s = checkTerminalState(observer); if(s != null) return s; @@ -110,8 +110,8 @@ public void unsubscribe() { } } - private Subscription checkTerminalState(Observer observer) { - Notification n = terminalState.get(); + private Subscription checkTerminalState(Observer observer) { + Notification n = terminalState.get(); if (n != null) { // we are terminated to immediately emit and don't continue with subscription if (n.isOnCompleted()) { @@ -129,10 +129,10 @@ private Subscription checkTerminalState(Observer observer) { return new PublishSubject(onSubscribe, observers, terminalState); } - private final ConcurrentHashMap> observers; - private final AtomicReference> terminalState; + private final ConcurrentHashMap> observers; + private final AtomicReference> terminalState; - protected PublishSubject(Func1, Subscription> onSubscribe, ConcurrentHashMap> observers, AtomicReference> terminalState) { + protected PublishSubject(Func1, ? extends Subscription> onSubscribe, ConcurrentHashMap> observers, AtomicReference> terminalState) { super(onSubscribe); this.observers = observers; this.terminalState = terminalState; @@ -148,7 +148,7 @@ public void onCompleted() { synchronized (terminalState) { terminalState.set(new Notification()); } - for (Observer observer : snapshotOfValues()) { + for (Observer observer : snapshotOfValues()) { observer.onCompleted(); } observers.clear(); @@ -164,7 +164,7 @@ public void onError(Throwable e) { synchronized (terminalState) { terminalState.set(new Notification(e)); } - for (Observer observer : snapshotOfValues()) { + for (Observer observer : snapshotOfValues()) { observer.onError(e); } observers.clear(); @@ -172,7 +172,7 @@ public void onError(Throwable e) { @Override public void onNext(T args) { - for (Observer observer : snapshotOfValues()) { + for (Observer observer : snapshotOfValues()) { observer.onNext(args); } } @@ -187,8 +187,8 @@ public void onNext(T args) { * * @return List> */ - private Collection> snapshotOfValues() { - return new ArrayList>(observers.values()); + private Collection> snapshotOfValues() { + return new ArrayList>(observers.values()); } public static class UnitTest { @@ -205,9 +205,9 @@ public void call(List> actual) { } }); - Subscription sub = Observable.create(new Func1, Subscription>() { + Subscription sub = Observable.create(new Func1, Subscription>() { @Override - public Subscription call(final Observer observer) { + public Subscription call(final Observer observer) { final AtomicBoolean stop = new AtomicBoolean(false); new Thread() { @Override @@ -247,6 +247,7 @@ public void unsubscribe() { public void testCompleted() { PublishSubject subject = PublishSubject.create(); + @SuppressWarnings("unchecked") Observer aObserver = mock(Observer.class); subject.subscribe(aObserver); @@ -255,6 +256,7 @@ public void testCompleted() { subject.onNext("three"); subject.onCompleted(); + @SuppressWarnings("unchecked") Observer anotherObserver = mock(Observer.class); subject.subscribe(anotherObserver); @@ -275,17 +277,11 @@ private void assertCompletedObserver(Observer aObserver) verify(aObserver, times(1)).onCompleted(); } - private void assertNeverObserver(Observer aObserver) - { - verify(aObserver, Mockito.never()).onNext(any(String.class)); - verify(aObserver, Mockito.never()).onError(any(Throwable.class)); - verify(aObserver, Mockito.never()).onCompleted(); - } - @Test public void testError() { PublishSubject subject = PublishSubject.create(); + @SuppressWarnings("unchecked") Observer aObserver = mock(Observer.class); subject.subscribe(aObserver); @@ -294,6 +290,7 @@ public void testError() { subject.onNext("three"); subject.onError(testException); + @SuppressWarnings("unchecked") Observer anotherObserver = mock(Observer.class); subject.subscribe(anotherObserver); @@ -318,6 +315,7 @@ private void assertErrorObserver(Observer aObserver) public void testSubscribeMidSequence() { PublishSubject subject = PublishSubject.create(); + @SuppressWarnings("unchecked") Observer aObserver = mock(Observer.class); subject.subscribe(aObserver); @@ -326,6 +324,7 @@ public void testSubscribeMidSequence() { assertObservedUntilTwo(aObserver); + @SuppressWarnings("unchecked") Observer anotherObserver = mock(Observer.class); subject.subscribe(anotherObserver); @@ -349,6 +348,7 @@ private void assertCompletedStartingWithThreeObserver(Observer aObserver public void testUnsubscribeFirstObserver() { PublishSubject subject = PublishSubject.create(); + @SuppressWarnings("unchecked") Observer aObserver = mock(Observer.class); Subscription subscription = subject.subscribe(aObserver); @@ -358,6 +358,7 @@ public void testUnsubscribeFirstObserver() { subscription.unsubscribe(); assertObservedUntilTwo(aObserver); + @SuppressWarnings("unchecked") Observer anotherObserver = mock(Observer.class); subject.subscribe(anotherObserver); @@ -391,6 +392,7 @@ private void assertObservedUntilTwo(Observer aObserver) public void testUnsubscribeAfterOnCompleted() { PublishSubject subject = PublishSubject.create(); + @SuppressWarnings("unchecked") Observer anObserver = mock(Observer.class); subject.subscribe(anObserver); diff --git a/rxjava-core/src/main/java/rx/subjects/ReplaySubject.java b/rxjava-core/src/main/java/rx/subjects/ReplaySubject.java index 2d852f5bb0..73c921bb04 100644 --- a/rxjava-core/src/main/java/rx/subjects/ReplaySubject.java +++ b/rxjava-core/src/main/java/rx/subjects/ReplaySubject.java @@ -62,7 +62,7 @@ public final class ReplaySubject extends Subject private boolean isDone = false; private Throwable exception = null; - private final Map> subscriptions = new HashMap>(); + private final Map> subscriptions = new HashMap>(); private final List history = Collections.synchronizedList(new ArrayList()); public static ReplaySubject create() { @@ -74,11 +74,11 @@ private ReplaySubject(DelegateSubscriptionFunc onSubscribe) { onSubscribe.wrap(new SubscriptionFunc()); } - private static final class DelegateSubscriptionFunc implements Func1, Subscription> + private static final class DelegateSubscriptionFunc implements Func1, Subscription> { - private Func1, Subscription> delegate = null; + private Func1, ? extends Subscription> delegate = null; - public void wrap(Func1, Subscription> delegate) + public void wrap(Func1, ? extends Subscription> delegate) { if (this.delegate != null) { throw new UnsupportedOperationException("delegate already set"); @@ -87,16 +87,16 @@ public void wrap(Func1, Subscription> delegate) } @Override - public Subscription call(Observer observer) + public Subscription call(Observer observer) { return delegate.call(observer); } } - private class SubscriptionFunc implements Func1, Subscription> + private class SubscriptionFunc implements Func1, Subscription> { @Override - public Subscription call(Observer observer) { + public Subscription call(Observer observer) { int item = 0; Subscription subscription; @@ -145,7 +145,7 @@ public void onCompleted() { synchronized (subscriptions) { isDone = true; - for (Observer observer : new ArrayList>(subscriptions.values())) { + for (Observer observer : new ArrayList>(subscriptions.values())) { observer.onCompleted(); } subscriptions.clear(); @@ -161,7 +161,7 @@ public void onError(Throwable e) } isDone = true; exception = e; - for (Observer observer : new ArrayList>(subscriptions.values())) { + for (Observer observer : new ArrayList>(subscriptions.values())) { observer.onError(e); } subscriptions.clear(); @@ -173,7 +173,7 @@ public void onNext(T args) { synchronized (subscriptions) { history.add(args); - for (Observer observer : new ArrayList>(subscriptions.values())) { + for (Observer observer : new ArrayList>(subscriptions.values())) { observer.onNext(args); } } diff --git a/rxjava-core/src/main/java/rx/subjects/Subject.java b/rxjava-core/src/main/java/rx/subjects/Subject.java index 21f83cc7b7..a706b8fc82 100644 --- a/rxjava-core/src/main/java/rx/subjects/Subject.java +++ b/rxjava-core/src/main/java/rx/subjects/Subject.java @@ -21,7 +21,7 @@ import rx.util.functions.Func1; public abstract class Subject extends Observable implements Observer { - protected Subject(Func1, Subscription> onSubscribe) { + protected Subject(Func1, ? extends Subscription> onSubscribe) { super(onSubscribe); } } diff --git a/rxjava-core/src/main/java/rx/subjects/UnsubscribeTester.java b/rxjava-core/src/main/java/rx/subjects/UnsubscribeTester.java index c895f7aa43..6ff50d39ee 100644 --- a/rxjava-core/src/main/java/rx/subjects/UnsubscribeTester.java +++ b/rxjava-core/src/main/java/rx/subjects/UnsubscribeTester.java @@ -54,7 +54,7 @@ public UnsubscribeTester() { * @param * The type of object passed by the Observable */ - public static > void test(Func0 provider, Action1 generateOnCompleted, Action1 generateOnError, Action1 generateOnNext) + public static > void test(Func0 provider, Action1 generateOnCompleted, Action1 generateOnError, Action1 generateOnNext) { if (generateOnCompleted != null) { O observable = provider.call(); diff --git a/rxjava-core/src/main/java/rx/util/functions/Action.java b/rxjava-core/src/main/java/rx/util/functions/Action.java index 3821d84e25..9c73496b67 100644 --- a/rxjava-core/src/main/java/rx/util/functions/Action.java +++ b/rxjava-core/src/main/java/rx/util/functions/Action.java @@ -20,6 +20,6 @@ *

* Marker interface to allow instanceof checks. */ -public interface Action extends Function { +public interface Action extends Function { } diff --git a/rxjava-core/src/main/java/rx/util/functions/Action0.java b/rxjava-core/src/main/java/rx/util/functions/Action0.java index 7b6e742699..832b78dd52 100644 --- a/rxjava-core/src/main/java/rx/util/functions/Action0.java +++ b/rxjava-core/src/main/java/rx/util/functions/Action0.java @@ -15,6 +15,6 @@ */ package rx.util.functions; -public interface Action0 extends Function, Action { +public interface Action0 extends Action { public void call(); } \ No newline at end of file diff --git a/rxjava-core/src/main/java/rx/util/functions/Action1.java b/rxjava-core/src/main/java/rx/util/functions/Action1.java index e21fd4e38b..68c1b804ed 100644 --- a/rxjava-core/src/main/java/rx/util/functions/Action1.java +++ b/rxjava-core/src/main/java/rx/util/functions/Action1.java @@ -15,6 +15,6 @@ */ package rx.util.functions; -public interface Action1 extends Function, Action { +public interface Action1 extends Action { public void call(T1 t1); } \ No newline at end of file diff --git a/rxjava-core/src/main/java/rx/util/functions/Action2.java b/rxjava-core/src/main/java/rx/util/functions/Action2.java index 76c48d3eaf..ba4826bdca 100644 --- a/rxjava-core/src/main/java/rx/util/functions/Action2.java +++ b/rxjava-core/src/main/java/rx/util/functions/Action2.java @@ -15,6 +15,6 @@ */ package rx.util.functions; -public interface Action2 extends Function, Action { +public interface Action2 extends Action { public void call(T1 t1, T2 t2); } \ No newline at end of file diff --git a/rxjava-core/src/main/java/rx/util/functions/Action3.java b/rxjava-core/src/main/java/rx/util/functions/Action3.java index 0bb6932792..3c2b083c6f 100644 --- a/rxjava-core/src/main/java/rx/util/functions/Action3.java +++ b/rxjava-core/src/main/java/rx/util/functions/Action3.java @@ -15,6 +15,6 @@ */ package rx.util.functions; -public interface Action3 extends Function, Action { +public interface Action3 extends Action { public void call(T1 t1, T2 t2, T3 t3); } \ No newline at end of file diff --git a/rxjava-core/src/main/java/rx/util/functions/Func0.java b/rxjava-core/src/main/java/rx/util/functions/Func0.java index 4e7d397037..f4cefaa26f 100644 --- a/rxjava-core/src/main/java/rx/util/functions/Func0.java +++ b/rxjava-core/src/main/java/rx/util/functions/Func0.java @@ -15,6 +15,6 @@ */ package rx.util.functions; -public interface Func0 extends Function { +public interface Func0 extends Function { public R call(); } \ No newline at end of file diff --git a/rxjava-core/src/main/java/rx/util/functions/Func1.java b/rxjava-core/src/main/java/rx/util/functions/Func1.java index 3eb17e625c..e0aff573bc 100644 --- a/rxjava-core/src/main/java/rx/util/functions/Func1.java +++ b/rxjava-core/src/main/java/rx/util/functions/Func1.java @@ -15,6 +15,6 @@ */ package rx.util.functions; -public interface Func1 extends Function { +public interface Func1 extends Function { public R call(T1 t1); } \ No newline at end of file diff --git a/rxjava-core/src/main/java/rx/util/functions/Func2.java b/rxjava-core/src/main/java/rx/util/functions/Func2.java index ab2a04442d..dc27b83620 100644 --- a/rxjava-core/src/main/java/rx/util/functions/Func2.java +++ b/rxjava-core/src/main/java/rx/util/functions/Func2.java @@ -15,6 +15,6 @@ */ package rx.util.functions; -public interface Func2 extends Function { +public interface Func2 extends Function { public R call(T1 t1, T2 t2); } \ No newline at end of file diff --git a/rxjava-core/src/main/java/rx/util/functions/Func3.java b/rxjava-core/src/main/java/rx/util/functions/Func3.java index fc1dfb49b0..228f1bb8de 100644 --- a/rxjava-core/src/main/java/rx/util/functions/Func3.java +++ b/rxjava-core/src/main/java/rx/util/functions/Func3.java @@ -15,6 +15,6 @@ */ package rx.util.functions; -public interface Func3 extends Function { +public interface Func3 extends Function { public R call(T1 t1, T2 t2, T3 t3); } \ No newline at end of file diff --git a/rxjava-core/src/main/java/rx/util/functions/Func4.java b/rxjava-core/src/main/java/rx/util/functions/Func4.java index 09d738ff72..dff6549aae 100644 --- a/rxjava-core/src/main/java/rx/util/functions/Func4.java +++ b/rxjava-core/src/main/java/rx/util/functions/Func4.java @@ -15,6 +15,6 @@ */ package rx.util.functions; -public interface Func4 extends Function { +public interface Func4 extends Function { public R call(T1 t1, T2 t2, T3 t3, T4 t4); } \ No newline at end of file diff --git a/rxjava-core/src/main/java/rx/util/functions/Func5.java b/rxjava-core/src/main/java/rx/util/functions/Func5.java index b6550ef0b9..5b675df6da 100644 --- a/rxjava-core/src/main/java/rx/util/functions/Func5.java +++ b/rxjava-core/src/main/java/rx/util/functions/Func5.java @@ -15,6 +15,6 @@ */ package rx.util.functions; -public interface Func5 extends Function { +public interface Func5 extends Function { public R call(T1 t1, T2 t2, T3 t3, T4 t4, T5 t5); } \ No newline at end of file diff --git a/rxjava-core/src/main/java/rx/util/functions/Func6.java b/rxjava-core/src/main/java/rx/util/functions/Func6.java index a241d55538..f6b2dba526 100644 --- a/rxjava-core/src/main/java/rx/util/functions/Func6.java +++ b/rxjava-core/src/main/java/rx/util/functions/Func6.java @@ -15,6 +15,6 @@ */ package rx.util.functions; -public interface Func6 extends Function { +public interface Func6 extends Function { public R call(T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6); } \ No newline at end of file diff --git a/rxjava-core/src/main/java/rx/util/functions/Func7.java b/rxjava-core/src/main/java/rx/util/functions/Func7.java index 972cc405de..2ee972edd5 100644 --- a/rxjava-core/src/main/java/rx/util/functions/Func7.java +++ b/rxjava-core/src/main/java/rx/util/functions/Func7.java @@ -15,6 +15,6 @@ */ package rx.util.functions; -public interface Func7 extends Function { +public interface Func7 extends Function { public R call(T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7); } \ No newline at end of file diff --git a/rxjava-core/src/main/java/rx/util/functions/Func8.java b/rxjava-core/src/main/java/rx/util/functions/Func8.java index 5cbd10c1f7..991881aab1 100644 --- a/rxjava-core/src/main/java/rx/util/functions/Func8.java +++ b/rxjava-core/src/main/java/rx/util/functions/Func8.java @@ -15,6 +15,6 @@ */ package rx.util.functions; -public interface Func8 extends Function { +public interface Func8 extends Function { public R call(T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7, T8 t8); } \ No newline at end of file diff --git a/rxjava-core/src/main/java/rx/util/functions/Func9.java b/rxjava-core/src/main/java/rx/util/functions/Func9.java index 8f2e546e4a..e3413109ae 100644 --- a/rxjava-core/src/main/java/rx/util/functions/Func9.java +++ b/rxjava-core/src/main/java/rx/util/functions/Func9.java @@ -15,6 +15,6 @@ */ package rx.util.functions; -public interface Func9 extends Function { +public interface Func9 extends Function { public R call(T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7, T8 t8, T9 t9); } \ No newline at end of file diff --git a/rxjava-core/src/main/java/rx/util/functions/FuncN.java b/rxjava-core/src/main/java/rx/util/functions/FuncN.java index 721702afbe..769d5098c5 100644 --- a/rxjava-core/src/main/java/rx/util/functions/FuncN.java +++ b/rxjava-core/src/main/java/rx/util/functions/FuncN.java @@ -15,6 +15,6 @@ */ package rx.util.functions; -public interface FuncN extends Function { +public interface FuncN extends Function { public R call(Object... args); } diff --git a/rxjava-core/src/main/java/rx/util/functions/Function.java b/rxjava-core/src/main/java/rx/util/functions/Function.java index ed63ca525e..a2b0fa46b1 100644 --- a/rxjava-core/src/main/java/rx/util/functions/Function.java +++ b/rxjava-core/src/main/java/rx/util/functions/Function.java @@ -20,6 +20,6 @@ *

* Marker interface to allow instanceof checks. */ -public interface Function { +public interface Function { } diff --git a/rxjava-core/src/main/java/rx/util/functions/Functions.java b/rxjava-core/src/main/java/rx/util/functions/Functions.java index c66ca837e4..7809b3240d 100644 --- a/rxjava-core/src/main/java/rx/util/functions/Functions.java +++ b/rxjava-core/src/main/java/rx/util/functions/Functions.java @@ -17,64 +17,13 @@ public class Functions { - /** - * Utility method for determining the type of closure/function and executing it. - * - * @param function - */ - @SuppressWarnings({ "rawtypes" }) - public static FuncN from(final Function function) { - if (function == null) { - throw new RuntimeException("function is null. Can't send arguments to null function."); - } - return fromFunction(function); - } - - @SuppressWarnings({ "unchecked", "rawtypes" }) - private static FuncN fromFunction(Function function) { - // check Func* classes - if (function instanceof Func0) { - return fromFunc((Func0) function); - } else if (function instanceof Func1) { - return fromFunc((Func1) function); - } else if (function instanceof Func2) { - return fromFunc((Func2) function); - } else if (function instanceof Func3) { - return fromFunc((Func3) function); - } else if (function instanceof Func4) { - return fromFunc((Func4) function); - } else if (function instanceof Func5) { - return fromFunc((Func5) function); - } else if (function instanceof Func6) { - return fromFunc((Func6) function); - } else if (function instanceof Func7) { - return fromFunc((Func7) function); - } else if (function instanceof Func8) { - return fromFunc((Func8) function); - } else if (function instanceof Func9) { - return fromFunc((Func9) function); - } else if (function instanceof FuncN) { - return (FuncN) function; - } else if (function instanceof Action0) { - return fromAction((Action0) function); - } else if (function instanceof Action1) { - return fromAction((Action1) function); - } else if (function instanceof Action2) { - return fromAction((Action2) function); - } else if (function instanceof Action3) { - return fromAction((Action3) function); - } - - throw new RuntimeException("Unknown implementation of Function: " + function.getClass().getSimpleName()); - } - /** * Convert a function to FuncN to allow heterogeneous handling of functions with different arities. * * @param f * @return {@link FuncN} */ - public static FuncN fromFunc(final Func0 f) { + public static FuncN fromFunc(final Func0 f) { return new FuncN() { @Override @@ -94,7 +43,7 @@ public R call(Object... args) { * @param f * @return {@link FuncN} */ - public static FuncN fromFunc(final Func1 f) { + public static FuncN fromFunc(final Func1 f) { return new FuncN() { @SuppressWarnings("unchecked") @@ -115,7 +64,7 @@ public R call(Object... args) { * @param f * @return {@link FuncN} */ - public static FuncN fromFunc(final Func2 f) { + public static FuncN fromFunc(final Func2 f) { return new FuncN() { @SuppressWarnings("unchecked") @@ -136,7 +85,7 @@ public R call(Object... args) { * @param f * @return {@link FuncN} */ - public static FuncN fromFunc(final Func3 f) { + public static FuncN fromFunc(final Func3 f) { return new FuncN() { @SuppressWarnings("unchecked") @@ -157,7 +106,7 @@ public R call(Object... args) { * @param f * @return {@link FuncN} */ - public static FuncN fromFunc(final Func4 f) { + public static FuncN fromFunc(final Func4 f) { return new FuncN() { @SuppressWarnings("unchecked") @@ -178,7 +127,7 @@ public R call(Object... args) { * @param f * @return {@link FuncN} */ - public static FuncN fromFunc(final Func5 f) { + public static FuncN fromFunc(final Func5 f) { return new FuncN() { @SuppressWarnings("unchecked") @@ -199,7 +148,7 @@ public R call(Object... args) { * @param f * @return {@link FuncN} */ - public static FuncN fromFunc(final Func6 f) { + public static FuncN fromFunc(final Func6 f) { return new FuncN() { @SuppressWarnings("unchecked") @@ -220,7 +169,7 @@ public R call(Object... args) { * @param f * @return {@link FuncN} */ - public static FuncN fromFunc(final Func7 f) { + public static FuncN fromFunc(final Func7 f) { return new FuncN() { @SuppressWarnings("unchecked") @@ -241,7 +190,7 @@ public R call(Object... args) { * @param f * @return {@link FuncN} */ - public static FuncN fromFunc(final Func8 f) { + public static FuncN fromFunc(final Func8 f) { return new FuncN() { @SuppressWarnings("unchecked") @@ -262,7 +211,7 @@ public R call(Object... args) { * @param f * @return {@link FuncN} */ - public static FuncN fromFunc(final Func9 f) { + public static FuncN fromFunc(final Func9 f) { return new FuncN() { @SuppressWarnings("unchecked") @@ -304,7 +253,7 @@ public Void call(Object... args) { * @param f * @return {@link FuncN} */ - public static FuncN fromAction(final Action1 f) { + public static FuncN fromAction(final Action1 f) { return new FuncN() { @SuppressWarnings("unchecked") @@ -326,7 +275,7 @@ public Void call(Object... args) { * @param f * @return {@link FuncN} */ - public static FuncN fromAction(final Action2 f) { + public static FuncN fromAction(final Action2 f) { return new FuncN() { @SuppressWarnings("unchecked") @@ -348,7 +297,7 @@ public Void call(Object... args) { * @param f * @return {@link FuncN} */ - public static FuncN fromAction(final Action3 f) { + public static FuncN fromAction(final Action3 f) { return new FuncN() { @SuppressWarnings("unchecked") @@ -364,14 +313,17 @@ public Void call(Object... args) { }; } - @SuppressWarnings("unchecked") - public static Func1 alwaysTrue() { - return (Func1) AlwaysTrue.INSTANCE; + public static Func1 alwaysTrue() { + return AlwaysTrue.INSTANCE; } - @SuppressWarnings("unchecked") public static Func1 identity() { - return (Func1) Identity.INSTANCE; + return new Func1() { + @Override + public T call(T o) { + return o; + } + }; } private enum AlwaysTrue implements Func1 { @@ -382,14 +334,4 @@ public Boolean call(Object o) { return true; } } - - private enum Identity implements Func1 { - INSTANCE; - - @Override - public Object call(Object o) { - return o; - } - } - } diff --git a/rxjava-core/src/test/java/rx/CovarianceTest.java b/rxjava-core/src/test/java/rx/CovarianceTest.java new file mode 100644 index 0000000000..2594f27677 --- /dev/null +++ b/rxjava-core/src/test/java/rx/CovarianceTest.java @@ -0,0 +1,112 @@ +package rx; + +import java.util.ArrayList; + +import org.junit.Test; + +import rx.util.functions.Action1; +import rx.util.functions.Func2; + +/** + * Test super/extends of generics. + * + * See https://github.com/Netflix/RxJava/pull/331 + */ +public class CovarianceTest { + + /** + * This won't compile if super/extends isn't done correctly on generics + */ + @Test + public void testCovarianceOfFrom() { + Observable.from(new HorrorMovie()); + Observable.from(new ArrayList()); + // Observable.from(new Movie()); // may not compile + } + + /** + * This won't compile if super/extends isn't done correctly on generics + */ + @Test + public void testCovarianceOfMerge() { + Observable horrors = Observable.from(new HorrorMovie()); + Observable> metaHorrors = Observable.just(horrors); + Observable.merge(metaHorrors); + } + + /** + * This won't compile if super/extends isn't done correctly on generics + */ + @Test + public void testCovarianceOfZip() { + Observable horrors = Observable.from(new HorrorMovie()); + Observable ratings = Observable.from(new CoolRating()); + + Observable. zip(horrors, ratings, combine).toBlockingObservable().forEach(action); + Observable. zip(horrors, ratings, combine).toBlockingObservable().forEach(action); + Observable. zip(horrors, ratings, combine).toBlockingObservable().forEach(extendedAction); + Observable. zip(horrors, ratings, combine).toBlockingObservable().forEach(action); + Observable. zip(horrors, ratings, combine).toBlockingObservable().forEach(action); + + Observable. zip(horrors, ratings, combine); + } + + /** + * This won't compile if super/extends isn't done correctly on generics + */ + @Test + public void testCovarianceOfCombineLatest() { + Observable horrors = Observable.from(new HorrorMovie()); + Observable ratings = Observable.from(new CoolRating()); + + Observable. combineLatest(horrors, ratings, combine).toBlockingObservable().forEach(action); + Observable. combineLatest(horrors, ratings, combine).toBlockingObservable().forEach(action); + Observable. combineLatest(horrors, ratings, combine).toBlockingObservable().forEach(extendedAction); + Observable. combineLatest(horrors, ratings, combine).toBlockingObservable().forEach(action); + Observable. combineLatest(horrors, ratings, combine).toBlockingObservable().forEach(action); + + Observable. combineLatest(horrors, ratings, combine); + } + + Func2 combine = new Func2() { + @Override + public ExtendedResult call(Media m, Rating r) { + return new ExtendedResult(); + } + }; + + Action1 action = new Action1() { + @Override + public void call(Result t1) { + System.out.println("Result: " + t1); + } + }; + + Action1 extendedAction = new Action1() { + @Override + public void call(ExtendedResult t1) { + System.out.println("Result: " + t1); + } + }; + + static class Media { + } + + static class Movie extends Media { + } + + static class HorrorMovie extends Movie { + } + + static class Rating { + } + + static class CoolRating extends Rating { + } + + static class Result { + } + + static class ExtendedResult extends Result { + } +} diff --git a/rxjava-core/src/test/java/rx/ObservableTests.java b/rxjava-core/src/test/java/rx/ObservableTests.java index 2967a2c626..12e2657a8e 100644 --- a/rxjava-core/src/test/java/rx/ObservableTests.java +++ b/rxjava-core/src/test/java/rx/ObservableTests.java @@ -50,10 +50,10 @@ public void before() { @Test public void testCreate() { - Observable observable = Observable.create(new Func1, Subscription>() { + Observable observable = Observable.create(new Func1, Subscription>() { @Override - public Subscription call(Observer Observer) { + public Subscription call(Observer Observer) { Observer.onNext("one"); Observer.onNext("two"); Observer.onNext("three"); @@ -121,10 +121,10 @@ public void testOnSubscribeFails() { @SuppressWarnings("unchecked") Observer observer = mock(Observer.class); final RuntimeException re = new RuntimeException("bad impl"); - Observable o = Observable.create(new Func1, Subscription>() { + Observable o = Observable.create(new Func1, Subscription>() { @Override - public Subscription call(Observer t1) { + public Subscription call(Observer t1) { throw re; } @@ -161,10 +161,10 @@ public void testCustomObservableWithErrorInObserverAsynchronous() throws Interru final CountDownLatch latch = new CountDownLatch(1); final AtomicInteger count = new AtomicInteger(); final AtomicReference error = new AtomicReference(); - Observable.create(new Func1, Subscription>() { + Observable.create(new Func1, Subscription>() { @Override - public Subscription call(final Observer observer) { + public Subscription call(final Observer observer) { final BooleanSubscription s = new BooleanSubscription(); new Thread(new Runnable() { @@ -227,10 +227,10 @@ public void onNext(String v) { public void testCustomObservableWithErrorInObserverSynchronous() { final AtomicInteger count = new AtomicInteger(); final AtomicReference error = new AtomicReference(); - Observable.create(new Func1, Subscription>() { + Observable.create(new Func1, Subscription>() { @Override - public Subscription call(Observer observer) { + public Subscription call(Observer observer) { observer.onNext("1"); observer.onNext("2"); observer.onNext("three"); @@ -278,10 +278,10 @@ public void onNext(String v) { public void testCustomObservableWithErrorInObservableSynchronous() { final AtomicInteger count = new AtomicInteger(); final AtomicReference error = new AtomicReference(); - Observable.create(new Func1, Subscription>() { + Observable.create(new Func1, Subscription>() { @Override - public Subscription call(Observer observer) { + public Subscription call(Observer observer) { observer.onNext("1"); observer.onNext("2"); throw new NumberFormatException(); @@ -317,10 +317,10 @@ public void onNext(String v) { @Test public void testPublish() throws InterruptedException { final AtomicInteger counter = new AtomicInteger(); - ConnectableObservable o = Observable.create(new Func1, Subscription>() { + ConnectableObservable o = Observable.create(new Func1, Subscription>() { @Override - public Subscription call(final Observer observer) { + public Subscription call(final Observer observer) { final BooleanSubscription subscription = new BooleanSubscription(); new Thread(new Runnable() { @@ -371,10 +371,10 @@ public void call(String v) { @Test public void testReplay() throws InterruptedException { final AtomicInteger counter = new AtomicInteger(); - ConnectableObservable o = Observable.create(new Func1, Subscription>() { + ConnectableObservable o = Observable.create(new Func1, Subscription>() { @Override - public Subscription call(final Observer observer) { + public Subscription call(final Observer observer) { final BooleanSubscription subscription = new BooleanSubscription(); new Thread(new Runnable() { @@ -428,10 +428,10 @@ public void call(String v) { @Test public void testCache() throws InterruptedException { final AtomicInteger counter = new AtomicInteger(); - Observable o = Observable.create(new Func1, Subscription>() { + Observable o = Observable.create(new Func1, Subscription>() { @Override - public Subscription call(final Observer observer) { + public Subscription call(final Observer observer) { final BooleanSubscription subscription = new BooleanSubscription(); new Thread(new Runnable() { @@ -516,10 +516,10 @@ public void call(Object t1) { public void testErrorThrownWithoutErrorHandlerAsynchronous() throws InterruptedException { final CountDownLatch latch = new CountDownLatch(1); final AtomicReference exception = new AtomicReference(); - Observable.create(new Func1, Subscription>() { + Observable.create(new Func1, Subscription>() { @Override - public Subscription call(final Observer observer) { + public Subscription call(final Observer observer) { new Thread(new Runnable() { @Override diff --git a/rxjava-core/src/test/java/rx/concurrency/TestSchedulers.java b/rxjava-core/src/test/java/rx/concurrency/TestSchedulers.java index 4bc8fe993b..b91479a14d 100644 --- a/rxjava-core/src/test/java/rx/concurrency/TestSchedulers.java +++ b/rxjava-core/src/test/java/rx/concurrency/TestSchedulers.java @@ -252,9 +252,9 @@ public void call(Integer t) { @Test public void testRecursiveScheduler1() { - Observable obs = Observable.create(new Func1, Subscription>() { + Observable obs = Observable.create(new Func1, Subscription>() { @Override - public Subscription call(final Observer observer) { + public Subscription call(final Observer observer) { return Schedulers.currentThread().schedule(0, new Func2() { @Override public Subscription call(Scheduler scheduler, Integer i) { @@ -290,9 +290,9 @@ public void testRecursiveScheduler2() throws InterruptedException { final CountDownLatch latch = new CountDownLatch(10); final CountDownLatch completionLatch = new CountDownLatch(1); - Observable obs = Observable.create(new Func1, Subscription>() { + Observable obs = Observable.create(new Func1, Subscription>() { @Override - public Subscription call(final Observer observer) { + public Subscription call(final Observer observer) { return Schedulers.threadPoolForComputation().schedule(new BooleanSubscription(), new Func2() { @Override @@ -393,10 +393,10 @@ public void testConcurrentOnNextFailsValidation() throws InterruptedException { final int count = 10; final CountDownLatch latch = new CountDownLatch(count); - Observable o = Observable.create(new Func1, Subscription>() { + Observable o = Observable.create(new Func1, Subscription>() { @Override - public Subscription call(final Observer observer) { + public Subscription call(final Observer observer) { for (int i = 0; i < count; i++) { final int v = i; new Thread(new Runnable() { @@ -453,10 +453,10 @@ public void testSubscribeOnNestedConcurrency() throws InterruptedException { @Override public Observable call(final String v) { - return Observable.create(new Func1, Subscription>() { + return Observable.create(new Func1, Subscription>() { @Override - public Subscription call(final Observer observer) { + public Subscription call(final Observer observer) { observer.onNext("value_after_map-" + v); observer.onCompleted(); return Subscriptions.empty(); diff --git a/rxjava-core/src/test/java/rx/performance/PerformanceTest.java b/rxjava-core/src/test/java/rx/performance/PerformanceTest.java index 846efb5771..73dcf8c25b 100644 --- a/rxjava-core/src/test/java/rx/performance/PerformanceTest.java +++ b/rxjava-core/src/test/java/rx/performance/PerformanceTest.java @@ -207,15 +207,13 @@ public void runNonCompositionalTestWithArrayOfFunctions(AtomicLong aggregateTime final AtomicInteger onNextSum = new AtomicInteger(0); final long start = System.nanoTime(); final MathFunction m = new MathFunction(); - @SuppressWarnings("rawtypes") - final Func1[] functionCalls = new Func1[50]; + final Func1[] functionCalls = new MathFunction[50]; for (int i = 0; i < 50; i++) { functionCalls[i] = m; } Observable.from(values).map(new Func1() { - @SuppressWarnings("unchecked") @Override public Integer call(Integer t1) { // iterate the 50 times here in a loop rather than via composition