diff --git a/error-prone-contrib/src/main/java/tech/picnic/errorprone/refastertemplates/RxJavaCompletableToReactorTemplates.java b/error-prone-contrib/src/main/java/tech/picnic/errorprone/refastertemplates/RxJavaCompletableToReactorTemplates.java index 0197f92d..80a842bc 100644 --- a/error-prone-contrib/src/main/java/tech/picnic/errorprone/refastertemplates/RxJavaCompletableToReactorTemplates.java +++ b/error-prone-contrib/src/main/java/tech/picnic/errorprone/refastertemplates/RxJavaCompletableToReactorTemplates.java @@ -6,6 +6,7 @@ import com.google.common.collect.Streams; import com.google.errorprone.refaster.annotation.AfterTemplate; import com.google.errorprone.refaster.annotation.BeforeTemplate; import io.reactivex.Completable; +import io.reactivex.functions.Action; import reactor.adapter.rxjava.RxJava2Adapter; import reactor.core.publisher.Mono; @@ -38,10 +39,27 @@ final class RxJavaCompletableToReactorTemplates { // XXX: public static Completable concat(Publisher,int) // XXX: public static Completable concatArray(CompletableSource[]) // XXX: public static Completable create(CompletableOnSubscribe) - // XXX: public static Completable defer(Callable) - // XXX: public static Completable error(Callable) - // XXX: public static Completable error(Throwable) - // XXX: public static Completable fromAction(Action) + // XXX: public static Completable defer(Callable) --> Required. + // XXX: public static Completable error(Callable) --> Required. + // XXX: public static Completable error(Throwable) --> Required. + + // XXX: Make the test. + static final class CompletableFromAction { + @BeforeTemplate + Completable before(Action action) { + return Completable.fromAction(action); + } + + @AfterTemplate + Completable after(Action action) { + return RxJava2Adapter.monoToCompletable( + Mono.fromRunnable( + RxJavaToReactorTemplates.RxJava2ReactorMigrationUtil.toRunnable(action))); + } + } + + + // XXX: public static Completable fromCallable(Callable) // XXX: public static Completable fromFuture(Future) // XXX: public static Completable fromMaybe(MaybeSource) diff --git a/error-prone-contrib/src/main/java/tech/picnic/errorprone/refastertemplates/RxJavaMaybeToReactorTemplates.java b/error-prone-contrib/src/main/java/tech/picnic/errorprone/refastertemplates/RxJavaMaybeToReactorTemplates.java index a91ea13f..a49faf3d 100644 --- a/error-prone-contrib/src/main/java/tech/picnic/errorprone/refastertemplates/RxJavaMaybeToReactorTemplates.java +++ b/error-prone-contrib/src/main/java/tech/picnic/errorprone/refastertemplates/RxJavaMaybeToReactorTemplates.java @@ -88,13 +88,10 @@ final class RxJavaMaybeToReactorTemplates { // XXX: Is this correct? /** - * Check this one: - * private MonoVoid verifyTagExists_migrated(OptionalString tagId) { - return RxJava2Adapter.completableToMono( - Maybe.defer(() - tagId.map(Maybe::just).orElseGet(Maybe::empty)) - - .flatMapSingleElement(this::getTagById) - - .ignoreElement()); - + .flatMapSingleElement(this::getTagById).as(RxJava2Adapter::maybeToMono). + * Check this one: private MonoVoid verifyTagExists_migrated(OptionalString tagId) { return + * RxJava2Adapter.completableToMono( Maybe.defer(() - + * tagId.map(Maybe::just).orElseGet(Maybe::empty)) - .flatMapSingleElement(this::getTagById) - + * .ignoreElement()); + .flatMapSingleElement(this::getTagById).as(RxJava2Adapter::maybeToMono). */ abstract static class MaybeDefer { @Placeholder @@ -125,7 +122,6 @@ final class RxJavaMaybeToReactorTemplates { } } - // XXX: public static Maybe error(Callable) // XXX: public static Maybe error(Throwable) // XXX: public static Maybe fromAction(Action) @@ -365,7 +361,23 @@ final class RxJavaMaybeToReactorTemplates { // XXX: public final Single isEmpty() // XXX: public final Maybe lift(MaybeOperator) - // XXX: public final Maybe map(Function) + // XXX: public final Maybe map(Function) --> required. + + static final class MaybeMap { + @BeforeTemplate + Maybe before(Maybe maybe, Function mapper) { + return maybe.map(mapper); + } + + @AfterTemplate + Maybe after(Maybe maybe, Function mapper) { + return maybe + .as(RxJava2Adapter::maybeToMono) + .map(RxJavaToReactorTemplates.RxJava2ReactorMigrationUtil.toJdkFunction(mapper)) + .as(RxJava2Adapter::monoToMaybe); + } + } + // XXX: public final Single materialize() // XXX: public final Flowable mergeWith(MaybeSource) // XXX: public final Maybe observeOn(Scheduler) @@ -374,7 +386,8 @@ 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) --> This one, ArticleIssueServiceImpl 484, double check please. + // 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() diff --git a/error-prone-contrib/src/main/java/tech/picnic/errorprone/refastertemplates/RxJavaSingleToReactorTemplates.java b/error-prone-contrib/src/main/java/tech/picnic/errorprone/refastertemplates/RxJavaSingleToReactorTemplates.java index ef22d0c7..a161d5ed 100644 --- a/error-prone-contrib/src/main/java/tech/picnic/errorprone/refastertemplates/RxJavaSingleToReactorTemplates.java +++ b/error-prone-contrib/src/main/java/tech/picnic/errorprone/refastertemplates/RxJavaSingleToReactorTemplates.java @@ -9,6 +9,7 @@ import io.reactivex.Single; import io.reactivex.functions.Function; import io.reactivex.functions.Predicate; import reactor.adapter.rxjava.RxJava2Adapter; +import reactor.core.publisher.Mono; /** The Refaster templates for the migration of the RxJava Single type to Reactor */ final class RxJavaSingleToReactorTemplates { @@ -29,18 +30,31 @@ final class RxJavaSingleToReactorTemplates { // XXX: public static Flowable concatEager(Iterable) // XXX: public static Flowable concatEager(Publisher) // XXX: public static Single create(SingleOnSubscribe) - // XXX: public static Single defer(Callable) + // XXX: public static Single defer(Callable) --> Required // XXX: public static Single equals(SingleSource,SingleSource) - // XXX: public static Single error(Callable) - // XXX: public static Single error(Throwable) - // XXX: public static Single fromCallable(Callable) + // XXX: public static Single error(Callable) --> Required + // XXX: public static Single error(Throwable) --> Required + // XXX: public static Single fromCallable(Callable) --> This one // XXX: public static Single fromFuture(Future) // XXX: public static Single fromFuture(Future,long,TimeUnit) // XXX: public static Single fromFuture(Future,long,TimeUnit,Scheduler) // XXX: public static Single fromFuture(Future,Scheduler) // XXX: public static Single fromObservable(ObservableSource) // XXX: public static Single fromPublisher(Publisher) - // XXX: public static Single just(Object) + + // XXX: Make a test + static final class SingleJust { + @BeforeTemplate + Single before(T item) { + return Single.just(item); + } + + @AfterTemplate + Single after(T item) { + return Mono.just(item).as(RxJava2Adapter::monoToSingle); + } + } + // XXX: public static Flowable merge(Iterable) // XXX: public static Flowable merge(Publisher) // XXX: public static Single merge(SingleSource) @@ -59,7 +73,7 @@ final class RxJavaSingleToReactorTemplates { // XXX: public static Single unsafeCreate(SingleSource) // XXX: public static Single using(Callable,Function,Consumer) // XXX: public static Single using(Callable,Function,Consumer,boolean) - // XXX: public static Single wrap(SingleSource) + // XXX: public static Single wrap(SingleSource) --> Required // XXX: public static Single zip(Iterable,Function) // XXX: public static Single zip(SingleSource,SingleSource,BiFunction) // XXX: public static Single zip(SingleSource,SingleSource,SingleSource,Function3) diff --git a/error-prone-contrib/src/main/java/tech/picnic/errorprone/refastertemplates/RxJavaToReactorTemplates.java b/error-prone-contrib/src/main/java/tech/picnic/errorprone/refastertemplates/RxJavaToReactorTemplates.java index 603668b6..e3325cb2 100644 --- a/error-prone-contrib/src/main/java/tech/picnic/errorprone/refastertemplates/RxJavaToReactorTemplates.java +++ b/error-prone-contrib/src/main/java/tech/picnic/errorprone/refastertemplates/RxJavaToReactorTemplates.java @@ -4,6 +4,7 @@ import com.google.errorprone.refaster.Refaster; import com.google.errorprone.refaster.annotation.AfterTemplate; import com.google.errorprone.refaster.annotation.BeforeTemplate; import io.reactivex.BackpressureStrategy; +import io.reactivex.functions.Action; import io.reactivex.functions.Function; import java.util.concurrent.Callable; import java.util.function.Supplier; @@ -186,6 +187,22 @@ public final class RxJavaToReactorTemplates { }; } + /** + * XXX + * @param action XXX + * @return XXX + */ + @SuppressWarnings("IllegalCatch") + public static Runnable toRunnable(Action action) { + return () -> { + try { + action.run(); + } catch (Exception e) { + throw new IllegalArgumentException("Action threw checked exception", e); + } + }; + } + // "Coersion" (find better name): // instanceof (support this?) // two functional interfaces with: diff --git a/error-prone-contrib/src/test/resources/tech/picnic/errorprone/bugpatterns/RxJavaMaybeToReactorTemplatesTestInput.java b/error-prone-contrib/src/test/resources/tech/picnic/errorprone/bugpatterns/RxJavaMaybeToReactorTemplatesTestInput.java index 7ebc546d..231cb5bc 100644 --- a/error-prone-contrib/src/test/resources/tech/picnic/errorprone/bugpatterns/RxJavaMaybeToReactorTemplatesTestInput.java +++ b/error-prone-contrib/src/test/resources/tech/picnic/errorprone/bugpatterns/RxJavaMaybeToReactorTemplatesTestInput.java @@ -82,6 +82,10 @@ final class RxJavaMaybeToReactorTemplatesTest implements RefasterTemplateTestCas return Maybe.just(1).ignoreElement(); } + Maybe testMaybeMap() { + return Maybe.just(1, 2).map(String::valueOf); + } + Single testMaybeSwitchIfEmpty() { return Maybe.just(1) .switchIfEmpty( diff --git a/error-prone-contrib/src/test/resources/tech/picnic/errorprone/bugpatterns/RxJavaMaybeToReactorTemplatesTestOutput.java b/error-prone-contrib/src/test/resources/tech/picnic/errorprone/bugpatterns/RxJavaMaybeToReactorTemplatesTestOutput.java index 5dd5f1f4..0af35be0 100644 --- a/error-prone-contrib/src/test/resources/tech/picnic/errorprone/bugpatterns/RxJavaMaybeToReactorTemplatesTestOutput.java +++ b/error-prone-contrib/src/test/resources/tech/picnic/errorprone/bugpatterns/RxJavaMaybeToReactorTemplatesTestOutput.java @@ -129,6 +129,13 @@ final class RxJavaMaybeToReactorTemplatesTest implements RefasterTemplateTestCas .as(RxJava2Adapter::monoToCompletable); } + Maybe testMaybeMap() { + return Maybe.just(1, 2) + .as(RxJava2Adapter::maybeToMono) + .map(RxJavaToReactorTemplates.RxJava2ReactorMigrationUtil.toJdkFunction(String::valueOf)) + .as(RxJava2Adapter::monoToMaybe); + } + Single testMaybeSwitchIfEmpty() { return Maybe.just(1) .as(RxJava2Adapter::maybeToMono) diff --git a/error-prone-contrib/src/test/resources/tech/picnic/errorprone/bugpatterns/RxJavaSingleToReactorTemplatesTestInput.java b/error-prone-contrib/src/test/resources/tech/picnic/errorprone/bugpatterns/RxJavaSingleToReactorTemplatesTestInput.java index cb4eb4fa..6150f639 100644 --- a/error-prone-contrib/src/test/resources/tech/picnic/errorprone/bugpatterns/RxJavaSingleToReactorTemplatesTestInput.java +++ b/error-prone-contrib/src/test/resources/tech/picnic/errorprone/bugpatterns/RxJavaSingleToReactorTemplatesTestInput.java @@ -5,6 +5,10 @@ import io.reactivex.Single; final class RxJavaObservableToReactorTemplatesTest implements RefasterTemplateTestCase { + Single testSingleJust() { + return Single.just(1); + } + Maybe testSingleFilter() { return Single.just(1).filter(i -> i > 2); } diff --git a/error-prone-contrib/src/test/resources/tech/picnic/errorprone/bugpatterns/RxJavaSingleToReactorTemplatesTestOutput.java b/error-prone-contrib/src/test/resources/tech/picnic/errorprone/bugpatterns/RxJavaSingleToReactorTemplatesTestOutput.java index bc6e3e24..319490b6 100644 --- a/error-prone-contrib/src/test/resources/tech/picnic/errorprone/bugpatterns/RxJavaSingleToReactorTemplatesTestOutput.java +++ b/error-prone-contrib/src/test/resources/tech/picnic/errorprone/bugpatterns/RxJavaSingleToReactorTemplatesTestOutput.java @@ -6,6 +6,10 @@ import reactor.adapter.rxjava.RxJava2Adapter; final class RxJavaSingleToReactorTemplatesTest implements RefasterTemplateTestCase { + Single testSingleJust() { + return Mono.just(1).as(RxJava2Adapter::monoToSingle); + } + Maybe testSingleFilter() { return Single.just(1) .as(RxJava2Adapter::singleToMono)