From 3c6a1d85fd4fba56ec3b5328d02a8a15f03120dd Mon Sep 17 00:00:00 2001 From: Stephan Schroevers Date: Sat, 7 Oct 2023 19:19:14 +0200 Subject: [PATCH] Apply in more cases --- .../refasterrules/ComparatorRules.java | 4 +-- .../refasterrules/ReactorRules.java | 31 +++++++++++++------ .../errorprone/refasterrules/StreamRules.java | 6 ++++ .../refasterrules/ReactorRulesTestInput.java | 14 ++++++--- .../refasterrules/ReactorRulesTestOutput.java | 14 ++++++--- 5 files changed, 50 insertions(+), 19 deletions(-) diff --git a/error-prone-contrib/src/main/java/tech/picnic/errorprone/refasterrules/ComparatorRules.java b/error-prone-contrib/src/main/java/tech/picnic/errorprone/refasterrules/ComparatorRules.java index 50041013d1..a37ef407c2 100644 --- a/error-prone-contrib/src/main/java/tech/picnic/errorprone/refasterrules/ComparatorRules.java +++ b/error-prone-contrib/src/main/java/tech/picnic/errorprone/refasterrules/ComparatorRules.java @@ -185,8 +185,8 @@ Comparator after(Comparator cmp, ToLongFunction function) { } /** - * Where applicable, prefer {@link Comparator#naturalOrder()} over {@link Function#identity()}, as - * it more clearly states intent. + * Where applicable, prefer {@link Comparator#naturalOrder()} over identity function-based + * comparisons, as the former more clearly states intent. */ static final class ThenComparingNaturalOrder> { @BeforeTemplate 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 fca50c0a96..0a323cc36e 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 @@ -595,11 +595,16 @@ Flux after(Flux flux, Function function, int prefe } /** Avoid contrived alternatives to {@link Mono#flatMapIterable(Function)}. */ - static final class MonoFlatMapIterable { + static final class MonoFlatMapIterable> { @BeforeTemplate - Flux before(Mono mono, Function> function) { + Flux before( + Mono mono, + Function function, + @Matches(IsIdentityOperation.class) + Function> identityOperation) { return Refaster.anyOf( - mono.map(function).flatMapIterable(identity()), mono.flux().concatMapIterable(function)); + mono.map(function).flatMapIterable(identityOperation), + mono.flux().concatMapIterable(function)); } @AfterTemplate @@ -629,11 +634,15 @@ Flux after(Mono mono) { * Prefer {@link Flux#concatMapIterable(Function)} over alternatives with less clear syntax or * semantics. */ - static final class FluxConcatMapIterable { + static final class FluxConcatMapIterable> { @BeforeTemplate - Flux before(Flux flux, Function> function) { + Flux before( + Flux flux, + Function function, + @Matches(IsIdentityOperation.class) + Function> identityOperation) { return Refaster.anyOf( - flux.flatMapIterable(function), flux.map(function).concatMapIterable(identity())); + flux.flatMapIterable(function), flux.map(function).concatMapIterable(identityOperation)); } @AfterTemplate @@ -646,13 +655,17 @@ Flux after(Flux flux, Function> * Prefer {@link Flux#concatMapIterable(Function, int)} over alternatives with less clear syntax * or semantics. */ - static final class FluxConcatMapIterableWithPrefetch { + static final class FluxConcatMapIterableWithPrefetch> { @BeforeTemplate Flux before( - Flux flux, Function> function, int prefetch) { + Flux flux, + Function function, + int prefetch, + @Matches(IsIdentityOperation.class) + Function> identityOperation) { return Refaster.anyOf( flux.flatMapIterable(function, prefetch), - flux.map(function).concatMapIterable(identity(), prefetch)); + flux.map(function).concatMapIterable(identityOperation, prefetch)); } @AfterTemplate diff --git a/error-prone-contrib/src/main/java/tech/picnic/errorprone/refasterrules/StreamRules.java b/error-prone-contrib/src/main/java/tech/picnic/errorprone/refasterrules/StreamRules.java index f9bd704e8d..be5a2b4709 100644 --- a/error-prone-contrib/src/main/java/tech/picnic/errorprone/refasterrules/StreamRules.java +++ b/error-prone-contrib/src/main/java/tech/picnic/errorprone/refasterrules/StreamRules.java @@ -357,6 +357,8 @@ boolean before(Stream stream, Predicate predicate) { stream.filter(predicate).findAny().isEmpty()); } + // XXX: Consider extending `@Matches(IsIdentityOperation.class)` such that it can replace this + // template's `Refaster.anyOf` usage. @BeforeTemplate boolean before2( Stream stream, @@ -395,6 +397,8 @@ boolean before(Stream stream, Predicate predicate) { !stream.noneMatch(predicate), stream.filter(predicate).findAny().isPresent()); } + // XXX: Consider extending `@Matches(IsIdentityOperation.class)` such that it can replace this + // template's `Refaster.anyOf` usage. @BeforeTemplate boolean before2( Stream stream, @@ -415,6 +419,8 @@ boolean before(Stream stream, Predicate predicate) { return stream.noneMatch(Refaster.anyOf(not(predicate), predicate.negate())); } + // XXX: Consider extending `@Matches(IsIdentityOperation.class)` such that it can replace this + // template's `Refaster.anyOf` usage. @BeforeTemplate boolean before2( Stream stream, 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 8f3ee12e49..adcdd1243c 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 @@ -219,7 +219,9 @@ ImmutableSet> testFluxConcatMapWithPrefetch() { ImmutableSet> testMonoFlatMapIterable() { return ImmutableSet.of( Mono.just(1).map(ImmutableSet::of).flatMapIterable(identity()), - Mono.just(2).flux().concatMapIterable(ImmutableSet::of)); + Mono.just(2).map(ImmutableSet::of).flatMapIterable(v -> v), + Mono.just(3).map(ImmutableSet::of).flatMapIterable(v -> ImmutableSet.of()), + Mono.just(4).flux().concatMapIterable(ImmutableSet::of)); } Flux testMonoFlatMapIterableIdentity() { @@ -229,13 +231,17 @@ Flux testMonoFlatMapIterableIdentity() { ImmutableSet> testFluxConcatMapIterable() { return ImmutableSet.of( Flux.just(1).flatMapIterable(ImmutableList::of), - Flux.just(2).map(ImmutableList::of).concatMapIterable(identity())); + Flux.just(2).map(ImmutableList::of).concatMapIterable(identity()), + Flux.just(3).map(ImmutableList::of).concatMapIterable(v -> v), + Flux.just(4).map(ImmutableList::of).concatMapIterable(v -> ImmutableSet.of())); } ImmutableSet> testFluxConcatMapIterableWithPrefetch() { return ImmutableSet.of( - Flux.just(1).flatMapIterable(ImmutableList::of, 3), - Flux.just(2).map(ImmutableList::of).concatMapIterable(identity(), 3)); + Flux.just(1).flatMapIterable(ImmutableList::of, 5), + Flux.just(2).map(ImmutableList::of).concatMapIterable(identity(), 5), + Flux.just(3).map(ImmutableList::of).concatMapIterable(v -> v, 5), + Flux.just(4).map(ImmutableList::of).concatMapIterable(v -> ImmutableSet.of(), 5)); } Flux testMonoFlatMapToFlux() { 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 04acbf7c53..0a5bf6a7f8 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 @@ -222,7 +222,9 @@ ImmutableSet> testFluxConcatMapWithPrefetch() { ImmutableSet> testMonoFlatMapIterable() { return ImmutableSet.of( Mono.just(1).flatMapIterable(ImmutableSet::of), - Mono.just(2).flatMapIterable(ImmutableSet::of)); + Mono.just(2).flatMapIterable(ImmutableSet::of), + Mono.just(3).map(ImmutableSet::of).flatMapIterable(v -> ImmutableSet.of()), + Mono.just(4).flatMapIterable(ImmutableSet::of)); } Flux testMonoFlatMapIterableIdentity() { @@ -232,13 +234,17 @@ Flux testMonoFlatMapIterableIdentity() { ImmutableSet> testFluxConcatMapIterable() { return ImmutableSet.of( Flux.just(1).concatMapIterable(ImmutableList::of), - Flux.just(2).concatMapIterable(ImmutableList::of)); + Flux.just(2).concatMapIterable(ImmutableList::of), + Flux.just(3).concatMapIterable(ImmutableList::of), + Flux.just(4).map(ImmutableList::of).concatMapIterable(v -> ImmutableSet.of())); } ImmutableSet> testFluxConcatMapIterableWithPrefetch() { return ImmutableSet.of( - Flux.just(1).concatMapIterable(ImmutableList::of, 3), - Flux.just(2).concatMapIterable(ImmutableList::of, 3)); + Flux.just(1).concatMapIterable(ImmutableList::of, 5), + Flux.just(2).concatMapIterable(ImmutableList::of, 5), + Flux.just(3).concatMapIterable(ImmutableList::of, 5), + Flux.just(4).map(ImmutableList::of).concatMapIterable(v -> ImmutableSet.of(), 5)); } Flux testMonoFlatMapToFlux() {