Skip to content

Commit 7caf5e1

Browse files
Merge pull request #1433 from Applied-Duality/async
Take 3
2 parents fc86f8c + ebb7ee3 commit 7caf5e1

File tree

5 files changed

+71
-110
lines changed

5 files changed

+71
-110
lines changed

language-adaptors/rxjava-scala/src/examples/scala/rx/lang/scala/examples/RxScalaDemo.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -521,7 +521,7 @@ class RxScalaDemo extends JUnitSuite {
521521

522522
@Test def exampleWithReplay5() {
523523
val numbers = Observable.interval(100 millis).take(10)
524-
val sharedNumbers = numbers.replay[Long, Long]((o: Observable[Long]) => o.map(_ * 2))
524+
val sharedNumbers = numbers.replay(o => o.map(_ * 2))
525525
sharedNumbers.subscribe(n => println(s"subscriber gets $n"))
526526
waitFor(sharedNumbers)
527527
}

language-adaptors/rxjava-scala/src/main/scala/rx/lang/scala/ImplicitFunctionConversions.scala

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -47,13 +47,6 @@ object ImplicitFunctionConversions {
4747
}
4848
}
4949

50-
implicit def scalaFunction1ToOnSubscribeFunc[T](f: rx.lang.scala.Observer[T] => Subscription) =
51-
new rx.Observable.OnSubscribeFunc[T] {
52-
def onSubscribe(obs: rx.Observer[_ >: T]): rx.Subscription = {
53-
f(obs)
54-
}
55-
}
56-
5750
implicit def scalaAction1ToOnSubscribe[T](f: Subscriber[T] => Unit) =
5851
new rx.Observable.OnSubscribe[T] {
5952
def call(s: rx.Subscriber[_ >: T]): Unit = {

language-adaptors/rxjava-scala/src/main/scala/rx/lang/scala/Observable.scala

Lines changed: 60 additions & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -1287,10 +1287,10 @@ trait Observable[+T]
12871287
* @return an Observable that emits items that are the results of invoking the selector on a `ConnectableObservable`
12881288
* that shares a single subscription to the source Observable
12891289
*/
1290-
def replay[U >: T, R](selector: Observable[U] => Observable[R]): Observable[R] = {
1291-
val thisJava = this.asJavaObservable.asInstanceOf[rx.Observable[U]]
1292-
val fJava: Func1[rx.Observable[U], rx.Observable[R]] =
1293-
(jo: rx.Observable[U]) => selector(toScalaObservable[U](jo)).asJavaObservable.asInstanceOf[rx.Observable[R]]
1290+
def replay[R](selector: Observable[T] => Observable[R]): Observable[R] = {
1291+
val thisJava = this.asJavaObservable.asInstanceOf[rx.Observable[T]]
1292+
val fJava: Func1[rx.Observable[T], rx.Observable[R]] =
1293+
(jo: rx.Observable[T]) => selector(toScalaObservable[T](jo)).asJavaObservable.asInstanceOf[rx.Observable[R]]
12941294
toScalaObservable[R](thisJava.replay(fJava))
12951295
}
12961296

@@ -1308,10 +1308,10 @@ trait Observable[+T]
13081308
* a `ConnectableObservable` that shares a single subscription to the source Observable replaying
13091309
* no more than `bufferSize` items
13101310
*/
1311-
def replay[U >: T, R](selector: Observable[U] => Observable[R], bufferSize: Int): Observable[R] = {
1312-
val thisJava = this.asJavaObservable.asInstanceOf[rx.Observable[U]]
1313-
val fJava: Func1[rx.Observable[U], rx.Observable[R]] =
1314-
(jo: rx.Observable[U]) => selector(toScalaObservable[U](jo)).asJavaObservable.asInstanceOf[rx.Observable[R]]
1311+
def replay[R](selector: Observable[T] => Observable[R], bufferSize: Int): Observable[R] = {
1312+
val thisJava = this.asJavaObservable.asInstanceOf[rx.Observable[T]]
1313+
val fJava: Func1[rx.Observable[T], rx.Observable[R]] =
1314+
(jo: rx.Observable[T]) => selector(toScalaObservable[T](jo)).asJavaObservable.asInstanceOf[rx.Observable[R]]
13151315
toScalaObservable[R](thisJava.replay(fJava, bufferSize))
13161316
}
13171317

@@ -1330,10 +1330,10 @@ trait Observable[+T]
13301330
* a `ConnectableObservable` that shares a single subscription to the source Observable, and
13311331
* replays no more than `bufferSize` items that were emitted within the window defined by `time`
13321332
*/
1333-
def replay[U >: T, R](selector: Observable[U] => Observable[R], bufferSize: Int, time: Duration): Observable[R] = {
1334-
val thisJava = this.asJavaObservable.asInstanceOf[rx.Observable[U]]
1335-
val fJava: Func1[rx.Observable[U], rx.Observable[R]] =
1336-
(jo: rx.Observable[U]) => selector(toScalaObservable[U](jo)).asJavaObservable.asInstanceOf[rx.Observable[R]]
1333+
def replay[R](selector: Observable[T] => Observable[R], bufferSize: Int, time: Duration): Observable[R] = {
1334+
val thisJava = this.asJavaObservable.asInstanceOf[rx.Observable[T]]
1335+
val fJava: Func1[rx.Observable[T], rx.Observable[R]] =
1336+
(jo: rx.Observable[T]) => selector(toScalaObservable[T](jo)).asJavaObservable.asInstanceOf[rx.Observable[R]]
13371337
toScalaObservable[R](thisJava.replay(fJava, bufferSize, time.length, time.unit))
13381338
}
13391339

@@ -1354,10 +1354,10 @@ trait Observable[+T]
13541354
* replays no more than `bufferSize` items that were emitted within the window defined by `time`
13551355
* @throws IllegalArgumentException if `bufferSize` is less than zero
13561356
*/
1357-
def replay[U >: T, R](selector: Observable[U] => Observable[R], bufferSize: Int, time: Duration, scheduler: Scheduler): Observable[R] = {
1358-
val thisJava = this.asJavaObservable.asInstanceOf[rx.Observable[U]]
1359-
val fJava: Func1[rx.Observable[U], rx.Observable[R]] =
1360-
(jo: rx.Observable[U]) => selector(toScalaObservable[U](jo)).asJavaObservable.asInstanceOf[rx.Observable[R]]
1357+
def replay[R](selector: Observable[T] => Observable[R], bufferSize: Int, time: Duration, scheduler: Scheduler): Observable[R] = {
1358+
val thisJava = this.asJavaObservable.asInstanceOf[rx.Observable[T]]
1359+
val fJava: Func1[rx.Observable[T], rx.Observable[R]] =
1360+
(jo: rx.Observable[T]) => selector(toScalaObservable[T](jo)).asJavaObservable.asInstanceOf[rx.Observable[R]]
13611361
toScalaObservable[R](thisJava.replay(fJava, bufferSize, time.length, time.unit, scheduler))
13621362
}
13631363

@@ -1376,10 +1376,10 @@ trait Observable[+T]
13761376
* a `ConnectableObservable` that shares a single subscription to the source Observable,
13771377
* replaying no more than `bufferSize` notifications
13781378
*/
1379-
def replay[U >: T, R](selector: Observable[U] => Observable[R], bufferSize: Int, scheduler: Scheduler): Observable[R] = {
1380-
val thisJava = this.asJavaObservable.asInstanceOf[rx.Observable[U]]
1381-
val fJava: Func1[rx.Observable[U], rx.Observable[R]] =
1382-
(jo: rx.Observable[U]) => selector(toScalaObservable[U](jo)).asJavaObservable.asInstanceOf[rx.Observable[R]]
1379+
def replay[R](selector: Observable[T] => Observable[R], bufferSize: Int, scheduler: Scheduler): Observable[R] = {
1380+
val thisJava = this.asJavaObservable.asInstanceOf[rx.Observable[T]]
1381+
val fJava: Func1[rx.Observable[T], rx.Observable[R]] =
1382+
(jo: rx.Observable[T]) => selector(toScalaObservable[T](jo)).asJavaObservable.asInstanceOf[rx.Observable[R]]
13831383
toScalaObservable[R](thisJava.replay(fJava, bufferSize, scheduler))
13841384
}
13851385

@@ -1397,10 +1397,10 @@ trait Observable[+T]
13971397
* a `ConnectableObservable` that shares a single subscription to the source Observable,
13981398
* replaying all items that were emitted within the window defined by `time`
13991399
*/
1400-
def replay[U >: T, R](selector: Observable[U] => Observable[R], time: Duration, scheduler: Scheduler): Observable[R] = {
1401-
val thisJava = this.asJavaObservable.asInstanceOf[rx.Observable[U]]
1402-
val fJava: Func1[rx.Observable[U], rx.Observable[R]] =
1403-
(jo: rx.Observable[U]) => selector(toScalaObservable[U](jo)).asJavaObservable.asInstanceOf[rx.Observable[R]]
1400+
def replay[R](selector: Observable[T] => Observable[R], time: Duration, scheduler: Scheduler): Observable[R] = {
1401+
val thisJava = this.asJavaObservable.asInstanceOf[rx.Observable[T]]
1402+
val fJava: Func1[rx.Observable[T], rx.Observable[R]] =
1403+
(jo: rx.Observable[T]) => selector(toScalaObservable[T](jo)).asJavaObservable.asInstanceOf[rx.Observable[R]]
14041404
toScalaObservable[R](thisJava.replay(fJava, time.length, time.unit, scheduler))
14051405
}
14061406

@@ -1417,10 +1417,10 @@ trait Observable[+T]
14171417
* a `ConnectableObservable` that shares a single subscription to the source Observable,
14181418
* replaying all items
14191419
*/
1420-
def replay[U >: T, R](selector: Observable[U] => Observable[R], scheduler: Scheduler): Observable[R] = {
1421-
val thisJava = this.asJavaObservable.asInstanceOf[rx.Observable[U]]
1422-
val fJava: Func1[rx.Observable[U], rx.Observable[R]] =
1423-
(jo: rx.Observable[U]) => selector(toScalaObservable[U](jo)).asJavaObservable.asInstanceOf[rx.Observable[R]]
1420+
def replay[R](selector: Observable[T] => Observable[R], scheduler: Scheduler): Observable[R] = {
1421+
val thisJava = this.asJavaObservable.asInstanceOf[rx.Observable[T]]
1422+
val fJava: Func1[rx.Observable[T], rx.Observable[R]] =
1423+
(jo: rx.Observable[T]) => selector(toScalaObservable[T](jo)).asJavaObservable.asInstanceOf[rx.Observable[R]]
14241424
toScalaObservable[R](thisJava.replay(fJava, scheduler))
14251425
}
14261426

@@ -1470,10 +1470,10 @@ trait Observable[+T]
14701470
* a `ConnectableObservable` that shares a single subscription to the source Observable,
14711471
* replaying all items that were emitted within the window defined by `time`
14721472
*/
1473-
def replay[U >: T, R](selector: Observable[U] => Observable[R], time: Duration): Observable[R] = {
1474-
val thisJava = this.asJavaObservable.asInstanceOf[rx.Observable[U]]
1475-
val fJava: Func1[rx.Observable[U], rx.Observable[R]] =
1476-
(jo: rx.Observable[U]) => selector(toScalaObservable[U](jo)).asJavaObservable.asInstanceOf[rx.Observable[R]]
1473+
def replay[R](selector: Observable[T] => Observable[R], time: Duration): Observable[R] = {
1474+
val thisJava = this.asJavaObservable.asInstanceOf[rx.Observable[T]]
1475+
val fJava: Func1[rx.Observable[T], rx.Observable[R]] =
1476+
(jo: rx.Observable[T]) => selector(toScalaObservable[T](jo)).asJavaObservable.asInstanceOf[rx.Observable[R]]
14771477
toScalaObservable[R](thisJava.replay(fJava, time.length, time.unit))
14781478
}
14791479

@@ -1626,9 +1626,9 @@ trait Observable[+T]
16261626
* @param initialValue the initial value to be emitted by the resulting Observable
16271627
* @return a `ConnectableObservable` that shares a single subscription to the underlying Observable and starts with `initialValue`
16281628
*/
1629-
def publish[U >: T](initialValue: U): ConnectableObservable[U] = {
1630-
val thisJava = this.asJavaObservable.asInstanceOf[rx.Observable[U]]
1631-
new ConnectableObservable[U](thisJava.publish(initialValue))
1629+
def publish[T](initialValue: T): ConnectableObservable[T] = {
1630+
val thisJava = this.asJavaObservable.asInstanceOf[rx.Observable[T]]
1631+
new ConnectableObservable[T](thisJava.publish(initialValue))
16321632
}
16331633

16341634
/**
@@ -1643,10 +1643,10 @@ trait Observable[+T]
16431643
* @return an Observable that emits the results of invoking the selector on the items emitted by a `ConnectableObservable`
16441644
* that shares a single subscription to the underlying sequence
16451645
*/
1646-
def publish[U >: T, R](selector: Observable[U] => Observable[R]): Observable[R] = {
1647-
val thisJava = this.asJavaObservable.asInstanceOf[rx.Observable[U]]
1648-
val fJava: Func1[rx.Observable[U], rx.Observable[R]] =
1649-
(jo: rx.Observable[U]) => selector(toScalaObservable[U](jo)).asJavaObservable.asInstanceOf[rx.Observable[R]]
1646+
def publish[R](selector: Observable[T] => Observable[R]): Observable[R] = {
1647+
val thisJava = this.asJavaObservable.asInstanceOf[rx.Observable[T]]
1648+
val fJava: Func1[rx.Observable[T], rx.Observable[R]] =
1649+
(jo: rx.Observable[T]) => selector(toScalaObservable[T](jo)).asJavaObservable.asInstanceOf[rx.Observable[R]]
16501650
toScalaObservable[R](thisJava.publish(fJava))
16511651
}
16521652

@@ -1664,10 +1664,10 @@ trait Observable[+T]
16641664
* @return an Observable that emits `initialValue` followed by the results of invoking the selector
16651665
* on a `ConnectableObservable` that shares a single subscription to the underlying Observable
16661666
*/
1667-
def publish[U >: T, R](selector: Observable[U] => Observable[R], initialValue: U): Observable[R] = {
1668-
val thisJava = this.asJavaObservable.asInstanceOf[rx.Observable[U]]
1669-
val fJava: Func1[rx.Observable[U], rx.Observable[R]] =
1670-
(jo: rx.Observable[U]) => selector(toScalaObservable[U](jo)).asJavaObservable.asInstanceOf[rx.Observable[R]]
1667+
def publish[R](selector: Observable[T] => Observable[R], initialValue: T @uncheckedVariance): Observable[R] = {
1668+
val thisJava = this.asJavaObservable.asInstanceOf[rx.Observable[T]]
1669+
val fJava: Func1[rx.Observable[T], rx.Observable[R]] =
1670+
(jo: rx.Observable[T]) => selector(toScalaObservable[T](jo)).asJavaObservable.asInstanceOf[rx.Observable[R]]
16711671
toScalaObservable[R](thisJava.publish(fJava, initialValue))
16721672
}
16731673

@@ -1971,7 +1971,7 @@ trait Observable[+T]
19711971
* @see <a href="https://github.com/Netflix/RxJava/wiki/Filtering-Observables#wiki-skipuntil">RxJava Wiki: skipUntil()</a>
19721972
* @see <a href="http://msdn.microsoft.com/en-us/library/hh229358.aspx">MSDN: Observable.SkipUntil</a>
19731973
*/
1974-
def dropUntil[E](other: Observable[E]): Observable[T] = {
1974+
def dropUntil(other: Observable[Any]): Observable[T] = {
19751975
toScalaObservable[T](asJavaObservable.skipUntil(other))
19761976
}
19771977

@@ -2129,12 +2129,10 @@ trait Observable[+T]
21292129
* @param that
21302130
* the Observable whose first emitted item will cause `takeUntil` to stop
21312131
* emitting items from the source Observable
2132-
* @tparam E
2133-
* the type of items emitted by `other`
2134-
* @return an Observable that emits the items of the source Observable until such time as
2132+
* @return an Observable that emits the items of the source Observable until such time as
21352133
* `other` emits its first item
21362134
*/
2137-
def takeUntil[E](that: Observable[E]): Observable[T] = {
2135+
def takeUntil(that: Observable[Any]): Observable[T] = {
21382136
toScalaObservable[T](asJavaObservable.takeUntil(that.asJavaObservable))
21392137
}
21402138

@@ -2732,8 +2730,8 @@ trait Observable[+T]
27322730
* the source Observable takes longer to arrive than the time window defined by the
27332731
* selector for the previously emitted item
27342732
*/
2735-
def timeout[V](timeoutSelector: T => Observable[V]): Observable[T] = {
2736-
toScalaObservable[T](asJavaObservable.timeout({ t: T => timeoutSelector(t).asJavaObservable.asInstanceOf[rx.Observable[V]] }))
2733+
def timeout(timeoutSelector: T => Observable[Any]): Observable[T] = {
2734+
toScalaObservable[T](asJavaObservable.timeout({ t: T => timeoutSelector(t).asJavaObservable.asInstanceOf[rx.Observable[Any]] }))
27372735
}
27382736

27392737
/**
@@ -2755,10 +2753,10 @@ trait Observable[+T]
27552753
* fallback Observable if a item emitted by the source Observable takes longer to arrive
27562754
* than the time window defined by the selector for the previously emitted item
27572755
*/
2758-
def timeout[V, O >: T](timeoutSelector: T => Observable[V], other: Observable[O]): Observable[O] = {
2759-
val thisJava = this.asJavaObservable.asInstanceOf[rx.Observable[O]]
2760-
toScalaObservable[O](thisJava.timeout(
2761-
{ t: O => timeoutSelector(t.asInstanceOf[T]).asJavaObservable.asInstanceOf[rx.Observable[V]] },
2756+
def timeout[U >: T](timeoutSelector: T => Observable[Any], other: Observable[U]): Observable[U] = {
2757+
val thisJava = this.asJavaObservable.asInstanceOf[rx.Observable[U]]
2758+
toScalaObservable[U](thisJava.timeout(
2759+
{ t: U => timeoutSelector(t.asInstanceOf[T]).asJavaObservable.asInstanceOf[rx.Observable[Any]] },
27622760
other.asJavaObservable))
27632761
}
27642762

@@ -2779,10 +2777,10 @@ trait Observable[+T]
27792777
* @return an Observable that mirrors the source Observable, but emits a TimeoutException if either the first item or any subsequent item doesn't
27802778
* arrive within the time windows specified by the timeout selectors
27812779
*/
2782-
def timeout[U, V](firstTimeoutSelector: () => Observable[U], timeoutSelector: T => Observable[V]): Observable[T] = {
2780+
def timeout(firstTimeoutSelector: () => Observable[Any], timeoutSelector: T => Observable[Any]): Observable[T] = {
27832781
toScalaObservable[T](asJavaObservable.timeout(
2784-
{ firstTimeoutSelector().asJavaObservable.asInstanceOf[rx.Observable[U]] },
2785-
{ t: T => timeoutSelector(t).asJavaObservable.asInstanceOf[rx.Observable[V]] }))
2782+
{ firstTimeoutSelector().asJavaObservable.asInstanceOf[rx.Observable[Any]] },
2783+
{ t: T => timeoutSelector(t).asJavaObservable.asInstanceOf[rx.Observable[Any]] }))
27862784
}
27872785

27882786
/**
@@ -2804,11 +2802,11 @@ trait Observable[+T]
28042802
* @return an Observable that mirrors the source Observable, but switches to the `other` Observable if either the first item emitted by the source Observable or any
28052803
* subsequent item don't arrive within time windows defined by the timeout selectors
28062804
*/
2807-
def timeout[U, V, O >: T](firstTimeoutSelector: () => Observable[U], timeoutSelector: T => Observable[V], other: Observable[O]): Observable[O] = {
2808-
val thisJava = this.asJavaObservable.asInstanceOf[rx.Observable[O]]
2809-
toScalaObservable[O](thisJava.timeout(
2810-
{ firstTimeoutSelector().asJavaObservable.asInstanceOf[rx.Observable[U]] },
2811-
{ t: O => timeoutSelector(t.asInstanceOf[T]).asJavaObservable.asInstanceOf[rx.Observable[V]] },
2805+
def timeout[U >: T](firstTimeoutSelector: () => Observable[Any], timeoutSelector: T => Observable[Any], other: Observable[U]): Observable[U] = {
2806+
val thisJava = this.asJavaObservable.asInstanceOf[rx.Observable[U]]
2807+
toScalaObservable[U](thisJava.timeout(
2808+
{ firstTimeoutSelector().asJavaObservable.asInstanceOf[rx.Observable[Any]] },
2809+
{ t: U => timeoutSelector(t.asInstanceOf[T]).asJavaObservable.asInstanceOf[rx.Observable[Any]] },
28122810
other.asJavaObservable))
28132811
}
28142812

rxjava-contrib/rxjava-async-util/src/main/java/rx/util/async/Async.java

Lines changed: 9 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -15,49 +15,19 @@
1515
*/
1616
package rx.util.async;
1717

18-
import java.util.concurrent.Callable;
19-
import java.util.concurrent.Future;
20-
import java.util.concurrent.FutureTask;
21-
22-
import rx.Observable;
23-
import rx.Observer;
24-
import rx.Scheduler;
18+
import rx.*;
2519
import rx.Scheduler.Worker;
26-
import rx.Subscriber;
27-
import rx.Subscription;
28-
import rx.functions.Action0;
29-
import rx.functions.Action1;
30-
import rx.functions.Action2;
31-
import rx.functions.Action3;
32-
import rx.functions.Action4;
33-
import rx.functions.Action5;
34-
import rx.functions.Action6;
35-
import rx.functions.Action7;
36-
import rx.functions.Action8;
37-
import rx.functions.Action9;
38-
import rx.functions.ActionN;
39-
import rx.functions.Actions;
40-
import rx.functions.Func0;
41-
import rx.functions.Func1;
42-
import rx.functions.Func2;
43-
import rx.functions.Func3;
44-
import rx.functions.Func4;
45-
import rx.functions.Func5;
46-
import rx.functions.Func6;
47-
import rx.functions.Func7;
48-
import rx.functions.Func8;
49-
import rx.functions.Func9;
50-
import rx.functions.FuncN;
20+
import rx.functions.*;
5121
import rx.schedulers.Schedulers;
5222
import rx.subjects.AsyncSubject;
5323
import rx.subjects.PublishSubject;
5424
import rx.subjects.Subject;
5525
import rx.subscriptions.SerialSubscription;
56-
import rx.util.async.operators.Functionals;
57-
import rx.util.async.operators.OperatorDeferFuture;
58-
import rx.util.async.operators.OperatorForEachFuture;
59-
import rx.util.async.operators.OperatorFromFunctionals;
60-
import rx.util.async.operators.OperatorStartFuture;
26+
import rx.util.async.operators.*;
27+
28+
import java.util.concurrent.Callable;
29+
import java.util.concurrent.Future;
30+
import java.util.concurrent.FutureTask;
6131

6232
/**
6333
* Utility methods to convert functions and actions into asynchronous operations through the Observable/Observer
@@ -95,7 +65,7 @@ public static <T> Observable<T> start(Func0<T> func) {
9565
* Observable. Multiple subscriptions to this Observable observe the same return value.
9666
* <p>
9767
* <img width="640" src="https://raw.github.com/wiki/Netflix/RxJava/images/rx-operators/start.s.png">
98-
*
68+
* <p>
9969
* @param <T> the result value type
10070
* @param func function to run asynchronously
10171
* @param scheduler Scheduler to run the function on
@@ -111,7 +81,7 @@ public static <T> Observable<T> start(Func0<T> func, Scheduler scheduler) {
11181
* Convert a synchronous action call into an asynchronous function call through an Observable.
11282
* <p>
11383
* <img width="640" src="https://raw.github.com/wiki/Netflix/RxJava/images/rx-operators/toAsync.an.png">
114-
*
84+
* <p>
11585
* @param action the action to convert
11686
* @return a function that returns an Observable that executes the {@code action} and emits {@code null}
11787
* @see <a href="https://github.com/Netflix/RxJava/wiki/Async-Operators#wiki-toasync-or-asyncaction-or-asyncfunc">RxJava Wiki: toAsync()</a>

settings.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,4 +18,4 @@ include 'rxjava-core', \
1818
'rxjava-contrib:rxjava-async-util', \
1919
'rxjava-contrib:rxjava-computation-expressions',\
2020
'rxjava-contrib:rxjava-scalaz', \
21-
'rxjava-contrib:rxjava-quasar'
21+
'rxjava-contrib:rxjava-quasar'

0 commit comments

Comments
 (0)