Skip to content

Commit

Permalink
Merge pull request #1569 from benjchristensen/compose-transformer-var…
Browse files Browse the repository at this point in the history
…iance

Compose/Transform Covariance
  • Loading branch information
benjchristensen committed Aug 14, 2014
2 parents e1943b9 + 26ca287 commit 6c8ca2f
Show file tree
Hide file tree
Showing 3 changed files with 31 additions and 4 deletions.
4 changes: 2 additions & 2 deletions rxjava-core/src/main/java/rx/Observable.java
Original file line number Diff line number Diff line change
Expand Up @@ -204,7 +204,7 @@ public void call(Subscriber<? super R> o) {
* @see <a href="https://github.com/Netflix/RxJava/wiki/Implementing-Your-Own-Operators">RxJava wiki: Implementing Your Own Operators</a>
* @since 0.20
*/
public <R> Observable<R> compose(Transformer<T, R> transformer) {
public <R> Observable<? extends R> compose(Transformer<? super T, ? extends R> transformer) {
return transformer.call(this);
}

Expand All @@ -213,7 +213,7 @@ public <R> Observable<R> compose(Transformer<T, R> transformer) {
* @warn more complete description needed
* @since 0.20
*/
public static interface Transformer<T, R> extends Func1<Observable<T>, Observable<R>> {
public static interface Transformer<T, R> extends Func1<Observable<? extends T>, Observable<? extends R>> {
// cover for generics insanity
}

Expand Down
27 changes: 27 additions & 0 deletions rxjava-core/src/test/java/rx/CovarianceTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@

import org.junit.Test;

import rx.Observable.Transformer;
import rx.functions.Func2;

/**
Expand Down Expand Up @@ -57,6 +58,32 @@ public Integer call(Media t1, Media t2) {
o2.toSortedList(SORT_FUNCTION);
}


@Test
public void testCovarianceOfCompose() {
Observable<HorrorMovie> movie = Observable.<HorrorMovie> from(new HorrorMovie());
movie.compose(new Transformer<Movie, Movie>() {

@Override
public Observable<? extends Movie> call(Observable<? extends Movie> t1) {
return Observable.from(new Movie());
}

});
}

@Test
public void testCovarianceOfCompose2() {
Observable<Movie> movie = Observable.<Movie> from(new HorrorMovie());
movie.compose(new Transformer<Movie, Movie>() {
@Override
public Observable<? extends Movie> call(Observable<? extends Movie> t1) {
return Observable.from(new HorrorMovie());
}
});
}


/*
* Most tests are moved into their applicable classes such as [Operator]Tests.java
*/
Expand Down
4 changes: 2 additions & 2 deletions rxjava-core/src/test/java/rx/ObservableTests.java
Original file line number Diff line number Diff line change
Expand Up @@ -1108,9 +1108,9 @@ public void testCompose() {
Observable.from(1, 2, 3).compose(new Transformer<Integer, String>() {

@Override
public Observable<String> call(Observable<Integer> t1) {
public Observable<? extends String> call(Observable<? extends Integer> t1) {
return t1.map(new Func1<Integer, String>() {

@Override
public String call(Integer t1) {
return String.valueOf(t1);
Expand Down

0 comments on commit 6c8ca2f

Please sign in to comment.