mirror of
https://github.com/jlengrand/error-prone-support.git
synced 2026-03-10 08:11:25 +00:00
Compare commits
34 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
411066bedb | ||
|
|
bedf588e2a | ||
|
|
3a629b11ec | ||
|
|
fc2eb57b40 | ||
|
|
1c429f0d1c | ||
|
|
ac6ffc72e9 | ||
|
|
07399bb4ef | ||
|
|
aa988ef2b0 | ||
|
|
b58be2b89b | ||
|
|
8fa90f6121 | ||
|
|
6ba03c6352 | ||
|
|
912e06885d | ||
|
|
e803a5d333 | ||
|
|
4a1ad1b991 | ||
|
|
80d433f051 | ||
|
|
afd9703ce6 | ||
|
|
f9d310bc4b | ||
|
|
a3a9ca0bf0 | ||
|
|
0e609aeb1c | ||
|
|
e9dae1d66c | ||
|
|
f0ad9d21e6 | ||
|
|
7138aa2100 | ||
|
|
de4667628f | ||
|
|
5e958fe20b | ||
|
|
baa921caac | ||
|
|
ba040bd191 | ||
|
|
a3a20b52e5 | ||
|
|
5d8d27176b | ||
|
|
d878a57a8e | ||
|
|
eaec12f460 | ||
|
|
da7dafb6e7 | ||
|
|
5a7aaf12d6 | ||
|
|
92e4d74e4b | ||
|
|
4a0bc0c210 |
2
.github/workflows/build.yml
vendored
2
.github/workflows/build.yml
vendored
@@ -26,7 +26,7 @@ jobs:
|
|||||||
continue-on-error: ${{ matrix.experimental }}
|
continue-on-error: ${{ matrix.experimental }}
|
||||||
steps:
|
steps:
|
||||||
- name: Install Harden-Runner
|
- name: Install Harden-Runner
|
||||||
uses: step-security/harden-runner@4d991eb9b905ef189e4c376166672c3f2f230481 # v2.11.0
|
uses: step-security/harden-runner@c6295a65d1254861815972266d5933fd6e532bdf # v2.11.1
|
||||||
with:
|
with:
|
||||||
disable-sudo: true
|
disable-sudo: true
|
||||||
egress-policy: block
|
egress-policy: block
|
||||||
|
|||||||
2
.github/workflows/codeql.yml
vendored
2
.github/workflows/codeql.yml
vendored
@@ -22,7 +22,7 @@ jobs:
|
|||||||
runs-on: ubuntu-24.04
|
runs-on: ubuntu-24.04
|
||||||
steps:
|
steps:
|
||||||
- name: Install Harden-Runner
|
- name: Install Harden-Runner
|
||||||
uses: step-security/harden-runner@4d991eb9b905ef189e4c376166672c3f2f230481 # v2.11.0
|
uses: step-security/harden-runner@c6295a65d1254861815972266d5933fd6e532bdf # v2.11.1
|
||||||
with:
|
with:
|
||||||
disable-sudo: true
|
disable-sudo: true
|
||||||
egress-policy: block
|
egress-policy: block
|
||||||
|
|||||||
4
.github/workflows/deploy-website.yml
vendored
4
.github/workflows/deploy-website.yml
vendored
@@ -12,7 +12,7 @@ jobs:
|
|||||||
runs-on: ubuntu-24.04
|
runs-on: ubuntu-24.04
|
||||||
steps:
|
steps:
|
||||||
- name: Install Harden-Runner
|
- name: Install Harden-Runner
|
||||||
uses: step-security/harden-runner@4d991eb9b905ef189e4c376166672c3f2f230481 # v2.11.0
|
uses: step-security/harden-runner@c6295a65d1254861815972266d5933fd6e532bdf # v2.11.1
|
||||||
with:
|
with:
|
||||||
disable-sudo: true
|
disable-sudo: true
|
||||||
egress-policy: block
|
egress-policy: block
|
||||||
@@ -75,7 +75,7 @@ jobs:
|
|||||||
url: ${{ steps.deployment.outputs.page_url }}
|
url: ${{ steps.deployment.outputs.page_url }}
|
||||||
steps:
|
steps:
|
||||||
- name: Install Harden-Runner
|
- name: Install Harden-Runner
|
||||||
uses: step-security/harden-runner@4d991eb9b905ef189e4c376166672c3f2f230481 # v2.11.0
|
uses: step-security/harden-runner@c6295a65d1254861815972266d5933fd6e532bdf # v2.11.1
|
||||||
with:
|
with:
|
||||||
disable-sudo: true
|
disable-sudo: true
|
||||||
egress-policy: block
|
egress-policy: block
|
||||||
|
|||||||
2
.github/workflows/openssf-scorecard.yml
vendored
2
.github/workflows/openssf-scorecard.yml
vendored
@@ -21,7 +21,7 @@ jobs:
|
|||||||
runs-on: ubuntu-24.04
|
runs-on: ubuntu-24.04
|
||||||
steps:
|
steps:
|
||||||
- name: Install Harden-Runner
|
- name: Install Harden-Runner
|
||||||
uses: step-security/harden-runner@4d991eb9b905ef189e4c376166672c3f2f230481 # v2.11.0
|
uses: step-security/harden-runner@c6295a65d1254861815972266d5933fd6e532bdf # v2.11.1
|
||||||
with:
|
with:
|
||||||
disable-sudo: true
|
disable-sudo: true
|
||||||
egress-policy: block
|
egress-policy: block
|
||||||
|
|||||||
2
.github/workflows/pitest-analyze-pr.yml
vendored
2
.github/workflows/pitest-analyze-pr.yml
vendored
@@ -12,7 +12,7 @@ jobs:
|
|||||||
runs-on: ubuntu-24.04
|
runs-on: ubuntu-24.04
|
||||||
steps:
|
steps:
|
||||||
- name: Install Harden-Runner
|
- name: Install Harden-Runner
|
||||||
uses: step-security/harden-runner@4d991eb9b905ef189e4c376166672c3f2f230481 # v2.11.0
|
uses: step-security/harden-runner@c6295a65d1254861815972266d5933fd6e532bdf # v2.11.1
|
||||||
with:
|
with:
|
||||||
disable-sudo: true
|
disable-sudo: true
|
||||||
egress-policy: block
|
egress-policy: block
|
||||||
|
|||||||
2
.github/workflows/pitest-update-pr.yml
vendored
2
.github/workflows/pitest-update-pr.yml
vendored
@@ -20,7 +20,7 @@ jobs:
|
|||||||
runs-on: ubuntu-24.04
|
runs-on: ubuntu-24.04
|
||||||
steps:
|
steps:
|
||||||
- name: Install Harden-Runner
|
- name: Install Harden-Runner
|
||||||
uses: step-security/harden-runner@4d991eb9b905ef189e4c376166672c3f2f230481 # v2.11.0
|
uses: step-security/harden-runner@c6295a65d1254861815972266d5933fd6e532bdf # v2.11.1
|
||||||
with:
|
with:
|
||||||
disable-sudo: true
|
disable-sudo: true
|
||||||
egress-policy: block
|
egress-policy: block
|
||||||
|
|||||||
2
.github/workflows/run-integration-tests.yml
vendored
2
.github/workflows/run-integration-tests.yml
vendored
@@ -22,7 +22,7 @@ jobs:
|
|||||||
integration-test: [ "checkstyle", "metrics", "prometheus-java-client" ]
|
integration-test: [ "checkstyle", "metrics", "prometheus-java-client" ]
|
||||||
steps:
|
steps:
|
||||||
- name: Install Harden-Runner
|
- name: Install Harden-Runner
|
||||||
uses: step-security/harden-runner@4d991eb9b905ef189e4c376166672c3f2f230481 # v2.11.0
|
uses: step-security/harden-runner@c6295a65d1254861815972266d5933fd6e532bdf # v2.11.1
|
||||||
with:
|
with:
|
||||||
disable-sudo: true
|
disable-sudo: true
|
||||||
egress-policy: block
|
egress-policy: block
|
||||||
|
|||||||
2
.github/workflows/sonarcloud.yml
vendored
2
.github/workflows/sonarcloud.yml
vendored
@@ -19,7 +19,7 @@ jobs:
|
|||||||
runs-on: ubuntu-24.04
|
runs-on: ubuntu-24.04
|
||||||
steps:
|
steps:
|
||||||
- name: Install Harden-Runner
|
- name: Install Harden-Runner
|
||||||
uses: step-security/harden-runner@4d991eb9b905ef189e4c376166672c3f2f230481 # v2.11.0
|
uses: step-security/harden-runner@c6295a65d1254861815972266d5933fd6e532bdf # v2.11.1
|
||||||
with:
|
with:
|
||||||
disable-sudo: true
|
disable-sudo: true
|
||||||
egress-policy: block
|
egress-policy: block
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<groupId>tech.picnic.error-prone-support</groupId>
|
<groupId>tech.picnic.error-prone-support</groupId>
|
||||||
<artifactId>error-prone-support</artifactId>
|
<artifactId>error-prone-support</artifactId>
|
||||||
<version>0.21.0</version>
|
<version>0.22.1-SNAPSHOT</version>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
<artifactId>documentation-support</artifactId>
|
<artifactId>documentation-support</artifactId>
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ package tech.picnic.errorprone.documentation;
|
|||||||
|
|
||||||
import static com.google.errorprone.matchers.Matchers.instanceMethod;
|
import static com.google.errorprone.matchers.Matchers.instanceMethod;
|
||||||
import static com.google.errorprone.matchers.method.MethodMatchers.staticMethod;
|
import static com.google.errorprone.matchers.method.MethodMatchers.staticMethod;
|
||||||
|
import static java.util.Objects.requireNonNull;
|
||||||
import static java.util.function.Predicate.not;
|
import static java.util.function.Predicate.not;
|
||||||
|
|
||||||
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
|
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
|
||||||
@@ -167,7 +168,10 @@ public final class BugPatternTestExtractor implements Extractor<BugPatternTestCa
|
|||||||
* is safe, because this code is guarded by an earlier call to `#getClassUnderTest(..)`,
|
* is safe, because this code is guarded by an earlier call to `#getClassUnderTest(..)`,
|
||||||
* which ensures that `tree` is part of a longer method invocation chain.
|
* which ensures that `tree` is part of a longer method invocation chain.
|
||||||
*/
|
*/
|
||||||
MethodInvocationTree inputTree = (MethodInvocationTree) ASTHelpers.getReceiver(tree);
|
MethodInvocationTree inputTree =
|
||||||
|
(MethodInvocationTree)
|
||||||
|
requireNonNull(
|
||||||
|
ASTHelpers.getReceiver(tree), "Instance method invocation must have receiver");
|
||||||
|
|
||||||
String path = ASTHelpers.constValue(inputTree.getArguments().get(0), String.class);
|
String path = ASTHelpers.constValue(inputTree.getArguments().get(0), String.class);
|
||||||
Optional<String> inputCode = getSourceCode(inputTree);
|
Optional<String> inputCode = getSourceCode(inputTree);
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<groupId>tech.picnic.error-prone-support</groupId>
|
<groupId>tech.picnic.error-prone-support</groupId>
|
||||||
<artifactId>error-prone-support</artifactId>
|
<artifactId>error-prone-support</artifactId>
|
||||||
<version>0.21.0</version>
|
<version>0.22.1-SNAPSHOT</version>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
<artifactId>error-prone-contrib</artifactId>
|
<artifactId>error-prone-contrib</artifactId>
|
||||||
@@ -62,6 +62,16 @@
|
|||||||
<artifactId>auto-value-annotations</artifactId>
|
<artifactId>auto-value-annotations</artifactId>
|
||||||
<scope>provided</scope>
|
<scope>provided</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<!-- XXX: JSR-305 (meta-)annotation usage by some dependencies triggers
|
||||||
|
NullAway to attempt to load said annotations. As such some modules
|
||||||
|
require these annotations to be on the classpath. Periodically review
|
||||||
|
whether we can drop this dependeny declaration. See
|
||||||
|
https://github.com/uber/NullAway/issues/1171. -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.google.code.findbugs</groupId>
|
||||||
|
<artifactId>jsr305</artifactId>
|
||||||
|
<scope>provided</scope>
|
||||||
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.google.errorprone</groupId>
|
<groupId>com.google.errorprone</groupId>
|
||||||
<artifactId>error_prone_annotation</artifactId>
|
<artifactId>error_prone_annotation</artifactId>
|
||||||
|
|||||||
@@ -11,6 +11,7 @@ import static com.google.errorprone.matchers.Matchers.not;
|
|||||||
import static com.google.errorprone.matchers.Matchers.returnStatement;
|
import static com.google.errorprone.matchers.Matchers.returnStatement;
|
||||||
import static com.google.errorprone.matchers.Matchers.staticMethod;
|
import static com.google.errorprone.matchers.Matchers.staticMethod;
|
||||||
import static com.google.errorprone.matchers.Matchers.toType;
|
import static com.google.errorprone.matchers.Matchers.toType;
|
||||||
|
import static java.util.Objects.requireNonNull;
|
||||||
import static tech.picnic.errorprone.utils.Documentation.BUG_PATTERNS_BASE_URL;
|
import static tech.picnic.errorprone.utils.Documentation.BUG_PATTERNS_BASE_URL;
|
||||||
|
|
||||||
import com.google.auto.service.AutoService;
|
import com.google.auto.service.AutoService;
|
||||||
@@ -79,7 +80,10 @@ public final class DirectReturn extends BugChecker implements BlockTreeMatcher {
|
|||||||
return Description.NO_MATCH;
|
return Description.NO_MATCH;
|
||||||
}
|
}
|
||||||
|
|
||||||
Symbol variableSymbol = ASTHelpers.getSymbol(((ReturnTree) finalStatement).getExpression());
|
Symbol variableSymbol =
|
||||||
|
requireNonNull(
|
||||||
|
ASTHelpers.getSymbol(((ReturnTree) finalStatement).getExpression()),
|
||||||
|
"Missing symbol for returned variable");
|
||||||
StatementTree precedingStatement = statements.get(statements.size() - 2);
|
StatementTree precedingStatement = statements.get(statements.size() - 2);
|
||||||
|
|
||||||
return tryMatchAssignment(variableSymbol, precedingStatement)
|
return tryMatchAssignment(variableSymbol, precedingStatement)
|
||||||
|
|||||||
@@ -18,6 +18,7 @@ import com.google.common.collect.ImmutableList;
|
|||||||
import com.google.common.collect.ImmutableMultiset;
|
import com.google.common.collect.ImmutableMultiset;
|
||||||
import com.google.common.collect.ImmutableSet;
|
import com.google.common.collect.ImmutableSet;
|
||||||
import com.google.common.collect.ImmutableTable;
|
import com.google.common.collect.ImmutableTable;
|
||||||
|
import com.google.common.collect.Iterables;
|
||||||
import com.google.errorprone.BugPattern;
|
import com.google.errorprone.BugPattern;
|
||||||
import com.google.errorprone.VisitorState;
|
import com.google.errorprone.VisitorState;
|
||||||
import com.google.errorprone.bugpatterns.BugChecker;
|
import com.google.errorprone.bugpatterns.BugChecker;
|
||||||
@@ -33,6 +34,8 @@ import com.sun.source.tree.MethodInvocationTree;
|
|||||||
import com.sun.source.tree.MethodTree;
|
import com.sun.source.tree.MethodTree;
|
||||||
import com.sun.tools.javac.code.Symbol.MethodSymbol;
|
import com.sun.tools.javac.code.Symbol.MethodSymbol;
|
||||||
import com.sun.tools.javac.code.Symbol.VarSymbol;
|
import com.sun.tools.javac.code.Symbol.VarSymbol;
|
||||||
|
import com.sun.tools.javac.code.Type;
|
||||||
|
import com.sun.tools.javac.code.Types;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
@@ -178,30 +181,45 @@ public final class ExplicitArgumentEnumeration extends BugChecker
|
|||||||
state.getTypes())
|
state.getTypes())
|
||||||
.collect(toImmutableList());
|
.collect(toImmutableList());
|
||||||
|
|
||||||
/*
|
return hasLikelySuitableVarargsOverload(method, overloads, state)
|
||||||
* If all overloads have a single parameter, and at least one of them is a varargs method, then
|
|
||||||
* we assume that unwrapping the iterable argument will cause a suitable overload to be invoked.
|
|
||||||
* (Note that there may be multiple varargs overloads, either with different parameter types, or
|
|
||||||
* due to method overriding; this check does not attempt to determine which exact method or
|
|
||||||
* overload will be invoked as a result of the suggested simplification.)
|
|
||||||
*
|
|
||||||
* Note that this is a (highly!) imperfect heuristic, but it is sufficient to prevent e.g.
|
|
||||||
* unwrapping of arguments to `org.jooq.impl.DSL#row`, which can cause the expression's return
|
|
||||||
* type to change from `RowN` to (e.g.) `Row2`.
|
|
||||||
*/
|
|
||||||
// XXX: There are certainly cases where it _would_ be nice to unwrap the arguments to
|
|
||||||
// `org.jooq.impl.DSL#row(Collection<?>)`. Look into this.
|
|
||||||
// XXX: Ideally we do check that one of the overloads accepts the unwrapped arguments.
|
|
||||||
// XXX: Ideally we validate that eligible overloads have compatible return types.
|
|
||||||
boolean hasLikelySuitableVarargsOverload =
|
|
||||||
overloads.stream().allMatch(m -> m.params().size() == 1)
|
|
||||||
&& overloads.stream().anyMatch(MethodSymbol::isVarArgs);
|
|
||||||
|
|
||||||
return hasLikelySuitableVarargsOverload
|
|
||||||
? Optional.of(SourceCode.unwrapMethodInvocation(argument, state))
|
? Optional.of(SourceCode.unwrapMethodInvocation(argument, state))
|
||||||
: Optional.empty();
|
: Optional.empty();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Tells whether it is likely that, if the argument to the given method is unwrapped, a suitable
|
||||||
|
* varargs overload will be invoked instead.
|
||||||
|
*
|
||||||
|
* <p>If all overloads have a single parameter, and at least one of them is a suitably-typed
|
||||||
|
* varargs method, then we assume that unwrapping the iterable argument will cause a suitable
|
||||||
|
* overload to be invoked. (Note that there may be multiple varargs overloads due to method
|
||||||
|
* overriding; this check does not attempt to determine which exact method or overload will be
|
||||||
|
* invoked as a result of the suggested simplification.)
|
||||||
|
*
|
||||||
|
* <p>Note that this is a (highly!) imperfect heuristic, but it is sufficient to prevent e.g.
|
||||||
|
* unwrapping of arguments to `org.jooq.impl.DSL#row`, which can cause the expression's return
|
||||||
|
* type to change from `RowN` to (e.g.) `Row2`.
|
||||||
|
*/
|
||||||
|
// XXX: There are certainly cases where it _would_ be nice to unwrap the arguments to
|
||||||
|
// `org.jooq.impl.DSL#row(Collection<?>)`. Look into this.
|
||||||
|
// XXX: Ideally we validate that eligible overloads have compatible return types.
|
||||||
|
private static boolean hasLikelySuitableVarargsOverload(
|
||||||
|
MethodSymbol method, ImmutableList<MethodSymbol> overloads, VisitorState state) {
|
||||||
|
Types types = state.getTypes();
|
||||||
|
// XXX: This logic is fragile, as it assumes that the method parameter's type is of the form
|
||||||
|
// `X<T>`, where `T` is the type of the explicitly enumerated values passed to the expression to
|
||||||
|
// be unwrapped. This should generally hold, given the types returned by the
|
||||||
|
// `EXPLICIT_ITERABLE_CREATOR` expressions: `Iterable<T>`, `List<T>`, `Set<T>`, etc.
|
||||||
|
Type parameterType =
|
||||||
|
Iterables.getOnlyElement(
|
||||||
|
Iterables.getOnlyElement(method.getParameters()).type.getTypeArguments());
|
||||||
|
return overloads.stream().allMatch(m -> m.params().size() == 1)
|
||||||
|
&& overloads.stream()
|
||||||
|
.filter(MethodSymbol::isVarArgs)
|
||||||
|
.map(m -> types.elemtype(Iterables.getOnlyElement(m.getParameters()).type))
|
||||||
|
.anyMatch(varArgsType -> types.containsType(parameterType, varArgsType));
|
||||||
|
}
|
||||||
|
|
||||||
private static Optional<SuggestedFix> trySuggestCallingCustomAlternative(
|
private static Optional<SuggestedFix> trySuggestCallingCustomAlternative(
|
||||||
MethodInvocationTree tree, MethodInvocationTree argument, VisitorState state) {
|
MethodInvocationTree tree, MethodInvocationTree argument, VisitorState state) {
|
||||||
return ALTERNATIVE_METHODS.rowMap().entrySet().stream()
|
return ALTERNATIVE_METHODS.rowMap().entrySet().stream()
|
||||||
|
|||||||
@@ -17,6 +17,7 @@ import static com.google.errorprone.matchers.Matchers.isSameType;
|
|||||||
import static com.google.errorprone.matchers.Matchers.methodHasParameters;
|
import static com.google.errorprone.matchers.Matchers.methodHasParameters;
|
||||||
import static com.google.errorprone.matchers.Matchers.staticMethod;
|
import static com.google.errorprone.matchers.Matchers.staticMethod;
|
||||||
import static com.google.errorprone.matchers.Matchers.toType;
|
import static com.google.errorprone.matchers.Matchers.toType;
|
||||||
|
import static java.util.Objects.requireNonNull;
|
||||||
import static java.util.function.Predicate.not;
|
import static java.util.function.Predicate.not;
|
||||||
import static java.util.stream.Collectors.joining;
|
import static java.util.stream.Collectors.joining;
|
||||||
import static tech.picnic.errorprone.utils.Documentation.BUG_PATTERNS_BASE_URL;
|
import static tech.picnic.errorprone.utils.Documentation.BUG_PATTERNS_BASE_URL;
|
||||||
@@ -129,7 +130,10 @@ public final class JUnitValueSource extends BugChecker implements MethodTreeMatc
|
|||||||
return Description.NO_MATCH;
|
return Description.NO_MATCH;
|
||||||
}
|
}
|
||||||
|
|
||||||
Type parameterType = ASTHelpers.getType(Iterables.getOnlyElement(tree.getParameters()));
|
Type parameterType =
|
||||||
|
requireNonNull(
|
||||||
|
ASTHelpers.getType(Iterables.getOnlyElement(tree.getParameters())),
|
||||||
|
"Missing type for method parameter");
|
||||||
|
|
||||||
return findMethodSourceAnnotation(tree, state)
|
return findMethodSourceAnnotation(tree, state)
|
||||||
.flatMap(
|
.flatMap(
|
||||||
@@ -173,7 +177,9 @@ public final class JUnitValueSource extends BugChecker implements MethodTreeMatc
|
|||||||
|
|
||||||
private static Optional<MethodTree> findMatchingSibling(
|
private static Optional<MethodTree> findMatchingSibling(
|
||||||
MethodTree tree, Predicate<? super MethodTree> predicate, VisitorState state) {
|
MethodTree tree, Predicate<? super MethodTree> predicate, VisitorState state) {
|
||||||
return state.findEnclosing(ClassTree.class).getMembers().stream()
|
return requireNonNull(state.findEnclosing(ClassTree.class), "No class enclosing method")
|
||||||
|
.getMembers()
|
||||||
|
.stream()
|
||||||
.filter(MethodTree.class::isInstance)
|
.filter(MethodTree.class::isInstance)
|
||||||
.map(MethodTree.class::cast)
|
.map(MethodTree.class::cast)
|
||||||
.filter(not(tree::equals))
|
.filter(not(tree::equals))
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ import static com.google.errorprone.BugPattern.SeverityLevel.WARNING;
|
|||||||
import static com.google.errorprone.BugPattern.StandardTags.SIMPLIFICATION;
|
import static com.google.errorprone.BugPattern.StandardTags.SIMPLIFICATION;
|
||||||
import static com.google.errorprone.matchers.Matchers.anyOf;
|
import static com.google.errorprone.matchers.Matchers.anyOf;
|
||||||
import static com.google.errorprone.matchers.Matchers.instanceMethod;
|
import static com.google.errorprone.matchers.Matchers.instanceMethod;
|
||||||
|
import static java.util.Objects.requireNonNull;
|
||||||
import static tech.picnic.errorprone.utils.Documentation.BUG_PATTERNS_BASE_URL;
|
import static tech.picnic.errorprone.utils.Documentation.BUG_PATTERNS_BASE_URL;
|
||||||
|
|
||||||
import com.google.auto.service.AutoService;
|
import com.google.auto.service.AutoService;
|
||||||
@@ -86,7 +87,9 @@ public final class NonEmptyMono extends BugChecker implements MethodInvocationTr
|
|||||||
return Description.NO_MATCH;
|
return Description.NO_MATCH;
|
||||||
}
|
}
|
||||||
|
|
||||||
ExpressionTree receiver = ASTHelpers.getReceiver(tree);
|
ExpressionTree receiver =
|
||||||
|
requireNonNull(
|
||||||
|
ASTHelpers.getReceiver(tree), "Instance method invocation must have receiver");
|
||||||
if (!NON_EMPTY_MONO.matches(receiver, state)) {
|
if (!NON_EMPTY_MONO.matches(receiver, state)) {
|
||||||
return Description.NO_MATCH;
|
return Description.NO_MATCH;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -204,6 +204,11 @@ final class AssertJEnumerableRules {
|
|||||||
return enumAssert.hasSize(iterable.length);
|
return enumAssert.hasSize(iterable.length);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@BeforeTemplate
|
||||||
|
EnumerableAssert<?, S> before(EnumerableAssert<?, S> enumAssert, CharSequence iterable) {
|
||||||
|
return enumAssert.hasSize(iterable.length());
|
||||||
|
}
|
||||||
|
|
||||||
@AfterTemplate
|
@AfterTemplate
|
||||||
EnumerableAssert<?, S> after(EnumerableAssert<?, S> enumAssert, Iterable<E> iterable) {
|
EnumerableAssert<?, S> after(EnumerableAssert<?, S> enumAssert, Iterable<E> iterable) {
|
||||||
return enumAssert.hasSameSizeAs(iterable);
|
return enumAssert.hasSameSizeAs(iterable);
|
||||||
|
|||||||
@@ -515,8 +515,14 @@ final class ReactorRules {
|
|||||||
mono.switchIfEmpty(Mono.empty()), mono.flux().next(), mono.flux().singleOrEmpty());
|
mono.switchIfEmpty(Mono.empty()), mono.flux().next(), mono.flux().singleOrEmpty());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// XXX: Consider filing a SonarCloud issue for the S2637 false positive.
|
||||||
@BeforeTemplate
|
@BeforeTemplate
|
||||||
Mono<@Nullable Void> before2(Mono<@Nullable Void> mono) {
|
@SuppressWarnings({
|
||||||
|
"java:S2637" /* False positive: result is never `null`. */,
|
||||||
|
"java:S4968" /* Result may be `Mono<Void>`. */,
|
||||||
|
"key-to-resolve-AnnotationUseStyle-and-TrailingComment-check-conflict"
|
||||||
|
})
|
||||||
|
Mono<? extends @Nullable Void> before2(Mono<@Nullable Void> mono) {
|
||||||
return Refaster.anyOf(mono.ignoreElement(), mono.then());
|
return Refaster.anyOf(mono.ignoreElement(), mono.then());
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -945,7 +951,8 @@ final class ReactorRules {
|
|||||||
/** Prefer direct invocation of {@link Mono#then()}} over more contrived alternatives. */
|
/** Prefer direct invocation of {@link Mono#then()}} over more contrived alternatives. */
|
||||||
static final class MonoThen<T> {
|
static final class MonoThen<T> {
|
||||||
@BeforeTemplate
|
@BeforeTemplate
|
||||||
Mono<@Nullable Void> before(Mono<T> mono) {
|
@SuppressWarnings("java:S4968" /* Result may be `Mono<Void>`. */)
|
||||||
|
Mono<? extends @Nullable Void> before(Mono<T> mono) {
|
||||||
return Refaster.anyOf(
|
return Refaster.anyOf(
|
||||||
mono.ignoreElement().then(),
|
mono.ignoreElement().then(),
|
||||||
mono.flux().then(),
|
mono.flux().then(),
|
||||||
@@ -954,7 +961,8 @@ final class ReactorRules {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@AfterTemplate
|
@AfterTemplate
|
||||||
Mono<@Nullable Void> after(Mono<T> mono) {
|
@SuppressWarnings("java:S4968" /* Result may be `Mono<Void>`. */)
|
||||||
|
Mono<? extends @Nullable Void> after(Mono<T> mono) {
|
||||||
return mono.then();
|
return mono.then();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -962,17 +970,25 @@ final class ReactorRules {
|
|||||||
/** Avoid vacuous invocations of {@link Flux#ignoreElements()}. */
|
/** Avoid vacuous invocations of {@link Flux#ignoreElements()}. */
|
||||||
static final class FluxThen<T> {
|
static final class FluxThen<T> {
|
||||||
@BeforeTemplate
|
@BeforeTemplate
|
||||||
Mono<@Nullable Void> before(Flux<T> flux) {
|
@SuppressWarnings("java:S4968" /* Result may be `Mono<Void>`. */)
|
||||||
|
Mono<? extends @Nullable Void> before(Flux<T> flux) {
|
||||||
return flux.ignoreElements().then();
|
return flux.ignoreElements().then();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// XXX: Consider filing a SonarCloud issue for the S2637 false positive.
|
||||||
@BeforeTemplate
|
@BeforeTemplate
|
||||||
Mono<@Nullable Void> before2(Flux<@Nullable Void> flux) {
|
@SuppressWarnings({
|
||||||
|
"java:S2637" /* False positive: result is never `null`. */,
|
||||||
|
"java:S4968" /* Result may be `Mono<Void>`. */,
|
||||||
|
"key-to-resolve-AnnotationUseStyle-and-TrailingComment-check-conflict"
|
||||||
|
})
|
||||||
|
Mono<? extends @Nullable Void> before2(Flux<@Nullable Void> flux) {
|
||||||
return flux.ignoreElements();
|
return flux.ignoreElements();
|
||||||
}
|
}
|
||||||
|
|
||||||
@AfterTemplate
|
@AfterTemplate
|
||||||
Mono<@Nullable Void> after(Flux<T> flux) {
|
@SuppressWarnings("java:S4968" /* Result may be `Mono<Void>`. */)
|
||||||
|
Mono<? extends @Nullable Void> after(Flux<T> flux) {
|
||||||
return flux.then();
|
return flux.then();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -980,12 +996,14 @@ final class ReactorRules {
|
|||||||
/** Avoid vacuous invocations of {@link Mono#ignoreElement()}. */
|
/** Avoid vacuous invocations of {@link Mono#ignoreElement()}. */
|
||||||
static final class MonoThenEmpty<T> {
|
static final class MonoThenEmpty<T> {
|
||||||
@BeforeTemplate
|
@BeforeTemplate
|
||||||
Mono<@Nullable Void> before(Mono<T> mono, Publisher<@Nullable Void> publisher) {
|
@SuppressWarnings("java:S4968" /* Result may be `Mono<Void>`. */)
|
||||||
|
Mono<? extends @Nullable Void> before(Mono<T> mono, Publisher<@Nullable Void> publisher) {
|
||||||
return mono.ignoreElement().thenEmpty(publisher);
|
return mono.ignoreElement().thenEmpty(publisher);
|
||||||
}
|
}
|
||||||
|
|
||||||
@AfterTemplate
|
@AfterTemplate
|
||||||
Mono<@Nullable Void> after(Mono<T> mono, Publisher<@Nullable Void> publisher) {
|
@SuppressWarnings("java:S4968" /* Result may be `Mono<Void>`. */)
|
||||||
|
Mono<? extends @Nullable Void> after(Mono<T> mono, Publisher<@Nullable Void> publisher) {
|
||||||
return mono.thenEmpty(publisher);
|
return mono.thenEmpty(publisher);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -993,12 +1011,14 @@ final class ReactorRules {
|
|||||||
/** Avoid vacuous invocations of {@link Flux#ignoreElements()}. */
|
/** Avoid vacuous invocations of {@link Flux#ignoreElements()}. */
|
||||||
static final class FluxThenEmpty<T> {
|
static final class FluxThenEmpty<T> {
|
||||||
@BeforeTemplate
|
@BeforeTemplate
|
||||||
Mono<@Nullable Void> before(Flux<T> flux, Publisher<@Nullable Void> publisher) {
|
@SuppressWarnings("java:S4968" /* Result may be `Mono<Void>`. */)
|
||||||
|
Mono<? extends @Nullable Void> before(Flux<T> flux, Publisher<@Nullable Void> publisher) {
|
||||||
return flux.ignoreElements().thenEmpty(publisher);
|
return flux.ignoreElements().thenEmpty(publisher);
|
||||||
}
|
}
|
||||||
|
|
||||||
@AfterTemplate
|
@AfterTemplate
|
||||||
Mono<@Nullable Void> after(Flux<T> flux, Publisher<@Nullable Void> publisher) {
|
@SuppressWarnings("java:S4968" /* Result may be `Mono<Void>`. */)
|
||||||
|
Mono<? extends @Nullable Void> after(Flux<T> flux, Publisher<@Nullable Void> publisher) {
|
||||||
return flux.thenEmpty(publisher);
|
return flux.thenEmpty(publisher);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1054,7 +1074,8 @@ final class ReactorRules {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@BeforeTemplate
|
@BeforeTemplate
|
||||||
Mono<@Nullable Void> before2(Mono<T> mono1, Mono<@Nullable Void> mono2) {
|
@SuppressWarnings("java:S4968" /* Result may be `Mono<Void>`. */)
|
||||||
|
Mono<? extends @Nullable Void> before2(Mono<T> mono1, Mono<@Nullable Void> mono2) {
|
||||||
return mono1.thenEmpty(mono2);
|
return mono1.thenEmpty(mono2);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1072,7 +1093,8 @@ final class ReactorRules {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@BeforeTemplate
|
@BeforeTemplate
|
||||||
Mono<@Nullable Void> before2(Flux<T> flux, Mono<@Nullable Void> mono) {
|
@SuppressWarnings("java:S4968" /* Result may be `Mono<Void>`. */)
|
||||||
|
Mono<? extends @Nullable Void> before2(Flux<T> flux, Mono<@Nullable Void> mono) {
|
||||||
return flux.thenEmpty(mono);
|
return flux.thenEmpty(mono);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -23,14 +23,16 @@ final class RxJava2AdapterRules {
|
|||||||
/** Use the fluent API style when using {@link RxJava2Adapter#completableToMono}. */
|
/** Use the fluent API style when using {@link RxJava2Adapter#completableToMono}. */
|
||||||
static final class CompletableToMono {
|
static final class CompletableToMono {
|
||||||
@BeforeTemplate
|
@BeforeTemplate
|
||||||
Mono<@Nullable Void> before(Completable completable) {
|
@SuppressWarnings("java:S4968" /* Result may be `Mono<Void>`. */)
|
||||||
|
Mono<? extends @Nullable Void> before(Completable completable) {
|
||||||
return Refaster.anyOf(
|
return Refaster.anyOf(
|
||||||
RxJava2Adapter.completableToMono(completable),
|
RxJava2Adapter.completableToMono(completable),
|
||||||
completable.to(RxJava2Adapter::completableToMono));
|
completable.to(RxJava2Adapter::completableToMono));
|
||||||
}
|
}
|
||||||
|
|
||||||
@AfterTemplate
|
@AfterTemplate
|
||||||
Mono<@Nullable Void> after(Completable completable) {
|
@SuppressWarnings("java:S4968" /* Result may be `Mono<Void>`. */)
|
||||||
|
Mono<? extends @Nullable Void> after(Completable completable) {
|
||||||
return completable.as(RxJava2Adapter::completableToMono);
|
return completable.as(RxJava2Adapter::completableToMono);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,6 +16,8 @@ final class ExplicitArgumentEnumerationTest {
|
|||||||
"import com.google.common.collect.ImmutableList;",
|
"import com.google.common.collect.ImmutableList;",
|
||||||
"import com.google.errorprone.CompilationTestHelper;",
|
"import com.google.errorprone.CompilationTestHelper;",
|
||||||
"import com.google.errorprone.bugpatterns.BugChecker;",
|
"import com.google.errorprone.bugpatterns.BugChecker;",
|
||||||
|
"import io.micrometer.core.instrument.Counter;",
|
||||||
|
"import io.micrometer.core.instrument.Tag;",
|
||||||
"import org.jooq.impl.DSL;",
|
"import org.jooq.impl.DSL;",
|
||||||
"import reactor.core.publisher.Flux;",
|
"import reactor.core.publisher.Flux;",
|
||||||
"import reactor.test.StepVerifier;",
|
"import reactor.test.StepVerifier;",
|
||||||
@@ -32,6 +34,8 @@ final class ExplicitArgumentEnumerationTest {
|
|||||||
"",
|
"",
|
||||||
" DSL.row(ImmutableList.of(1, 2));",
|
" DSL.row(ImmutableList.of(1, 2));",
|
||||||
"",
|
"",
|
||||||
|
" Counter.builder(\"foo\").tags(ImmutableList.of(Tag.of(\"bar\", \"baz\")));",
|
||||||
|
"",
|
||||||
" // BUG: Diagnostic contains:",
|
" // BUG: Diagnostic contains:",
|
||||||
" unaryMethod(ImmutableList.of(1, 2));",
|
" unaryMethod(ImmutableList.of(1, 2));",
|
||||||
" unaryMethodWithLessVisibleOverload(ImmutableList.of(1, 2));",
|
" unaryMethodWithLessVisibleOverload(ImmutableList.of(1, 2));",
|
||||||
|
|||||||
@@ -67,10 +67,11 @@ final class AssertJEnumerableRulesTest implements RefasterRuleCollectionTestCase
|
|||||||
assertThat(ImmutableSet.of(4)).size().isBetween(5, 6));
|
assertThat(ImmutableSet.of(4)).size().isBetween(5, 6));
|
||||||
}
|
}
|
||||||
|
|
||||||
ImmutableSet<EnumerableAssert<?, Integer>> testEnumerableAssertHasSameSizeAs() {
|
ImmutableSet<EnumerableAssert<?, Character>> testEnumerableAssertHasSameSizeAs() {
|
||||||
return ImmutableSet.of(
|
return ImmutableSet.of(
|
||||||
assertThat(ImmutableSet.of(1)).hasSize(Iterables.size(ImmutableSet.of(2))),
|
assertThat("foo").hasSize(Iterables.size(ImmutableSet.of(1))),
|
||||||
assertThat(ImmutableSet.of(3)).hasSize(ImmutableSet.of(4).size()),
|
assertThat("bar").hasSize(ImmutableSet.of(2).size()),
|
||||||
assertThat(ImmutableSet.of(5)).hasSize(new Integer[0].length));
|
assertThat("baz").hasSize(new Integer[0].length),
|
||||||
|
assertThat("qux").hasSize("quux".length()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -66,10 +66,11 @@ final class AssertJEnumerableRulesTest implements RefasterRuleCollectionTestCase
|
|||||||
assertThat(ImmutableSet.of(4)).hasSizeBetween(5, 6));
|
assertThat(ImmutableSet.of(4)).hasSizeBetween(5, 6));
|
||||||
}
|
}
|
||||||
|
|
||||||
ImmutableSet<EnumerableAssert<?, Integer>> testEnumerableAssertHasSameSizeAs() {
|
ImmutableSet<EnumerableAssert<?, Character>> testEnumerableAssertHasSameSizeAs() {
|
||||||
return ImmutableSet.of(
|
return ImmutableSet.of(
|
||||||
assertThat(ImmutableSet.of(1)).hasSameSizeAs(ImmutableSet.of(2)),
|
assertThat("foo").hasSameSizeAs(ImmutableSet.of(1)),
|
||||||
assertThat(ImmutableSet.of(3)).hasSameSizeAs(ImmutableSet.of(4)),
|
assertThat("bar").hasSameSizeAs(ImmutableSet.of(2)),
|
||||||
assertThat(ImmutableSet.of(5)).hasSameSizeAs(new Integer[0]));
|
assertThat("baz").hasSameSizeAs(new Integer[0]),
|
||||||
|
assertThat("qux").hasSameSizeAs("quux"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<groupId>tech.picnic.error-prone-support</groupId>
|
<groupId>tech.picnic.error-prone-support</groupId>
|
||||||
<artifactId>error-prone-support</artifactId>
|
<artifactId>error-prone-support</artifactId>
|
||||||
<version>0.21.0</version>
|
<version>0.22.1-SNAPSHOT</version>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
<artifactId>error-prone-experimental</artifactId>
|
<artifactId>error-prone-experimental</artifactId>
|
||||||
|
|||||||
@@ -29,6 +29,7 @@ import com.sun.source.tree.ReturnTree;
|
|||||||
import com.sun.source.tree.Tree;
|
import com.sun.source.tree.Tree;
|
||||||
import com.sun.source.tree.VariableTree;
|
import com.sun.source.tree.VariableTree;
|
||||||
import com.sun.tools.javac.code.Symbol;
|
import com.sun.tools.javac.code.Symbol;
|
||||||
|
import com.sun.tools.javac.code.Symbol.PackageSymbol;
|
||||||
import com.sun.tools.javac.code.Type;
|
import com.sun.tools.javac.code.Type;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
@@ -126,7 +127,7 @@ public final class MethodReferenceUsage extends BugChecker implements LambdaExpr
|
|||||||
return Optional.empty();
|
return Optional.empty();
|
||||||
}
|
}
|
||||||
|
|
||||||
Symbol sym = ASTHelpers.getSymbol(methodSelect);
|
Symbol sym = ASTHelpers.getSymbol(subTree);
|
||||||
return ASTHelpers.isStatic(sym)
|
return ASTHelpers.isStatic(sym)
|
||||||
? constructFix(lambdaExpr, sym.owner, methodSelect)
|
? constructFix(lambdaExpr, sym.owner, methodSelect)
|
||||||
: constructFix(lambdaExpr, "this", methodSelect);
|
: constructFix(lambdaExpr, "this", methodSelect);
|
||||||
@@ -200,7 +201,8 @@ public final class MethodReferenceUsage extends BugChecker implements LambdaExpr
|
|||||||
Name sName = target.getSimpleName();
|
Name sName = target.getSimpleName();
|
||||||
Optional<SuggestedFix.Builder> fix = constructFix(lambdaExpr, sName, methodName);
|
Optional<SuggestedFix.Builder> fix = constructFix(lambdaExpr, sName, methodName);
|
||||||
|
|
||||||
if (!"java.lang".equals(ASTHelpers.enclosingPackage(target).toString())) {
|
PackageSymbol pkg = ASTHelpers.enclosingPackage(target);
|
||||||
|
if (pkg != null && !"java.lang".equals(pkg.toString())) {
|
||||||
Name fqName = target.getQualifiedName();
|
Name fqName = target.getQualifiedName();
|
||||||
if (!sName.equals(fqName)) {
|
if (!sName.equals(fqName)) {
|
||||||
return fix.map(b -> b.addImport(fqName.toString()));
|
return fix.map(b -> b.addImport(fqName.toString()));
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<groupId>tech.picnic.error-prone-support</groupId>
|
<groupId>tech.picnic.error-prone-support</groupId>
|
||||||
<artifactId>error-prone-support</artifactId>
|
<artifactId>error-prone-support</artifactId>
|
||||||
<version>0.21.0</version>
|
<version>0.22.1-SNAPSHOT</version>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
<artifactId>error-prone-guidelines</artifactId>
|
<artifactId>error-prone-guidelines</artifactId>
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<groupId>tech.picnic.error-prone-support</groupId>
|
<groupId>tech.picnic.error-prone-support</groupId>
|
||||||
<artifactId>error-prone-support</artifactId>
|
<artifactId>error-prone-support</artifactId>
|
||||||
<version>0.21.0</version>
|
<version>0.22.1-SNAPSHOT</version>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
<artifactId>error-prone-utils</artifactId>
|
<artifactId>error-prone-utils</artifactId>
|
||||||
|
|||||||
@@ -1,5 +1,7 @@
|
|||||||
package tech.picnic.errorprone.utils;
|
package tech.picnic.errorprone.utils;
|
||||||
|
|
||||||
|
import static java.util.Objects.requireNonNull;
|
||||||
|
|
||||||
import com.google.common.annotations.VisibleForTesting;
|
import com.google.common.annotations.VisibleForTesting;
|
||||||
import com.google.common.collect.HashMultimap;
|
import com.google.common.collect.HashMultimap;
|
||||||
import com.google.common.collect.ImmutableSet;
|
import com.google.common.collect.ImmutableSet;
|
||||||
@@ -115,9 +117,15 @@ public final class AnnotationAttributeMatcher implements Serializable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private static String extractAttributeName(ExpressionTree expr) {
|
private static String extractAttributeName(ExpressionTree expr) {
|
||||||
return (expr instanceof AssignmentTree assignment)
|
if (!(expr instanceof AssignmentTree assignment)) {
|
||||||
? ASTHelpers.getSymbol(assignment.getVariable()).getSimpleName().toString()
|
return "value";
|
||||||
: "value";
|
}
|
||||||
|
|
||||||
|
return requireNonNull(
|
||||||
|
ASTHelpers.getSymbol(assignment.getVariable()),
|
||||||
|
"Missing symbol for annotation attribute")
|
||||||
|
.getSimpleName()
|
||||||
|
.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
// XXX: The caller of this method can be implemented more efficiently in case of a "wholeTypes"
|
// XXX: The caller of this method can be implemented more efficiently in case of a "wholeTypes"
|
||||||
|
|||||||
@@ -38,7 +38,7 @@
|
|||||||
+ <dependency>
|
+ <dependency>
|
||||||
+ <groupId>com.google.guava</groupId>
|
+ <groupId>com.google.guava</groupId>
|
||||||
+ <artifactId>guava</artifactId>
|
+ <artifactId>guava</artifactId>
|
||||||
+ <version>33.4.0-jre<!-- Renovate: com.google.guava:guava-bom --></version>
|
+ <version>33.4.7-jre<!-- Renovate: com.google.guava:guava-bom --></version>
|
||||||
+ </dependency>
|
+ </dependency>
|
||||||
+ </dependencies>
|
+ </dependencies>
|
||||||
+ </dependencyManagement>
|
+ </dependencyManagement>
|
||||||
|
|||||||
59
pom.xml
59
pom.xml
@@ -4,7 +4,7 @@
|
|||||||
|
|
||||||
<groupId>tech.picnic.error-prone-support</groupId>
|
<groupId>tech.picnic.error-prone-support</groupId>
|
||||||
<artifactId>error-prone-support</artifactId>
|
<artifactId>error-prone-support</artifactId>
|
||||||
<version>0.21.0</version>
|
<version>0.22.1-SNAPSHOT</version>
|
||||||
<packaging>pom</packaging>
|
<packaging>pom</packaging>
|
||||||
|
|
||||||
<name>Picnic :: Error Prone Support</name>
|
<name>Picnic :: Error Prone Support</name>
|
||||||
@@ -52,7 +52,7 @@
|
|||||||
|
|
||||||
<scm child.scm.developerConnection.inherit.append.path="false" child.scm.url.inherit.append.path="false">
|
<scm child.scm.developerConnection.inherit.append.path="false" child.scm.url.inherit.append.path="false">
|
||||||
<developerConnection>scm:git:git@github.com:PicnicSupermarket/error-prone-support.git</developerConnection>
|
<developerConnection>scm:git:git@github.com:PicnicSupermarket/error-prone-support.git</developerConnection>
|
||||||
<tag>v0.21.0</tag>
|
<tag>HEAD</tag>
|
||||||
<url>https://github.com/PicnicSupermarket/error-prone-support</url>
|
<url>https://github.com/PicnicSupermarket/error-prone-support</url>
|
||||||
</scm>
|
</scm>
|
||||||
<issueManagement>
|
<issueManagement>
|
||||||
@@ -146,7 +146,7 @@
|
|||||||
<error-prone.self-check-args />
|
<error-prone.self-check-args />
|
||||||
<!-- The build timestamp is derived from the most recent commit
|
<!-- The build timestamp is derived from the most recent commit
|
||||||
timestamp in support of reproducible builds. -->
|
timestamp in support of reproducible builds. -->
|
||||||
<project.build.outputTimestamp>2025-03-24T10:36:40Z</project.build.outputTimestamp>
|
<project.build.outputTimestamp>2025-04-14T09:36:15Z</project.build.outputTimestamp>
|
||||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||||
<!-- Glob pattern identifying Refaster rule definition files. These
|
<!-- Glob pattern identifying Refaster rule definition files. These
|
||||||
Java classes don't contain "regular" code, and thus require special
|
Java classes don't contain "regular" code, and thus require special
|
||||||
@@ -211,11 +211,11 @@
|
|||||||
<version.guava-beta-checker>1.0</version.guava-beta-checker>
|
<version.guava-beta-checker>1.0</version.guava-beta-checker>
|
||||||
<version.jdk>17</version.jdk>
|
<version.jdk>17</version.jdk>
|
||||||
<version.maven>3.9.9</version.maven>
|
<version.maven>3.9.9</version.maven>
|
||||||
<version.mockito>5.16.1</version.mockito>
|
<version.mockito>5.17.0</version.mockito>
|
||||||
<version.nopen-checker>1.0.1</version.nopen-checker>
|
<version.nopen-checker>1.0.1</version.nopen-checker>
|
||||||
<version.nullaway>0.12.4</version.nullaway>
|
<version.nullaway>0.12.6</version.nullaway>
|
||||||
<version.pitest-git>2.2.0</version.pitest-git>
|
<version.pitest-git>2.2.1</version.pitest-git>
|
||||||
<version.rewrite-templating>1.24.1</version.rewrite-templating>
|
<version.rewrite-templating>1.25.1</version.rewrite-templating>
|
||||||
<version.surefire>3.2.3</version.surefire>
|
<version.surefire>3.2.3</version.surefire>
|
||||||
</properties>
|
</properties>
|
||||||
|
|
||||||
@@ -303,6 +303,16 @@
|
|||||||
<artifactId>auto-value-annotations</artifactId>
|
<artifactId>auto-value-annotations</artifactId>
|
||||||
<version>${version.auto-value}</version>
|
<version>${version.auto-value}</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<!-- XXX: JSR-305 (meta-)annotation usage by some dependencies
|
||||||
|
triggers NullAway to attempt to load said annotations. As such
|
||||||
|
some modules require these annotations to be on the classpath.
|
||||||
|
Periodically review whether we can drop this dependeny version
|
||||||
|
declaration. See https://github.com/uber/NullAway/issues/1171. -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.google.code.findbugs</groupId>
|
||||||
|
<artifactId>jsr305</artifactId>
|
||||||
|
<version>3.0.2</version>
|
||||||
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.google.errorprone</groupId>
|
<groupId>com.google.errorprone</groupId>
|
||||||
<artifactId>error_prone_annotation</artifactId>
|
<artifactId>error_prone_annotation</artifactId>
|
||||||
@@ -331,7 +341,7 @@
|
|||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.google.googlejavaformat</groupId>
|
<groupId>com.google.googlejavaformat</groupId>
|
||||||
<artifactId>google-java-format</artifactId>
|
<artifactId>google-java-format</artifactId>
|
||||||
<version>1.25.2</version>
|
<version>1.26.0</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.google.guava</groupId>
|
<groupId>com.google.guava</groupId>
|
||||||
@@ -341,7 +351,7 @@
|
|||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.google.guava</groupId>
|
<groupId>com.google.guava</groupId>
|
||||||
<artifactId>guava-bom</artifactId>
|
<artifactId>guava-bom</artifactId>
|
||||||
<version>33.4.0-jre</version>
|
<version>33.4.7-jre</version>
|
||||||
<type>pom</type>
|
<type>pom</type>
|
||||||
<scope>import</scope>
|
<scope>import</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
@@ -363,14 +373,14 @@
|
|||||||
<dependency>
|
<dependency>
|
||||||
<groupId>io.micrometer</groupId>
|
<groupId>io.micrometer</groupId>
|
||||||
<artifactId>micrometer-bom</artifactId>
|
<artifactId>micrometer-bom</artifactId>
|
||||||
<version>1.14.5</version>
|
<version>1.14.6</version>
|
||||||
<type>pom</type>
|
<type>pom</type>
|
||||||
<scope>import</scope>
|
<scope>import</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>io.projectreactor</groupId>
|
<groupId>io.projectreactor</groupId>
|
||||||
<artifactId>reactor-bom</artifactId>
|
<artifactId>reactor-bom</artifactId>
|
||||||
<version>2024.0.4</version>
|
<version>2024.0.5</version>
|
||||||
<type>pom</type>
|
<type>pom</type>
|
||||||
<scope>import</scope>
|
<scope>import</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
@@ -387,7 +397,7 @@
|
|||||||
<dependency>
|
<dependency>
|
||||||
<groupId>io.swagger.core.v3</groupId>
|
<groupId>io.swagger.core.v3</groupId>
|
||||||
<artifactId>swagger-annotations</artifactId>
|
<artifactId>swagger-annotations</artifactId>
|
||||||
<version>2.2.29</version>
|
<version>2.2.30</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>jakarta.servlet</groupId>
|
<groupId>jakarta.servlet</groupId>
|
||||||
@@ -422,7 +432,7 @@
|
|||||||
<dependency>
|
<dependency>
|
||||||
<groupId>net.bytebuddy</groupId>
|
<groupId>net.bytebuddy</groupId>
|
||||||
<artifactId>byte-buddy</artifactId>
|
<artifactId>byte-buddy</artifactId>
|
||||||
<version>1.17.4</version>
|
<version>1.17.5</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
<!-- Specified so that Renovate will file Maven upgrade PRs, which
|
<!-- Specified so that Renovate will file Maven upgrade PRs, which
|
||||||
subsequently will cause `maven-enforcer-plugin` to require that
|
subsequently will cause `maven-enforcer-plugin` to require that
|
||||||
@@ -435,7 +445,7 @@
|
|||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.aspectj</groupId>
|
<groupId>org.aspectj</groupId>
|
||||||
<artifactId>aspectjweaver</artifactId>
|
<artifactId>aspectjweaver</artifactId>
|
||||||
<version>1.9.23</version>
|
<version>1.9.24</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.assertj</groupId>
|
<groupId>org.assertj</groupId>
|
||||||
@@ -447,7 +457,7 @@
|
|||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.checkerframework</groupId>
|
<groupId>org.checkerframework</groupId>
|
||||||
<artifactId>checker-qual</artifactId>
|
<artifactId>checker-qual</artifactId>
|
||||||
<version>3.49.1</version>
|
<version>3.49.2</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.hamcrest</groupId>
|
<groupId>org.hamcrest</groupId>
|
||||||
@@ -472,7 +482,7 @@
|
|||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.junit</groupId>
|
<groupId>org.junit</groupId>
|
||||||
<artifactId>junit-bom</artifactId>
|
<artifactId>junit-bom</artifactId>
|
||||||
<version>5.12.1</version>
|
<version>5.12.2</version>
|
||||||
<type>pom</type>
|
<type>pom</type>
|
||||||
<scope>import</scope>
|
<scope>import</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
@@ -498,7 +508,7 @@
|
|||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.openrewrite.recipe</groupId>
|
<groupId>org.openrewrite.recipe</groupId>
|
||||||
<artifactId>rewrite-recipe-bom</artifactId>
|
<artifactId>rewrite-recipe-bom</artifactId>
|
||||||
<version>3.4.0</version>
|
<version>3.6.1</version>
|
||||||
<type>pom</type>
|
<type>pom</type>
|
||||||
<scope>import</scope>
|
<scope>import</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
@@ -610,7 +620,7 @@
|
|||||||
<plugin>
|
<plugin>
|
||||||
<groupId>de.thetaphi</groupId>
|
<groupId>de.thetaphi</groupId>
|
||||||
<artifactId>forbiddenapis</artifactId>
|
<artifactId>forbiddenapis</artifactId>
|
||||||
<version>3.8</version>
|
<version>3.9</version>
|
||||||
<configuration>
|
<configuration>
|
||||||
<bundledSignatures>
|
<bundledSignatures>
|
||||||
<bundledSignature>jdk-internal</bundledSignature>
|
<bundledSignature>jdk-internal</bundledSignature>
|
||||||
@@ -925,7 +935,7 @@
|
|||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.puppycrawl.tools</groupId>
|
<groupId>com.puppycrawl.tools</groupId>
|
||||||
<artifactId>checkstyle</artifactId>
|
<artifactId>checkstyle</artifactId>
|
||||||
<version>10.21.4</version>
|
<version>10.23.0</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>io.spring.nohttp</groupId>
|
<groupId>io.spring.nohttp</groupId>
|
||||||
@@ -1136,7 +1146,7 @@
|
|||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.codehaus.mojo</groupId>
|
<groupId>org.codehaus.mojo</groupId>
|
||||||
<artifactId>extra-enforcer-rules</artifactId>
|
<artifactId>extra-enforcer-rules</artifactId>
|
||||||
<version>1.9.0</version>
|
<version>1.10.0</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
<executions>
|
<executions>
|
||||||
@@ -1300,7 +1310,7 @@
|
|||||||
<plugin>
|
<plugin>
|
||||||
<groupId>org.apache.maven.plugins</groupId>
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
<artifactId>maven-surefire-plugin</artifactId>
|
<artifactId>maven-surefire-plugin</artifactId>
|
||||||
<version>3.5.2</version>
|
<version>3.5.3</version>
|
||||||
<configuration>
|
<configuration>
|
||||||
<includes>
|
<includes>
|
||||||
<include>**/*Test.java</include>
|
<include>**/*Test.java</include>
|
||||||
@@ -1497,7 +1507,7 @@
|
|||||||
<plugin>
|
<plugin>
|
||||||
<groupId>org.jacoco</groupId>
|
<groupId>org.jacoco</groupId>
|
||||||
<artifactId>jacoco-maven-plugin</artifactId>
|
<artifactId>jacoco-maven-plugin</artifactId>
|
||||||
<version>0.8.12</version>
|
<version>0.8.13</version>
|
||||||
<configuration>
|
<configuration>
|
||||||
<excludes>
|
<excludes>
|
||||||
<!-- Refaster rules are tested using a custom method
|
<!-- Refaster rules are tested using a custom method
|
||||||
@@ -1527,7 +1537,7 @@
|
|||||||
<plugin>
|
<plugin>
|
||||||
<groupId>org.pitest</groupId>
|
<groupId>org.pitest</groupId>
|
||||||
<artifactId>pitest-maven</artifactId>
|
<artifactId>pitest-maven</artifactId>
|
||||||
<version>1.19.0</version>
|
<version>1.19.1</version>
|
||||||
<configuration>
|
<configuration>
|
||||||
<excludedClasses>
|
<excludedClasses>
|
||||||
<!-- AutoValue generated classes. -->
|
<!-- AutoValue generated classes. -->
|
||||||
@@ -1581,7 +1591,7 @@
|
|||||||
<plugin>
|
<plugin>
|
||||||
<groupId>org.sonarsource.scanner.maven</groupId>
|
<groupId>org.sonarsource.scanner.maven</groupId>
|
||||||
<artifactId>sonar-maven-plugin</artifactId>
|
<artifactId>sonar-maven-plugin</artifactId>
|
||||||
<version>5.0.0.4389</version>
|
<version>5.1.0.4751</version>
|
||||||
</plugin>
|
</plugin>
|
||||||
</plugins>
|
</plugins>
|
||||||
</pluginManagement>
|
</pluginManagement>
|
||||||
@@ -1940,6 +1950,7 @@
|
|||||||
-XepOpt:NullAway:AnnotatedPackages=tech.picnic
|
-XepOpt:NullAway:AnnotatedPackages=tech.picnic
|
||||||
-XepOpt:NullAway:AssertsEnabled=true
|
-XepOpt:NullAway:AssertsEnabled=true
|
||||||
-XepOpt:NullAway:CheckOptionalEmptiness=true
|
-XepOpt:NullAway:CheckOptionalEmptiness=true
|
||||||
|
-XepOpt:NullAway:JSpecifyMode=true
|
||||||
-XepOpt:Nullness:Conservative=false
|
-XepOpt:Nullness:Conservative=false
|
||||||
-XepOpt:StatementSwitchToExpressionSwitch:EnableDirectConversion=true
|
-XepOpt:StatementSwitchToExpressionSwitch:EnableDirectConversion=true
|
||||||
<!-- Append additional custom arguments. -->
|
<!-- Append additional custom arguments. -->
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<groupId>tech.picnic.error-prone-support</groupId>
|
<groupId>tech.picnic.error-prone-support</groupId>
|
||||||
<artifactId>error-prone-support</artifactId>
|
<artifactId>error-prone-support</artifactId>
|
||||||
<version>0.21.0</version>
|
<version>0.22.1-SNAPSHOT</version>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
<artifactId>refaster-compiler</artifactId>
|
<artifactId>refaster-compiler</artifactId>
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<groupId>tech.picnic.error-prone-support</groupId>
|
<groupId>tech.picnic.error-prone-support</groupId>
|
||||||
<artifactId>error-prone-support</artifactId>
|
<artifactId>error-prone-support</artifactId>
|
||||||
<version>0.21.0</version>
|
<version>0.22.1-SNAPSHOT</version>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
<artifactId>refaster-runner</artifactId>
|
<artifactId>refaster-runner</artifactId>
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<groupId>tech.picnic.error-prone-support</groupId>
|
<groupId>tech.picnic.error-prone-support</groupId>
|
||||||
<artifactId>error-prone-support</artifactId>
|
<artifactId>error-prone-support</artifactId>
|
||||||
<version>0.21.0</version>
|
<version>0.22.1-SNAPSHOT</version>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
<artifactId>refaster-support</artifactId>
|
<artifactId>refaster-support</artifactId>
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<groupId>tech.picnic.error-prone-support</groupId>
|
<groupId>tech.picnic.error-prone-support</groupId>
|
||||||
<artifactId>error-prone-support</artifactId>
|
<artifactId>error-prone-support</artifactId>
|
||||||
<version>0.21.0</version>
|
<version>0.22.1-SNAPSHOT</version>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
<artifactId>refaster-test-support</artifactId>
|
<artifactId>refaster-test-support</artifactId>
|
||||||
|
|||||||
@@ -1,6 +1,12 @@
|
|||||||
# An overview of Error Prone Support releases, along with compatible Error
|
# An overview of Error Prone Support releases, along with compatible Error
|
||||||
# Prone releases. This data was generated by `generate-version-compatibility-overview.sh`.
|
# Prone releases. This data was generated by `generate-version-compatibility-overview.sh`.
|
||||||
releases:
|
releases:
|
||||||
|
- version: 0.22.0
|
||||||
|
compatible:
|
||||||
|
- "2.37.0"
|
||||||
|
- version: 0.21.0
|
||||||
|
compatible:
|
||||||
|
- "2.37.0"
|
||||||
- version: 0.20.0
|
- version: 0.20.0
|
||||||
compatible:
|
compatible:
|
||||||
- "2.36.0"
|
- "2.36.0"
|
||||||
|
|||||||
Reference in New Issue
Block a user