diff --git a/rxjava-core/src/main/java/rx/Observable.java b/rxjava-core/src/main/java/rx/Observable.java index 8106af0556..b5f45e225c 100644 --- a/rxjava-core/src/main/java/rx/Observable.java +++ b/rxjava-core/src/main/java/rx/Observable.java @@ -192,14 +192,14 @@ public void call(Subscriber o) { * @param transformer * @return */ - public Observable compose(Transformer transformer) { + public Observable compose(Transformer transformer) { return transformer.call(this); } /** * Transformer function for `compose` */ - public static interface Transformer extends Func1, Observable> { + public static interface Transformer extends Func1, Observable> { // cover for generics insanity } diff --git a/rxjava-core/src/test/java/rx/CovarianceTest.java b/rxjava-core/src/test/java/rx/CovarianceTest.java index adf3a8c9b8..5f5a7e2f29 100644 --- a/rxjava-core/src/test/java/rx/CovarianceTest.java +++ b/rxjava-core/src/test/java/rx/CovarianceTest.java @@ -19,6 +19,7 @@ import org.junit.Test; +import rx.Observable.Transformer; import rx.functions.Func2; /** @@ -57,6 +58,32 @@ public Integer call(Media t1, Media t2) { o2.toSortedList(SORT_FUNCTION); } + + @Test + public void testCovarianceOfCompose() { + Observable movie = Observable. from(new HorrorMovie()); + movie.compose(new Transformer() { + + @Override + public Observable call(Observable t1) { + return Observable.from(new Movie()); + } + + }); + } + + @Test + public void testCovarianceOfCompose2() { + Observable movie = Observable. from(new HorrorMovie()); + movie.compose(new Transformer() { + @Override + public Observable call(Observable t1) { + return Observable.from(new HorrorMovie()); + } + }); + } + + /* * Most tests are moved into their applicable classes such as [Operator]Tests.java */ diff --git a/rxjava-core/src/test/java/rx/ObservableTests.java b/rxjava-core/src/test/java/rx/ObservableTests.java index cdee0440a1..91e1113cb3 100644 --- a/rxjava-core/src/test/java/rx/ObservableTests.java +++ b/rxjava-core/src/test/java/rx/ObservableTests.java @@ -1108,9 +1108,9 @@ public void testCompose() { Observable.from(1, 2, 3).compose(new Transformer() { @Override - public Observable call(Observable t1) { + public Observable call(Observable t1) { return t1.map(new Func1() { - + @Override public String call(Integer t1) { return String.valueOf(t1);