Introduce {Max,Min}ByNaturalOrder Refaster rules (#970)

This commit is contained in:
Stephan Schroevers
2024-01-16 12:03:28 +01:00
committed by GitHub
parent e48492628e
commit 51317fbace
3 changed files with 60 additions and 0 deletions

View File

@@ -7,6 +7,8 @@ import static java.util.Comparator.comparingInt;
import static java.util.Comparator.comparingLong;
import static java.util.Comparator.naturalOrder;
import static java.util.Comparator.reverseOrder;
import static java.util.stream.Collectors.maxBy;
import static java.util.stream.Collectors.minBy;
import com.google.common.collect.Comparators;
import com.google.common.collect.ImmutableList;
@@ -21,11 +23,13 @@ import com.google.errorprone.refaster.annotation.UseImportPolicy;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.Optional;
import java.util.function.BinaryOperator;
import java.util.function.Function;
import java.util.function.ToDoubleFunction;
import java.util.function.ToIntFunction;
import java.util.function.ToLongFunction;
import java.util.stream.Collector;
import java.util.stream.Stream;
import tech.picnic.errorprone.refaster.annotation.OnlineDocumentation;
import tech.picnic.errorprone.refaster.matchers.IsIdentityOperation;
@@ -383,4 +387,36 @@ final class ComparatorRules {
return Comparators::max;
}
}
/**
* Prefer {@link Comparator#naturalOrder()} over {@link Comparator#reverseOrder()} where possible.
*/
static final class MinByNaturalOrder<T extends Comparable<? super T>> {
@BeforeTemplate
Collector<T, ?, Optional<T>> before() {
return maxBy(reverseOrder());
}
@AfterTemplate
@UseImportPolicy(STATIC_IMPORT_ALWAYS)
Collector<T, ?, Optional<T>> after() {
return minBy(naturalOrder());
}
}
/**
* Prefer {@link Comparator#naturalOrder()} over {@link Comparator#reverseOrder()} where possible.
*/
static final class MaxByNaturalOrder<T extends Comparable<? super T>> {
@BeforeTemplate
Collector<T, ?, Optional<T>> before() {
return minBy(reverseOrder());
}
@AfterTemplate
@UseImportPolicy(STATIC_IMPORT_ALWAYS)
Collector<T, ?, Optional<T>> after() {
return maxBy(naturalOrder());
}
}
}

View File

@@ -3,6 +3,8 @@ package tech.picnic.errorprone.refasterrules;
import static java.util.Comparator.naturalOrder;
import static java.util.Comparator.reverseOrder;
import static java.util.function.Function.identity;
import static java.util.stream.Collectors.maxBy;
import static java.util.stream.Collectors.minBy;
import com.google.common.collect.Comparators;
import com.google.common.collect.ImmutableList;
@@ -10,7 +12,9 @@ import com.google.common.collect.ImmutableSet;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.Optional;
import java.util.function.BinaryOperator;
import java.util.stream.Collector;
import java.util.stream.Stream;
import tech.picnic.errorprone.refaster.test.RefasterRuleCollectionTestCase;
@@ -161,4 +165,12 @@ final class ComparatorRulesTest implements RefasterRuleCollectionTestCase {
BinaryOperator<String> testComparatorsMax() {
return BinaryOperator.maxBy(naturalOrder());
}
Collector<Integer, ?, Optional<Integer>> testMinByNaturalOrder() {
return maxBy(reverseOrder());
}
Collector<Integer, ?, Optional<Integer>> testMaxByNaturalOrder() {
return minBy(reverseOrder());
}
}

View File

@@ -3,6 +3,8 @@ package tech.picnic.errorprone.refasterrules;
import static java.util.Comparator.naturalOrder;
import static java.util.Comparator.reverseOrder;
import static java.util.function.Function.identity;
import static java.util.stream.Collectors.maxBy;
import static java.util.stream.Collectors.minBy;
import com.google.common.collect.Comparators;
import com.google.common.collect.ImmutableList;
@@ -10,7 +12,9 @@ import com.google.common.collect.ImmutableSet;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.Optional;
import java.util.function.BinaryOperator;
import java.util.stream.Collector;
import java.util.stream.Stream;
import tech.picnic.errorprone.refaster.test.RefasterRuleCollectionTestCase;
@@ -151,4 +155,12 @@ final class ComparatorRulesTest implements RefasterRuleCollectionTestCase {
BinaryOperator<String> testComparatorsMax() {
return Comparators::max;
}
Collector<Integer, ?, Optional<Integer>> testMinByNaturalOrder() {
return minBy(naturalOrder());
}
Collector<Integer, ?, Optional<Integer>> testMaxByNaturalOrder() {
return maxBy(naturalOrder());
}
}