From aeb79f90adbf50d41d331ae34887ad779a3e408b Mon Sep 17 00:00:00 2001 From: Phil Werli Date: Wed, 4 Oct 2023 18:44:52 +0200 Subject: [PATCH 1/2] Introduce `{Mono,Flux}OfType` Refaster rules --- .../refasterrules/ReactorRules.java | 34 +++++++++++++++++++ .../refasterrules/ReactorRulesTestInput.java | 12 +++++++ .../refasterrules/ReactorRulesTestOutput.java | 8 +++++ 3 files changed, 54 insertions(+) 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 68650e5b45..e1d8815e60 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 @@ -1053,6 +1053,40 @@ Flux after(Flux flux) { } } + /** Prefer {@link Mono#ofType(Class)} over more contrived alternatives. */ + static final class MonoOfType { + @BeforeTemplate + Mono before(Mono mono) { + return mono.filter( + Refaster.anyOf( + Refaster.clazz()::isInstance, + x -> Refaster.clazz().isAssignableFrom(x.getClass()))) + .cast(Refaster.clazz()); + } + + @AfterTemplate + Mono after(Mono mono) { + return mono.ofType(Refaster.clazz()); + } + } + + /** Prefer {@link Flux#ofType(Class)} over more contrived alternatives. */ + static final class FluxOfType { + @BeforeTemplate + Flux before(Flux flux) { + return flux.filter( + Refaster.anyOf( + Refaster.clazz()::isInstance, + x -> Refaster.clazz().isAssignableFrom(x.getClass()))) + .cast(Refaster.clazz()); + } + + @AfterTemplate + Flux after(Flux flux) { + return flux.ofType(Refaster.clazz()); + } + } + /** Prefer {@link Mono#flatMap(Function)} over more contrived alternatives. */ static final class MonoFlatMap { @BeforeTemplate 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 b10b47f57b..388bab058a 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 @@ -364,6 +364,18 @@ Flux testFluxCast() { return Flux.just(1).map(Number.class::cast); } + ImmutableSet> testMonoOfType() { + return ImmutableSet.of( + Mono.just(1).filter(Number.class::isInstance).cast(Number.class), + Mono.just(2).filter(n -> Number.class.isAssignableFrom(n.getClass())).cast(Number.class)); + } + + ImmutableSet> testFluxOfType() { + return ImmutableSet.of( + Flux.just(1).filter(Number.class::isInstance).cast(Number.class), + Flux.just(2).filter(n -> Number.class.isAssignableFrom(n.getClass())).cast(Number.class)); + } + Mono testMonoFlatMap() { return Mono.just("foo").map(Mono::just).flatMap(identity()); } 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 98279c9060..1caa225341 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 @@ -357,6 +357,14 @@ Flux testFluxCast() { return Flux.just(1).cast(Number.class); } + ImmutableSet> testMonoOfType() { + return ImmutableSet.of(Mono.just(1).ofType(Number.class), Mono.just(2).ofType(Number.class)); + } + + ImmutableSet> testFluxOfType() { + return ImmutableSet.of(Flux.just(1).ofType(Number.class), Flux.just(2).ofType(Number.class)); + } + Mono testMonoFlatMap() { return Mono.just("foo").flatMap(Mono::just); } From 788d555d78c7dd9b4190d0b17316b18ff1d754a8 Mon Sep 17 00:00:00 2001 From: Stephan Schroevers Date: Wed, 4 Oct 2023 21:41:13 +0200 Subject: [PATCH 2/2] Suggestions --- .../refasterrules/ReactorRules.java | 24 +++++++------------ .../refasterrules/ReactorRulesTestInput.java | 12 ++++------ .../refasterrules/ReactorRulesTestOutput.java | 8 +++---- 3 files changed, 16 insertions(+), 28 deletions(-) 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 e1d8815e60..b9d79aa450 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 @@ -1056,34 +1056,26 @@ Flux after(Flux flux) { /** Prefer {@link Mono#ofType(Class)} over more contrived alternatives. */ static final class MonoOfType { @BeforeTemplate - Mono before(Mono mono) { - return mono.filter( - Refaster.anyOf( - Refaster.clazz()::isInstance, - x -> Refaster.clazz().isAssignableFrom(x.getClass()))) - .cast(Refaster.clazz()); + Mono before(Mono mono, Class clazz) { + return mono.filter(clazz::isInstance).cast(clazz); } @AfterTemplate - Mono after(Mono mono) { - return mono.ofType(Refaster.clazz()); + Mono after(Mono mono, Class clazz) { + return mono.ofType(clazz); } } /** Prefer {@link Flux#ofType(Class)} over more contrived alternatives. */ static final class FluxOfType { @BeforeTemplate - Flux before(Flux flux) { - return flux.filter( - Refaster.anyOf( - Refaster.clazz()::isInstance, - x -> Refaster.clazz().isAssignableFrom(x.getClass()))) - .cast(Refaster.clazz()); + Flux before(Flux flux, Class clazz) { + return flux.filter(clazz::isInstance).cast(clazz); } @AfterTemplate - Flux after(Flux flux) { - return flux.ofType(Refaster.clazz()); + Flux after(Flux flux, Class clazz) { + return flux.ofType(clazz); } } 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 388bab058a..cab6be19ef 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 @@ -364,16 +364,12 @@ Flux testFluxCast() { return Flux.just(1).map(Number.class::cast); } - ImmutableSet> testMonoOfType() { - return ImmutableSet.of( - Mono.just(1).filter(Number.class::isInstance).cast(Number.class), - Mono.just(2).filter(n -> Number.class.isAssignableFrom(n.getClass())).cast(Number.class)); + Mono testMonoOfType() { + return Mono.just(1).filter(Number.class::isInstance).cast(Number.class); } - ImmutableSet> testFluxOfType() { - return ImmutableSet.of( - Flux.just(1).filter(Number.class::isInstance).cast(Number.class), - Flux.just(2).filter(n -> Number.class.isAssignableFrom(n.getClass())).cast(Number.class)); + Flux testFluxOfType() { + return Flux.just(1).filter(Number.class::isInstance).cast(Number.class); } Mono testMonoFlatMap() { 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 1caa225341..6e8005f65e 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 @@ -357,12 +357,12 @@ Flux testFluxCast() { return Flux.just(1).cast(Number.class); } - ImmutableSet> testMonoOfType() { - return ImmutableSet.of(Mono.just(1).ofType(Number.class), Mono.just(2).ofType(Number.class)); + Mono testMonoOfType() { + return Mono.just(1).ofType(Number.class); } - ImmutableSet> testFluxOfType() { - return ImmutableSet.of(Flux.just(1).ofType(Number.class), Flux.just(2).ofType(Number.class)); + Flux testFluxOfType() { + return Flux.just(1).ofType(Number.class); } Mono testMonoFlatMap() {