diff --git a/error-prone-contrib/src/main/java/tech/picnic/errorprone/refasterrules/ReactorRules.java b/error-prone-contrib/src/main/java/tech/picnic/errorprone/refasterrules/ReactorRules.java index 8368c8b5bc..a87aa01c89 100644 --- a/error-prone-contrib/src/main/java/tech/picnic/errorprone/refasterrules/ReactorRules.java +++ b/error-prone-contrib/src/main/java/tech/picnic/errorprone/refasterrules/ReactorRules.java @@ -1658,11 +1658,23 @@ Flux after( } } - /** Prefer {@link Mono#onErrorComplete()} over more contrived alternatives. */ - static final class MonoOnErrorComplete { + /** + * Prefer {@link Mono#onErrorComplete()} over more contrived alternatives, and don't chain it with + * redundant calls to {@link Mono#doOnError}. + */ + static final class MonoOnErrorComplete { @BeforeTemplate - Mono before(Mono mono) { - return mono.onErrorResume(e -> Mono.empty()); + Mono before( + Mono mono, + Consumer onThrowable, + Class clazz, + Consumer onError, + Predicate predicate) { + return Refaster.anyOf( + mono.onErrorResume(e -> Mono.empty()), + mono.onErrorComplete().doOnError(onThrowable), + mono.onErrorComplete().doOnError(clazz, onError), + mono.onErrorComplete().doOnError(predicate, onThrowable)); } @AfterTemplate @@ -1671,11 +1683,23 @@ Mono after(Mono mono) { } } - /** Prefer {@link Flux#onErrorComplete()} over more contrived alternatives. */ - static final class FluxOnErrorComplete { + /** + * Prefer {@link Flux#onErrorComplete()} over more contrived alternatives, and don't chain it with + * redundant calls to {@link Flux#doOnError}. + */ + static final class FluxOnErrorComplete { @BeforeTemplate - Flux before(Flux flux) { - return flux.onErrorResume(e -> Refaster.anyOf(Mono.empty(), Flux.empty())); + Flux before( + Flux flux, + Consumer onThrowable, + Class clazz, + Consumer onError, + Predicate predicate) { + return Refaster.anyOf( + flux.onErrorResume(e -> Refaster.anyOf(Mono.empty(), Flux.empty())), + flux.onErrorComplete().doOnError(onThrowable), + flux.onErrorComplete().doOnError(clazz, onError), + flux.onErrorComplete().doOnError(predicate, onThrowable)); } @AfterTemplate diff --git a/error-prone-contrib/src/test/resources/tech/picnic/errorprone/refasterrules/ReactorRulesTestInput.java b/error-prone-contrib/src/test/resources/tech/picnic/errorprone/refasterrules/ReactorRulesTestInput.java index e708638d1f..1b2a3c95c0 100644 --- a/error-prone-contrib/src/test/resources/tech/picnic/errorprone/refasterrules/ReactorRulesTestInput.java +++ b/error-prone-contrib/src/test/resources/tech/picnic/errorprone/refasterrules/ReactorRulesTestInput.java @@ -620,14 +620,21 @@ Flux testFluxDoOnError() { return Flux.just(1).doOnError(IllegalArgumentException.class::isInstance, e -> {}); } - Mono testMonoOnErrorComplete() { - return Mono.just(1).onErrorResume(e -> Mono.empty()); + ImmutableSet> testMonoOnErrorComplete() { + return ImmutableSet.of( + Mono.just(1).onErrorResume(e -> Mono.empty()), + Mono.just(2).onErrorComplete().doOnError(e -> {}), + Mono.just(3).onErrorComplete().doOnError(IllegalArgumentException.class, e -> {}), + Mono.just(4).onErrorComplete().doOnError(e -> true, e -> {})); } ImmutableSet> testFluxOnErrorComplete() { return ImmutableSet.of( Flux.just(1).onErrorResume(e -> Mono.empty()), - Flux.just(2).onErrorResume(e -> Flux.empty())); + Flux.just(2).onErrorResume(e -> Flux.empty()), + Flux.just(3).onErrorComplete().doOnError(e -> {}), + Flux.just(4).onErrorComplete().doOnError(IllegalArgumentException.class, e -> {}), + Flux.just(5).onErrorComplete().doOnError(e -> true, e -> {})); } ImmutableSet> testMonoOnErrorCompleteClass() { diff --git a/error-prone-contrib/src/test/resources/tech/picnic/errorprone/refasterrules/ReactorRulesTestOutput.java b/error-prone-contrib/src/test/resources/tech/picnic/errorprone/refasterrules/ReactorRulesTestOutput.java index 31c50714f7..40f420f963 100644 --- a/error-prone-contrib/src/test/resources/tech/picnic/errorprone/refasterrules/ReactorRulesTestOutput.java +++ b/error-prone-contrib/src/test/resources/tech/picnic/errorprone/refasterrules/ReactorRulesTestOutput.java @@ -599,12 +599,21 @@ Flux testFluxDoOnError() { return Flux.just(1).doOnError(IllegalArgumentException.class, e -> {}); } - Mono testMonoOnErrorComplete() { - return Mono.just(1).onErrorComplete(); + ImmutableSet> testMonoOnErrorComplete() { + return ImmutableSet.of( + Mono.just(1).onErrorComplete(), + Mono.just(2).onErrorComplete(), + Mono.just(3).onErrorComplete(), + Mono.just(4).onErrorComplete()); } ImmutableSet> testFluxOnErrorComplete() { - return ImmutableSet.of(Flux.just(1).onErrorComplete(), Flux.just(2).onErrorComplete()); + return ImmutableSet.of( + Flux.just(1).onErrorComplete(), + Flux.just(2).onErrorComplete(), + Flux.just(3).onErrorComplete(), + Flux.just(4).onErrorComplete(), + Flux.just(5).onErrorComplete()); } ImmutableSet> testMonoOnErrorCompleteClass() {