Add todos and implements some templates

This commit is contained in:
Rick Ossendrijver
2021-09-02 14:21:12 +02:00
parent e3f9966011
commit 398f554f34
10 changed files with 205 additions and 28 deletions

View File

@@ -18,6 +18,19 @@ import reactor.core.publisher.Mono;
final class RxJava2AdapterTemplates {
private RxJava2AdapterTemplates() {}
/** Remove double conversion of ... */
static final class FluxToFlowableToFlux<T> {
@BeforeTemplate
Flux<T> before(Flux<T> flux) {
return RxJava2Adapter.flowableToFlux(RxJava2Adapter.fluxToFlowable(flux));
}
@AfterTemplate
Flux<T> after(Flux<T> flux) {
return flux;
}
}
/** Use the fluent API style when using {@link RxJava2Adapter#completableToMono}. */
static final class CompletableToMono {
@BeforeTemplate

View File

@@ -85,11 +85,11 @@ final class RxJavaCompletableToReactorTemplates {
// XXX: public final Completable delaySubscription(long,TimeUnit,Scheduler)
// XXX: public final Completable doAfterTerminate(Action)
// XXX: public final Completable doFinally(Action)
// XXX: public final Completable doOnComplete(Action)
// XXX: public final Completable doOnComplete(Action) --> Required
// XXX: public final Completable doOnDispose(Action)
// XXX: public final Completable doOnError(Consumer)
// XXX: public final Completable doOnEvent(Consumer)
// XXX: public final Completable doOnSubscribe(Consumer)
// XXX: public final Completable doOnSubscribe(Consumer) --> Required
// XXX: public final Completable doOnTerminate(Action)
// XXX: public final Completable hide()
// XXX: public final Completable lift(CompletableOperator)

View File

@@ -6,6 +6,7 @@ import com.google.errorprone.refaster.annotation.Repeated;
import io.reactivex.Flowable;
import io.reactivex.Maybe;
import io.reactivex.Single;
import io.reactivex.SingleSource;
import io.reactivex.functions.BiFunction;
import io.reactivex.functions.Function;
import io.reactivex.functions.Predicate;
@@ -15,6 +16,7 @@ import java.util.function.Supplier;
import org.reactivestreams.Publisher;
import reactor.adapter.rxjava.RxJava2Adapter;
import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono;
/** The Refaster templates for the migration of the RxJava Flowable type to Reactor */
final class RxJavaFlowableToReactorTemplates {
@@ -168,7 +170,21 @@ final class RxJavaFlowableToReactorTemplates {
return RxJava2Adapter.fluxToFlowable(Flux.fromArray(items));
}
}
// XXX: static Flowable fromCallable(Callable) --> Required
// XXX: Is this Mono correct here?
static final class FlowableFromCallable<T> {
@BeforeTemplate
Flowable<T> before(Callable<? extends T> supplier) {
return Flowable.fromCallable(supplier);
}
@AfterTemplate
Flowable<T> after(Callable<? extends T> supplier) {
return RxJava2Adapter.monoToFlowable(Mono.fromCallable(supplier));
}
}
// XXX: static Flowable fromFuture(Future)
// XXX: static Flowable fromFuture(Future,long,TimeUnit)
// XXX: static Flowable fromFuture(Future,long,TimeUnit,Scheduler)
@@ -268,12 +284,12 @@ final class RxJavaFlowableToReactorTemplates {
static final class FlowableRange {
@BeforeTemplate
Flowable<Integer> before(Integer start, Integer count) {
Flowable<Integer> before(int start, int count) {
return Flowable.range(start, count);
}
@AfterTemplate
Flowable<Integer> after(Integer start, Integer count) {
Flowable<Integer> after(int start, int count) {
return RxJava2Adapter.fluxToFlowable(Flux.range(start, count));
}
}
@@ -327,12 +343,41 @@ final class RxJavaFlowableToReactorTemplates {
}
}
// XXX: final Flowable ambWith(Publisher)
// XXX: final Single any(Predicate)
// XXX: Write cleanup for RxJava2ReactorMigrationUtil.toJdkPredicate.
static final class FlowableAny<T> {
@BeforeTemplate
Single<Boolean> before(Flowable<T> flowable, Predicate<? super T> predicate) {
return flowable.any(predicate);
}
@AfterTemplate
Single<Boolean> after(Flowable<T> flowable, Predicate<? super T> predicate) {
return flowable
.as(RxJava2Adapter::flowableToFlux)
.any(RxJavaToReactorTemplates.RxJava2ReactorMigrationUtil.toJdkPredicate(predicate))
.as(RxJava2Adapter::monoToSingle);
}
}
// XXX: final Object as(FlowableConverter)
// XXX: final Object blockingFirst()
// XXX: final Object blockingFirst(Object)/home/rick/repos/error-prone-support/error-prone-contrib/src/main/java/tech/picnic/errorprone/refastertemplates/RxJavaToReactorTemplates.java
static final class FlowableBlockingFirst<T> {
@BeforeTemplate
Object before(Flowable<T> flowable) {
return flowable.blockingFirst();
}
@AfterTemplate
Object after(Flowable<T> flowable) {
return RxJava2Adapter.flowableToFlux(flowable).blockFirst();
}
}
// XXX: final Object blockingFirst(Object)
// XXX: final void blockingForEach(Consumer)
// XXX: final Iterable blockingIterable()
// XXX: final Iterable blockingIterable() -> Required.
// XXX: final Iterable blockingIterable(int)
// XXX: final Object blockingLast()
// XXX: final Object blockingLast(Object)
@@ -421,6 +466,21 @@ final class RxJavaFlowableToReactorTemplates {
// XXX: final Flowable concatMapMaybe(Function,int)
// XXX: final Flowable concatMapMaybeDelayError(Function) --> This one
// static final class FlowableConcatMapMaybeDelayError<T, R> {
// @BeforeTemplate
// Flowable<R> before(Flowable<T> flowable, Function<? super T, ? extends MaybeSource<? extends
// R>> mapper) {
// return flowable.concatMapMaybeDelayError(mapper);
// }
// @AfterTemplate
// Flowable<R> after(Flowable<T> flowable, Function<? super T, ? extends MaybeSource<? extends
// R>> mapper) {
// return
// flowable.as(RxJava2Adapter::flowableToFlux).concat.concatMapMaybeDelayError(mapper);
// }
// }
// XXX: final Flowable concatMapMaybeDelayError(Function,boolean)
// XXX: final Flowable concatMapMaybeDelayError(Function,boolean,int)
// XXX: final Flowable concatMapSingle(Function)
@@ -516,7 +576,19 @@ final class RxJavaFlowableToReactorTemplates {
}
}
// XXX: final Single firstOrError()
// XXX: The `next()` is not perfect, it doesnt error in the case when the first value is not
// available.
static final class FlowableFirstOrError<T> {
@BeforeTemplate
Single<T> before(Flowable<T> flowable) {
return flowable.firstOrError();
}
@AfterTemplate
Single<T> after(Flowable<T> flowable) {
return RxJava2Adapter.monoToSingle(RxJava2Adapter.flowableToFlux(flowable).next());
}
}
// XXX: `Refaster.canBeCoercedTo(...)`.
static final class FlowableFlatMap<I, T extends I, O, P extends Publisher<? extends O>> {
@@ -596,7 +668,20 @@ final class RxJavaFlowableToReactorTemplates {
// XXX: final Flowable mergeWith(CompletableSource)
// XXX: final Flowable mergeWith(MaybeSource)
// XXX: final Flowable mergeWith(Publisher)
// XXX: final Flowable mergeWith(SingleSource) --> required.
static final class FlowableMergeWith<T> {
@BeforeTemplate
Flowable<T> before(Flowable<T> flowable, SingleSource<T> source) {
return flowable.mergeWith(source);
}
@AfterTemplate
Flowable<T> after(Flowable<T> flowable, Single<T> source) {
return RxJava2Adapter.fluxToFlowable(
RxJava2Adapter.flowableToFlux(flowable).mergeWith(source.toFlowable()));
}
}
// XXX: final Flowable observeOn(Scheduler)
// XXX: final Flowable observeOn(Scheduler,boolean)
// XXX: final Flowable observeOn(Scheduler,boolean,int)
@@ -612,9 +697,9 @@ final class RxJavaFlowableToReactorTemplates {
// XXX: final Flowable onBackpressureDrop()
// XXX: final Flowable onBackpressureDrop(Consumer)
// XXX: final Flowable onBackpressureLatest()
// XXX: final Flowable onErrorResumeNext(Function)
// XXX: final Flowable onErrorResumeNext(Publisher)
// XXX: final Flowable onErrorReturn(Function)
// XXX: final Flowable onErrorResumeNext(Function) -> Required
// XXX: final Flowable onErrorResumeNext(Publisher) -> Required? check consentTextServiceImpl
// XXX: final Flowable onErrorReturn(Function) --> Required, ibanBlacklistServiceClient 60
// XXX: final Flowable onErrorReturnItem(Object)
// XXX: final Flowable onExceptionResumeNext(Publisher)
// XXX: final Flowable onTerminateDetach()
@@ -668,9 +753,9 @@ final class RxJavaFlowableToReactorTemplates {
// XXX: final Flowable scanWith(Callable,BiFunction)
// XXX: final Flowable serialize()
// XXX: final Flowable share()
// XXX: final Single single(Object)
// XXX: final Maybe singleElement()
// XXX: final Single singleOrError()
// XXX: final Single single(Object) --> I think so.
// XXX: final Maybe singleElement() --> Required, important
// XXX: final Single singleOrError() --> Required, important
// XXX: final Flowable skip(long)
// XXX: final Flowable skip(long,TimeUnit)
// XXX: final Flowable skip(long,TimeUnit,Scheduler)
@@ -823,8 +908,32 @@ final class RxJavaFlowableToReactorTemplates {
// XXX: final Flowable withLatestFrom(Publisher,Publisher,Function3)
// XXX: final Flowable withLatestFrom(Publisher,Publisher,Publisher,Function4)
// XXX: final Flowable withLatestFrom(Publisher,Publisher,Publisher,Publisher,Function5)
// XXX: final Flowable zipWith(Iterable,BiFunction)
// XXX: final Flowable zipWith(Publisher,BiFunction)
// XXX: final Flowable zipWith(Iterable,BiFunction) --> Required.
// static final class FlowableZipWith<T, U, R> {
// @BeforeTemplate
// Flowable<R> before(
// Flowable<T> flowable,
// Iterable<U> iterable,
// BiFunction<? super T, ? super U, ? extends R> zipper) {
// return flowable.zipWith(iterable, zipper);
// }
//
// @AfterTemplate
// Flowable<R> after(
// Flowable<? extends T> flowable,
// Iterable<? extends U> iterable,
// BiFunction<? super T, ? super U, ? extends R> zipper) {
// return RxJava2Adapter.fluxToFlowable((RxJava2Adapter.flowableToFlux(flowable)
// .zipWithIterable(
// iterable,
//
// RxJavaToReactorTemplates.RxJava2ReactorMigrationUtil.toJdkBiFunction(zipper))));
// }
// }
// XXX: final Flowable zipWith(Publisher,BiFunction) --> Required?
// XXX: final Flowable zipWith(Publisher,BiFunction,boolean)
// XXX: final Flowable zipWith(Publisher,BiFunction,boolean,int)
// XXX: final TestSubscriber test()

View File

@@ -244,7 +244,7 @@ final class RxJavaMaybeToReactorTemplates {
// XXX: public final Maybe doOnError(Consumer)
// XXX: public final Maybe doOnEvent(BiConsumer)
// XXX: public final Maybe doOnSubscribe(Consumer)
// XXX: public final Maybe doOnSuccess(Consumer)
// XXX: public final Maybe doOnSuccess(Consumer) --> Required
// XXX: public final Maybe doOnTerminate(Action)
// XXX: public final Maybe filter(Predicate)
@@ -351,7 +351,7 @@ final class RxJavaMaybeToReactorTemplates {
// XXX: public final Maybe onErrorComplete(Predicate)
// XXX: public final Maybe onErrorResumeNext(Function)
// XXX: public final Maybe onErrorResumeNext(MaybeSource)
// XXX: public final Maybe onErrorReturn(Function)
// XXX: public final Maybe onErrorReturn(Function) --> This one, ArticleIssueServiceImpl 484, double check please.
// XXX: public final Maybe onErrorReturnItem(Object)
// XXX: public final Maybe onExceptionResumeNext(MaybeSource)
// XXX: public final Maybe onTerminateDetach()
@@ -403,10 +403,10 @@ final class RxJavaMaybeToReactorTemplates {
// XXX: public final Maybe timeout(Publisher)
// XXX: public final Maybe timeout(Publisher,MaybeSource)
// XXX: public final Object to(Function)
// XXX: public final Flowable toFlowable()
// XXX: public final Flowable toFlowable() --> Required I guess
// XXX: public final Observable toObservable()
// XXX: public final Single toSingle()
// XXX: public final Single toSingle() --> Required
// XXX: public final Single toSingle(Object)
// XXX: public final Maybe unsubscribeOn(Scheduler)
// XXX: public final Maybe zipWith(MaybeSource,BiFunction)
// XXX: public final Maybe zipWith(MaybeSource,BiFunction) --> Required.
}

View File

@@ -347,7 +347,7 @@ final class RxJavaObservableToReactorTemplates {
// XXX: public final Observable onErrorReturnItem(Object)
// XXX: public final Observable onExceptionResumeNext(ObservableSource)
// XXX: public final Observable onTerminateDetach()
// XXX: public final ConnectableObservable publish()
// XXX: public final ConnectableObservable publish() --> Required.
// XXX: public final Observable publish(Function)
// XXX: public final Maybe reduce(BiFunction)
// XXX: public final Single reduce(Object,BiFunction)

View File

@@ -102,7 +102,7 @@ final class RxJavaSingleToReactorTemplates {
// XXX: public final Single doOnError(Consumer)
// XXX: public final Single doOnEvent(BiConsumer)
// XXX: public final Single doOnSubscribe(Consumer)
// XXX: public final Single doOnSuccess(Consumer)
// XXX: public final Single doOnSuccess(Consumer) --> Required
// XXX: public final Single doOnTerminate(Action)
// XXX: `function` type change; look into `Refaster.canBeCoercedTo(...)`.
@@ -167,7 +167,7 @@ final class RxJavaSingleToReactorTemplates {
// XXX: public final Single materialize()
// XXX: public final Flowable mergeWith(SingleSource)
// XXX: public final Single observeOn(Scheduler)
// XXX: public final Single onErrorResumeNext(Function)
// XXX: public final Single onErrorResumeNext(Function) --> Required
// XXX: public final Single onErrorResumeNext(Single)
// XXX: public final Single onErrorReturn(Function)
// XXX: public final Single onErrorReturnItem(Object)
@@ -187,7 +187,7 @@ final class RxJavaSingleToReactorTemplates {
// XXX: public final Disposable subscribe(Consumer)
// XXX: public final Disposable subscribe(Consumer,Consumer)
// XXX: public final void subscribe(SingleObserver)
// XXX: public final Single subscribeOn(Scheduler)
// XXX: public final Single subscribeOn(Scheduler) --> Required.
// XXX: public final SingleObserver subscribeWith(SingleObserver)
// XXX: public final Single takeUntil(CompletableSource)
// XXX: public final Single takeUntil(Publisher)

View File

@@ -14,6 +14,12 @@ import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono;
final class RxJava2AdapterTemplatesTest implements RefasterTemplateTestCase {
ImmutableSet<Flux<Integer>> testFluxToFlowableToFlux() {
return ImmutableSet.of(
RxJava2Adapter.flowableToFlux(RxJava2Adapter.fluxToFlowable(Flux.just(1))),
RxJava2Adapter.flowableToFlux(RxJava2Adapter.fluxToFlowable(Flux.just(2))));
}
ImmutableSet<Mono<Void>> testCompletableToMono() {
return ImmutableSet.of(
RxJava2Adapter.completableToMono(Completable.complete()),

View File

@@ -14,6 +14,10 @@ import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono;
final class RxJava2AdapterTemplatesTest implements RefasterTemplateTestCase {
ImmutableSet<Flux<Integer>> testFluxToFlowableToFlux() {
return ImmutableSet.of(Flux.just(1), Flux.just(2));
}
ImmutableSet<Mono<Void>> testCompletableToMono() {
return ImmutableSet.of(
Completable.complete().as(RxJava2Adapter::completableToMono),

View File

@@ -39,6 +39,10 @@ final class RxJavaFlowableToReactorTemplatesTest implements RefasterTemplateTest
Flowable<Integer> testFlowableFromArray() {
return Flowable.fromArray(1, 2, 3);
}
Flowable<Integer> testFlowableFromCallable() {
return Flowable.fromCallable(() -> 1);
}
Flowable<Integer> testFlowableFromIterable() {
return Flowable.fromIterable(ImmutableList.of(1, 2, 3));
@@ -56,6 +60,10 @@ final class RxJavaFlowableToReactorTemplatesTest implements RefasterTemplateTest
return Flowable.just(1).firstElement();
}
Single<Integer> testFlowableFirstOrError() {
return Flowable.just(1).firstOrError();
}
Flowable<Object> testFlowableFlatMap() {
Flowable.just(1).flatMap(this::exampleMethod2);
return Flowable.just(1).flatMap(i -> ImmutableSet::of);
@@ -81,10 +89,22 @@ final class RxJavaFlowableToReactorTemplatesTest implements RefasterTemplateTest
return Flowable.just(true, true).all(Boolean::booleanValue);
}
Single<Boolean> testFlowableAny() {
return Flowable.just(true, true).any(Boolean::booleanValue);
}
Object testFlowableBlockingFirst() {
return Flowable.just(1).blockingFirst();
}
Flowable<Integer> testFlowableMap() {
return Flowable.just(1).map(i -> i + 1);
}
Flowable<Integer> testFlowableMergeWith() {
return Flowable.just(1).mergeWith(Single.just(1));
}
Flowable<Integer> testFlowableSwitchIfEmptyPublisher() {
return Flowable.just(1)
.switchIfEmpty(

View File

@@ -52,6 +52,10 @@ final class RxJavaFlowableToReactorTemplatesTest implements RefasterTemplateTest
return RxJava2Adapter.fluxToFlowable(Flux.fromArray(1, 2, 3));
}
Flowable<Integer> testFlowableFromCallable() {
return RxJava2Adapter.monoToFlowable(Mono.fromCallable(() -> 1));
}
Flowable<Integer> testFlowableFromIterable() {
return RxJava2Adapter.fluxToFlowable(Flux.fromIterable(ImmutableList.of(1, 2, 3)));
}
@@ -74,6 +78,10 @@ final class RxJavaFlowableToReactorTemplatesTest implements RefasterTemplateTest
.as(RxJava2Adapter::monoToMaybe);
}
Single<Integer> testFlowableFirstOrError() {
return RxJava2Adapter.monoToSingle(RxJava2Adapter.flowableToFlux(Flowable.just(1)).next());
}
Flowable<Object> testFlowableFlatMap() {
Flowable.just(1)
.as(RxJava2Adapter::flowableToFlux)
@@ -113,6 +121,19 @@ final class RxJavaFlowableToReactorTemplatesTest implements RefasterTemplateTest
.as(RxJava2Adapter::monoToSingle);
}
Single<Boolean> testFlowableAny() {
return Flowable.just(true, true)
.as(RxJava2Adapter::flowableToFlux)
.any(
RxJavaToReactorTemplates.RxJava2ReactorMigrationUtil.toJdkPredicate(
Boolean::booleanValue))
.as(RxJava2Adapter::monoToSingle);
}
Object testFlowableBlockingFirst() {
return RxJava2Adapter.flowableToFlux(Flowable.just(1)).blockFirst();
}
Flowable<Integer> testFlowableMap() {
return Flowable.just(1)
.as(RxJava2Adapter::flowableToFlux)
@@ -120,6 +141,10 @@ final class RxJavaFlowableToReactorTemplatesTest implements RefasterTemplateTest
.as(RxJava2Adapter::fluxToFlowable);
}
Flowable<Integer> testFlowableMergeWith() {
return RxJava2Adapter.flowableToFlux(Flowable.just(1)).mergeWith(Single.just(1).toFlowable());
}
Flowable<Integer> testFlowableSwitchIfEmptyPublisher() {
return Flowable.just(1)
.as(RxJava2Adapter::flowableToFlux)