Compare commits

...

22 Commits

Author SHA1 Message Date
Gijs de Jong
c8c354617d update submodules 2023-10-13 16:26:57 +02:00
Gijs de Jong
0a0c09c447 Clean up action 2023-10-13 16:20:43 +02:00
Gijs de Jong
2cd6b2dc15 Add on-demand integration test workflow 2023-10-13 16:08:55 +02:00
Gijs de Jong
8846614513 Improve integration scripts 2023-10-13 16:00:53 +02:00
Gijs de Jong
9af80ce1ae Skip StaticImport Lexigraphical sort 2023-10-13 16:00:53 +02:00
Gijs de Jong
df89f6d83b Add calcite integration test 2023-10-13 16:00:53 +02:00
Gijs de Jong
0bcd6f081f Finalise processing module 2023-10-13 16:00:52 +02:00
Gijs de Jong
bcd33f42e5 druid progress 2023-10-13 16:00:52 +02:00
Gijs de Jong
f3a6f35fd4 Initial druid integration test 2023-10-13 16:00:52 +02:00
Gijs de Jong
d9a687de4a Finalize dropwizard/metrics integration test 2023-10-13 16:00:52 +02:00
Gijs de Jong
87bc9492b1 Add metrics as integration test 2023-10-13 16:00:52 +02:00
Gijs de Jong
397a299db6 Finalise guava integration test! 2023-10-13 16:00:52 +02:00
Gijs de Jong
1a077529c7 update init patch 2023-10-13 16:00:52 +02:00
Gijs de Jong
07d7c8aad2 Update init.patch 2023-10-13 16:00:51 +02:00
Gijs de Jong
7ffceb5e41 Add suppressions for Preconditions rule 2023-10-13 16:00:51 +02:00
Gijs de Jong
9af5031ea2 update guava patches 2023-10-13 16:00:51 +02:00
Gijs de Jong
c445f0cce9 update guava init patch 2023-10-13 16:00:51 +02:00
Gijs de Jong
42acd1a192 add guava 2023-10-13 16:00:51 +02:00
Gijs de Jong
b91ae01c26 Add expected warnings file 2023-10-13 16:00:51 +02:00
Gijs de Jong
d3e5b20a05 Update checkstyle integration test 2023-10-13 16:00:51 +02:00
Gijs de Jong
65a13c84b4 Update checkstyle to 10.9.3 2023-10-13 16:00:50 +02:00
Stephan Schroevers
696999505f WIP: Introduce Checkstyle integration test 2023-10-13 16:00:50 +02:00
21 changed files with 196869 additions and 0 deletions

36
.github/workflows/integration-test.yml vendored Normal file
View File

@@ -0,0 +1,36 @@
name: On-demand integration test
on:
# run action every time a new comment is created
issue_comment:
types: [ created ]
permissions:
contents: read
jobs:
on_demand_integration_test:
name: On-demand integration test
# Only run the integration test if the created comment is on a pull request
# and contains the string `/integration-test`
if: |
github.event.issue.pull_request &&
contains(github.event.comment.body, '/integration-test')
# XXX TODO: Device matrix?
runs-on: ubuntu-latest
steps:
- name: Check out code
uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4.1
with:
submodules: 'recursive'
persist-credentials: false
- name: Set up JDK
uses: actions/setup-java@0ab4596768b603586c0de567f2430c30f5b0d2b0 # v3.13.0
with:
# XXX TODO: java version matrix?
java-version: 17.0.8
distribution: temurin
cache: maven
- name: Display build environment details
run: mvn --version
- name: Install error-prone-support snapshot
run: mvn -T1C install -DskipTests -Dverification.skip
- name: Run integration test
run: echo "running integration test"

15
.gitmodules vendored Normal file
View File

@@ -0,0 +1,15 @@
[submodule "integration-tests/checkstyle"]
path = integration-tests/checkstyle
url = git@github.com:checkstyle/checkstyle.git
[submodule "integration-tests/guava"]
path = integration-tests/guava
url = https://github.com/google/guava
[submodule "integration-tests/metrics"]
path = integration-tests/metrics
url = https://github.com/dropwizard/metrics
[submodule "integration-tests/druid"]
path = integration-tests/druid
url = https://github.com/apache/druid
[submodule "integration-tests/calcite"]
path = integration-tests/calcite
url = https://github.com/apache/calcite

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,183 @@
diff --git a/build.gradle.kts b/build.gradle.kts
index a9a6c0692..3695e9d9f 100644
--- a/build.gradle.kts
+++ b/build.gradle.kts
@@ -91,7 +91,8 @@ fun reportsForHumans() = !(System.getenv()["CI"]?.toBoolean() ?: false)
val skipJavadoc by props()
val enableMavenLocal by props()
val enableGradleMetadata by props()
-val werror by props(true) // treat javac warnings as errors
+// disable, as error prone will be producing lots of warnings
+val werror by props(false) // treat javac warnings as errors
// Inherited from stage-vote-release-plugin: skipSign, useGpgCmd
// Inherited from gradle-extensions-plugin: slowSuiteLogThreshold=0L, slowTestLogThreshold=2000L
@@ -510,8 +511,8 @@ fun com.github.autostyle.gradle.BaseFormatExtension.license() {
plugins.withType<JavaPlugin> {
configure<JavaPluginConvention> {
- sourceCompatibility = JavaVersion.VERSION_1_8
- targetCompatibility = JavaVersion.VERSION_1_8
+ sourceCompatibility = JavaVersion.VERSION_17
+ targetCompatibility = JavaVersion.VERSION_17
}
configure<JavaPluginExtension> {
consistentResolution {
@@ -548,6 +549,7 @@ fun com.github.autostyle.gradle.BaseFormatExtension.license() {
if (!skipAutostyle) {
autostyle {
java {
+ googleJavaFormat()
filter.exclude(*javaccGeneratedPatterns +
"**/test/java/*.java" +
"**/RelRule.java" /** remove as part of CALCITE-4831 **/)
@@ -640,7 +642,7 @@ fun com.github.autostyle.gradle.BaseFormatExtension.license() {
replace("hamcrest: nullValue", "org.hamcrest.Matchers.nullValue", "org.hamcrest.CoreMatchers.nullValue")
replace("hamcrest: sameInstance", "org.hamcrest.core.IsSame.sameInstance", "org.hamcrest.CoreMatchers.sameInstance")
replace("hamcrest: startsWith", "org.hamcrest.core.StringStartsWith.startsWith", "org.hamcrest.CoreMatchers.startsWith")
- replaceRegex("hamcrest: size", "\\.size\\(\\), (is|equalTo)\\(", ", hasSize\\(")
+ // replaceRegex("hamcrest: size", "\\.size\\(\\), (is|equalTo)\\(", ", hasSize\\(")
custom("((() preventer", 1) { contents: String ->
ParenthesisBalancer.apply(contents)
}
@@ -685,17 +687,26 @@ fun com.github.autostyle.gradle.BaseFormatExtension.license() {
if (enableErrorprone) {
apply(plugin = "net.ltgt.errorprone")
+ repositories {
+ mavenLocal()
+ }
+
+ val errorProneFlags = System.getProperty("error-prone.flags")
+ val errorProneSupportVersion = System.getProperty("error-prone-support.version")
+
dependencies {
"errorprone"("com.google.errorprone:error_prone_core:${"errorprone".v}")
+ "annotationProcessor"("tech.picnic.error-prone-support:error-prone-contrib:$errorProneSupportVersion")
+ "annotationProcessor"("tech.picnic.error-prone-support:refaster-runner:$errorProneSupportVersion")
"annotationProcessor"("com.google.guava:guava-beta-checker:1.0")
}
tasks.withType<JavaCompile>().configureEach {
options.errorprone {
+ allErrorsAsWarnings.set(true)
disableWarningsInGeneratedCode.set(true)
errorproneArgs.add("-XepExcludedPaths:.*/javacc/.*")
- enable(
- "MethodCanBeStatic"
- )
+ errorproneArgs.addAll(errorProneFlags.toString().split(" "))
+ errorproneArgs.add("-XepOpt:Refaster:NamePattern=^((?!((JUnitTo)?AssertJ)).*)")
disable(
"ComplexBooleanConstant",
"EqualsGetClass",
@@ -704,7 +715,12 @@ fun com.github.autostyle.gradle.BaseFormatExtension.license() {
"MutableConstantField",
"ReferenceEquality",
"SameNameButDifferent",
- "TypeParameterUnusedInFormals"
+ "TypeParameterUnusedInFormals",
+ "CollectorMutability",
+ "MethodCanBeStatic",
+ "StaticImport",
+ "LexicographicalAnnotationListing",
+ "LexicographicalAnnotationAttributeListing"
)
// Analyze issues, and enable the check
disable(
diff --git a/core/src/main/java/org/apache/calcite/plan/SubstitutionVisitor.java b/core/src/main/java/org/apache/calcite/plan/SubstitutionVisitor.java
index 3cd45f455..1887d0a54 100644
--- a/core/src/main/java/org/apache/calcite/plan/SubstitutionVisitor.java
+++ b/core/src/main/java/org/apache/calcite/plan/SubstitutionVisitor.java
@@ -1463,6 +1463,8 @@ private AggregateOnCalcToAggregateUnifyRule() {
operand(MutableAggregate.class, target(0)), 1);
}
+
+ @SuppressWarnings("MapEntryComparingByKey")
@Override protected @Nullable UnifyResult apply(UnifyRuleCall call) {
final MutableAggregate query = (MutableAggregate) call.query;
final MutableCalc qInput = (MutableCalc) query.getInput();
diff --git a/core/src/main/java/org/apache/calcite/plan/volcano/RelSubset.java b/core/src/main/java/org/apache/calcite/plan/volcano/RelSubset.java
index 29b26adb3..5de5d25cd 100644
--- a/core/src/main/java/org/apache/calcite/plan/volcano/RelSubset.java
+++ b/core/src/main/java/org/apache/calcite/plan/volcano/RelSubset.java
@@ -621,6 +621,7 @@ private static String traitDiff(RelTraitSet original, RelTraitSet desired) {
.collect(Collectors.joining(", ", "[", "]"));
}
+ @SuppressWarnings("MapEntryComparingByValue")
public RelNode visit(
RelNode p,
int ordinal,
diff --git a/core/src/main/java/org/apache/calcite/util/ImmutableIntList.java b/core/src/main/java/org/apache/calcite/util/ImmutableIntList.java
index cb34fe3d5..5dbae21f5 100644
--- a/core/src/main/java/org/apache/calcite/util/ImmutableIntList.java
+++ b/core/src/main/java/org/apache/calcite/util/ImmutableIntList.java
@@ -324,10 +324,12 @@ private static class EmptyImmutableIntList extends ImmutableIntList {
return a;
}
+ @SuppressWarnings("ImmutableListOf")
@Override public Iterator<Integer> iterator() {
return Collections.<Integer>emptyList().iterator();
}
+ @SuppressWarnings("ImmutableListOf")
@Override public ListIterator<Integer> listIterator() {
return Collections.<Integer>emptyList().listIterator();
}
diff --git a/gradle.properties b/gradle.properties
index 3b0776230..42cfa56f3 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -53,7 +53,7 @@ com.google.protobuf.version=0.8.10
de.thetaphi.forbiddenapis.version=3.5.1
jacoco.version=0.8.10
kotlin.version=1.7.10
-net.ltgt.errorprone.version=1.3.0
+net.ltgt.errorprone.version=3.1.0
me.champeau.gradle.jmh.version=0.5.3
org.jetbrains.gradle.plugin.idea-ext.version=0.5
org.nosphere.apache.rat.version=0.7.0
@@ -75,7 +75,7 @@ kotlin.stdlib.default.dependency=false
checkerframework.version=3.10.0
checkstyle.version=8.28
spotbugs.version=3.1.11
-errorprone.version=2.5.1
+errorprone.version=HEAD-SNAPSHOT
# The property is used in https://github.com/wildfly/jandex regression testing, so avoid renaming
jandex.version=2.2.3.Final
@@ -109,7 +109,7 @@ foodmart-data-hsqldb.version=0.5
foodmart-data-json.version=0.4
foodmart-queries.version=0.4.1
geode-core.version=1.15.1
-guava.version=19.0
+guava.version=31.1-jre
h2.version=2.1.210
hadoop.version=2.7.5
hamcrest-date.version=2.0.4
diff --git a/linq4j/src/main/java/org/apache/calcite/linq4j/Linq4j.java b/linq4j/src/main/java/org/apache/calcite/linq4j/Linq4j.java
index 482a30757..1b22df621 100644
--- a/linq4j/src/main/java/org/apache/calcite/linq4j/Linq4j.java
+++ b/linq4j/src/main/java/org/apache/calcite/linq4j/Linq4j.java
@@ -417,6 +417,7 @@ public static <T> boolean equals(T t0, T t1) {
* above.
*/
@Deprecated // to be removed before 2.0
+ @SuppressWarnings("RequireNonNullStatement")
public static <T> T requireNonNull(T o) {
if (o == null) {
throw new NullPointerException();
diff --git a/testkit/src/main/java/org/apache/calcite/sql/parser/SqlParserTest.java b/testkit/src/main/java/org/apache/calcite/sql/parser/SqlParserTest.java
index d78fab432..449c2ebdd 100644
--- a/testkit/src/main/java/org/apache/calcite/sql/parser/SqlParserTest.java
+++ b/testkit/src/main/java/org/apache/calcite/sql/parser/SqlParserTest.java
@@ -98,6 +98,7 @@
* @see SqlParserFixture
* @see SqlParserListFixture
*/
+@SuppressWarnings("JUnitClassModifiers")
public class SqlParserTest {
/**
* List of reserved keywords.

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,253 @@
diff --git a/pom.xml b/pom.xml
index 0f453706b..a478db73f 100644
--- a/pom.xml
+++ b/pom.xml
@@ -233,7 +233,8 @@
<junit.version>5.9.1</junit.version>
<forbiddenapis.version>3.4</forbiddenapis.version>
<json-schema-validator.version>1.2.0</json-schema-validator.version>
- <error-prone.version>2.15.0</error-prone.version>
+ <error-prone.version>v2.17.0-picnic-3</error-prone.version>
+ <error-prone-support.version>0.7.0</error-prone-support.version>
<checkerframework.version>3.27.0</checkerframework.version>
</properties>
@@ -333,6 +334,12 @@
<version>1.1.3</version>
<scope>test</scope>
</dependency>
+ <dependency>
+ <groupId>org.assertj</groupId>
+ <artifactId>assertj-core</artifactId>
+ <version>3.24.1</version>
+ <scope>test</scope>
+ </dependency>
<dependency>
<groupId>nl.jqno.equalsverifier</groupId>
<artifactId>equalsverifier</artifactId>
@@ -2322,15 +2329,25 @@
<arg>-Xpkginfo:always</arg>
<arg>-XDcompilePolicy=simple</arg>
<arg>
- -Xplugin:ErrorProne
+ -Xplugin:ErrorProne ${error-prone.flags}
</arg>
</compilerArgs>
<annotationProcessorPaths>
<path>
- <groupId>com.google.errorprone</groupId>
+ <groupId>com.github.PicnicSupermarket.error-prone</groupId>
<artifactId>error_prone_core</artifactId>
<version>${error-prone.version}</version>
</path>
+ <path>
+ <groupId>tech.picnic.error-prone-support</groupId>
+ <artifactId>error-prone-contrib</artifactId>
+ <version>${error-prone-support.version}</version>
+ </path>
+ <path>
+ <groupId>tech.picnic.error-prone-support</groupId>
+ <artifactId>refaster-runner</artifactId>
+ <version>${error-prone-support.version}</version>
+ </path>
</annotationProcessorPaths>
</configuration>
</execution>
@@ -2375,15 +2392,26 @@
<arg>-XDcompilePolicy=simple</arg>
<arg>
-Xplugin:ErrorProne \
- -XepExcludedPaths:.*[\\/]resources[\\/].*
+ -XepExcludedPaths:.*[\\/]resources[\\/].* \
+ ${error-prone.flags}
</arg>
</compilerArgs>
<annotationProcessorPaths>
<path>
- <groupId>com.google.errorprone</groupId>
+ <groupId>com.github.PicnicSupermarket.error-prone</groupId>
<artifactId>error_prone_core</artifactId>
<version>${error-prone.version}</version>
</path>
+ <path>
+ <groupId>tech.picnic.error-prone-support</groupId>
+ <artifactId>error-prone-contrib</artifactId>
+ <version>${error-prone-support.version}</version>
+ </path>
+ <path>
+ <groupId>tech.picnic.error-prone-support</groupId>
+ <artifactId>refaster-runner</artifactId>
+ <version>${error-prone-support.version}</version>
+ </path>
</annotationProcessorPaths>
</configuration>
</execution>
diff --git a/src/main/java/com/puppycrawl/tools/checkstyle/DetailNodeTreeStringPrinter.java b/src/main/java/com/puppycrawl/tools/checkstyle/DetailNodeTreeStringPrinter.java
index de390a42c..a0ff7a866 100644
--- a/src/main/java/com/puppycrawl/tools/checkstyle/DetailNodeTreeStringPrinter.java
+++ b/src/main/java/com/puppycrawl/tools/checkstyle/DetailNodeTreeStringPrinter.java
@@ -63,6 +63,7 @@ public final class DetailNodeTreeStringPrinter {
* @return DetailNode tree
* @throws IllegalArgumentException if there is an error parsing the Javadoc.
*/
+ @SuppressWarnings("CheckArgumentWithMessage")
public static DetailNode parseJavadocAsDetailNode(DetailAST blockComment) {
final JavadocDetailNodeParser parser = new JavadocDetailNodeParser();
final ParseStatus status = parser.parseJavadocAsDetailNode(blockComment);
diff --git a/src/main/java/com/puppycrawl/tools/checkstyle/PackageObjectFactory.java b/src/main/java/com/puppycrawl/tools/checkstyle/PackageObjectFactory.java
index bec9669bf..2ad0f4467 100644
--- a/src/main/java/com/puppycrawl/tools/checkstyle/PackageObjectFactory.java
+++ b/src/main/java/com/puppycrawl/tools/checkstyle/PackageObjectFactory.java
@@ -300,6 +300,7 @@ public class PackageObjectFactory implements ModuleFactory {
* @return the map of third party Checkstyle module names to the set of their fully qualified
* names
*/
+ @SuppressWarnings("CollectorMutability")
private Map<String, Set<String>> generateThirdPartyNameToFullModuleName(ClassLoader loader) {
Map<String, Set<String>> returnValue;
try {
diff --git a/src/main/java/com/puppycrawl/tools/checkstyle/SarifLogger.java b/src/main/java/com/puppycrawl/tools/checkstyle/SarifLogger.java
index 399893f40..aa93aca80 100644
--- a/src/main/java/com/puppycrawl/tools/checkstyle/SarifLogger.java
+++ b/src/main/java/com/puppycrawl/tools/checkstyle/SarifLogger.java
@@ -140,6 +140,7 @@ public class SarifLogger extends AutomaticBean implements AuditListener {
@Override
public void auditFinished(AuditEvent event) {
final String version = SarifLogger.class.getPackage().getImplementationVersion();
+ @SuppressWarnings("IdentityConversion")
final String rendered = report
.replace(VERSION_PLACEHOLDER, String.valueOf(version))
.replace(RESULTS_PLACEHOLDER, String.join(",\n", results));
diff --git a/src/main/java/com/puppycrawl/tools/checkstyle/checks/coding/IllegalCatchCheck.java b/src/main/java/com/puppycrawl/tools/checkstyle/checks/coding/IllegalCatchCheck.java
index fd1d9d729..d5d891d6e 100644
--- a/src/main/java/com/puppycrawl/tools/checkstyle/checks/coding/IllegalCatchCheck.java
+++ b/src/main/java/com/puppycrawl/tools/checkstyle/checks/coding/IllegalCatchCheck.java
@@ -152,6 +152,7 @@ public final class IllegalCatchCheck extends AbstractCheck {
public static final String MSG_KEY = "illegal.catch";
/** Specify exception class names to reject. */
+ @SuppressWarnings("CollectorMutability")
private final Set<String> illegalClassNames = Arrays.stream(new String[] {"Exception", "Error",
"RuntimeException", "Throwable", "java.lang.Error", "java.lang.Exception",
"java.lang.RuntimeException", "java.lang.Throwable", }).collect(Collectors.toSet());
diff --git a/src/main/java/com/puppycrawl/tools/checkstyle/checks/coding/IllegalThrowsCheck.java b/src/main/java/com/puppycrawl/tools/checkstyle/checks/coding/IllegalThrowsCheck.java
index d00cd2fdf..4a0d9220d 100644
--- a/src/main/java/com/puppycrawl/tools/checkstyle/checks/coding/IllegalThrowsCheck.java
+++ b/src/main/java/com/puppycrawl/tools/checkstyle/checks/coding/IllegalThrowsCheck.java
@@ -159,10 +159,12 @@ public final class IllegalThrowsCheck extends AbstractCheck {
public static final String MSG_KEY = "illegal.throw";
/** Specify names of methods to ignore. */
+ @SuppressWarnings("CollectorMutability")
private final Set<String> ignoredMethodNames =
Arrays.stream(new String[] {"finalize", }).collect(Collectors.toSet());
/** Specify throw class names to reject. */
+ @SuppressWarnings("CollectorMutability")
private final Set<String> illegalClassNames = Arrays.stream(
new String[] {"Error", "RuntimeException", "Throwable", "java.lang.Error",
"java.lang.RuntimeException", "java.lang.Throwable", })
diff --git a/src/test/java/com/puppycrawl/tools/checkstyle/AbstractModuleTestSupport.java b/src/test/java/com/puppycrawl/tools/checkstyle/AbstractModuleTestSupport.java
index 157e65406..239c2ecc6 100644
--- a/src/test/java/com/puppycrawl/tools/checkstyle/AbstractModuleTestSupport.java
+++ b/src/test/java/com/puppycrawl/tools/checkstyle/AbstractModuleTestSupport.java
@@ -553,6 +553,7 @@ public abstract class AbstractModuleTestSupport extends AbstractPathTestSupport
*/
protected static String[] removeSuppressed(String[] actualViolations,
String... suppressedViolations) {
+ @SuppressWarnings("CollectorMutability")
final List<String> actualViolationsList =
Arrays.stream(actualViolations).collect(Collectors.toList());
actualViolationsList.removeAll(Arrays.asList(suppressedViolations));
diff --git a/src/test/java/com/puppycrawl/tools/checkstyle/CheckerTest.java b/src/test/java/com/puppycrawl/tools/checkstyle/CheckerTest.java
index 8fee6bfed..7e20a1580 100644
--- a/src/test/java/com/puppycrawl/tools/checkstyle/CheckerTest.java
+++ b/src/test/java/com/puppycrawl/tools/checkstyle/CheckerTest.java
@@ -90,6 +90,7 @@ import com.puppycrawl.tools.checkstyle.utils.CommonUtil;
* @noinspectionreason ClassWithTooManyDependencies - complex tests require a large number
* of imports
*/
+@SuppressWarnings("JUnitClassModifiers")
public class CheckerTest extends AbstractModuleTestSupport {
@TempDir
diff --git a/src/test/java/com/puppycrawl/tools/checkstyle/ConfigurationLoaderTest.java b/src/test/java/com/puppycrawl/tools/checkstyle/ConfigurationLoaderTest.java
index 72881222e..9e81ede00 100644
--- a/src/test/java/com/puppycrawl/tools/checkstyle/ConfigurationLoaderTest.java
+++ b/src/test/java/com/puppycrawl/tools/checkstyle/ConfigurationLoaderTest.java
@@ -46,6 +46,7 @@ import com.puppycrawl.tools.checkstyle.internal.utils.TestUtil;
/**
* Unit test for ConfigurationLoader.
*/
+@SuppressWarnings("JUnitClassModifiers")
public class ConfigurationLoaderTest extends AbstractPathTestSupport {
@Override
diff --git a/src/test/java/com/puppycrawl/tools/checkstyle/JavaAstVisitorTest.java b/src/test/java/com/puppycrawl/tools/checkstyle/JavaAstVisitorTest.java
index 5280ab216..2b984fe89 100644
--- a/src/test/java/com/puppycrawl/tools/checkstyle/JavaAstVisitorTest.java
+++ b/src/test/java/com/puppycrawl/tools/checkstyle/JavaAstVisitorTest.java
@@ -106,6 +106,7 @@ public class JavaAstVisitorTest extends AbstractModuleTestSupport {
.map(Method::getName)
.collect(Collectors.toSet());
+ @SuppressWarnings("CollectorMutability")
final Set<String> filteredVisitMethodNames = Arrays.stream(visitMethods)
.filter(method -> method.getName().contains("visit"))
.filter(method -> method.getModifiers() == Modifier.PUBLIC)
diff --git a/src/test/java/com/puppycrawl/tools/checkstyle/PackageObjectFactoryTest.java b/src/test/java/com/puppycrawl/tools/checkstyle/PackageObjectFactoryTest.java
index 41636ec4b..9ada7757d 100644
--- a/src/test/java/com/puppycrawl/tools/checkstyle/PackageObjectFactoryTest.java
+++ b/src/test/java/com/puppycrawl/tools/checkstyle/PackageObjectFactoryTest.java
@@ -98,6 +98,7 @@ public class PackageObjectFactoryTest {
public void testCtorNullPackageException1() {
final ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
try {
+ @SuppressWarnings("ImmutableSetOf1")
final Object test = new PackageObjectFactory(Collections.singleton(null), classLoader);
assertWithMessage("Exception is expected but got " + test).fail();
}
@@ -126,6 +127,7 @@ public class PackageObjectFactoryTest {
public void testCtorNullPackageException3() {
final ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
try {
+ @SuppressWarnings("ImmutableSetOf1")
final Object test = new PackageObjectFactory(Collections.singleton(null), classLoader,
TRY_IN_ALL_REGISTERED_PACKAGES);
assertWithMessage("Exception is expected but got " + test).fail();
diff --git a/src/test/java/com/puppycrawl/tools/checkstyle/TreeWalkerTest.java b/src/test/java/com/puppycrawl/tools/checkstyle/TreeWalkerTest.java
index da5d8f2af..4b6f85e95 100644
--- a/src/test/java/com/puppycrawl/tools/checkstyle/TreeWalkerTest.java
+++ b/src/test/java/com/puppycrawl/tools/checkstyle/TreeWalkerTest.java
@@ -79,6 +79,7 @@ import com.puppycrawl.tools.checkstyle.utils.CommonUtil;
* @noinspectionreason ClassWithTooManyDependencies - complex tests require a
* large number of imports
*/
+@SuppressWarnings("JUnitClassModifiers")
public class TreeWalkerTest extends AbstractModuleTestSupport {
@TempDir
diff --git a/src/test/java/com/puppycrawl/tools/checkstyle/internal/XpathRegressionTest.java b/src/test/java/com/puppycrawl/tools/checkstyle/internal/XpathRegressionTest.java
index 2e5ce578c..ebf661993 100644
--- a/src/test/java/com/puppycrawl/tools/checkstyle/internal/XpathRegressionTest.java
+++ b/src/test/java/com/puppycrawl/tools/checkstyle/internal/XpathRegressionTest.java
@@ -180,6 +180,7 @@ public class XpathRegressionTest extends AbstractModuleTestSupport {
@Test
public void validateIncompatibleJavadocCheckNames() throws IOException {
// subclasses of AbstractJavadocCheck
+ @SuppressWarnings("CollectorMutability")
final Set<Class<?>> abstractJavadocCheckNames = CheckUtil.getCheckstyleChecks()
.stream()
.filter(AbstractJavadocCheck.class::isAssignableFrom)
diff --git a/src/test/java/com/puppycrawl/tools/checkstyle/internal/utils/CheckUtil.java b/src/test/java/com/puppycrawl/tools/checkstyle/internal/utils/CheckUtil.java
index ae779e07b..55f68955e 100644
--- a/src/test/java/com/puppycrawl/tools/checkstyle/internal/utils/CheckUtil.java
+++ b/src/test/java/com/puppycrawl/tools/checkstyle/internal/utils/CheckUtil.java
@@ -78,6 +78,7 @@ public final class CheckUtil {
* @param checks class instances.
* @return a set of simple names.
*/
+ @SuppressWarnings("CollectorMutability")
public static Set<String> getSimpleNames(Set<Class<?>> checks) {
return checks.stream().map(check -> {
String name = check.getSimpleName();

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,136 @@
diff --git a/config/archunit-store/slices-should-be-free-of-cycles-suppressions b/config/archunit-store/slices-should-be-free-of-cycles-suppressions
index 476efc1b9..4eab67306 100644
--- a/config/archunit-store/slices-should-be-free-of-cycles-suppressions
+++ b/config/archunit-store/slices-should-be-free-of-cycles-suppressions
@@ -1351,8 +1351,8 @@ Cycle detected: Slice checks.javadoc -> \
- Constructor <com.puppycrawl.tools.checkstyle.checks.javadoc.AtclauseOrderCheck.<init>()> calls method <com.puppycrawl.tools.checkstyle.utils.TokenUtil.asBitSet([I)> in (AtclauseOrderCheck.java:177)\
- Method <com.puppycrawl.tools.checkstyle.checks.javadoc.JavadocTagContinuationIndentationCheck.visitJavadocToken(com.puppycrawl.tools.checkstyle.api.DetailNode)> calls method <com.puppycrawl.tools.checkstyle.utils.JavadocUtil.getNextSibling(com.puppycrawl.tools.checkstyle.api.DetailNode)> in (JavadocTagContinuationIndentationCheck.java:177)\
- Method <com.puppycrawl.tools.checkstyle.checks.javadoc.RequireEmptyLineBeforeBlockTagGroupCheck.isAnotherTagBefore(com.puppycrawl.tools.checkstyle.api.DetailNode)> calls method <com.puppycrawl.tools.checkstyle.utils.JavadocUtil.getPreviousSibling(com.puppycrawl.tools.checkstyle.api.DetailNode)> in (RequireEmptyLineBeforeBlockTagGroupCheck.java:177)\
+ - Method <com.puppycrawl.tools.checkstyle.checks.javadoc.JavadocNodeImpl.toString()> calls method <com.puppycrawl.tools.checkstyle.utils.JavadocUtil.getTokenName(int)> in (JavadocNodeImpl.java:178)\
- Method <com.puppycrawl.tools.checkstyle.checks.javadoc.JavadocTagInfo$8.isValidOn(com.puppycrawl.tools.checkstyle.api.DetailAST)> calls method <com.puppycrawl.tools.checkstyle.utils.ScopeUtil.isLocalVariableDef(com.puppycrawl.tools.checkstyle.api.DetailAST)> in (JavadocTagInfo.java:178)\
- - Method <com.puppycrawl.tools.checkstyle.checks.javadoc.JavadocNodeImpl.toString()> calls method <com.puppycrawl.tools.checkstyle.utils.JavadocUtil.getTokenName(int)> in (JavadocNodeImpl.java:179)\
- Method <com.puppycrawl.tools.checkstyle.checks.javadoc.AbstractJavadocCheck.setJavadocTokens([Ljava.lang.String;)> calls method <com.puppycrawl.tools.checkstyle.utils.JavadocUtil.getTokenId(java.lang.String)> in (AbstractJavadocCheck.java:181)\
- Method <com.puppycrawl.tools.checkstyle.checks.javadoc.RequireEmptyLineBeforeBlockTagGroupCheck.isAnotherTagBefore(com.puppycrawl.tools.checkstyle.api.DetailNode)> calls method <com.puppycrawl.tools.checkstyle.utils.JavadocUtil.getPreviousSibling(com.puppycrawl.tools.checkstyle.api.DetailNode)> in (RequireEmptyLineBeforeBlockTagGroupCheck.java:183)\
- Method <com.puppycrawl.tools.checkstyle.checks.javadoc.NonEmptyAtclauseDescriptionCheck.hasOnlyEmptyText(com.puppycrawl.tools.checkstyle.api.DetailNode)> calls method <com.puppycrawl.tools.checkstyle.utils.CommonUtil.isBlank(java.lang.String)> in (NonEmptyAtclauseDescriptionCheck.java:185)\
diff --git a/pom.xml b/pom.xml
index e47bd227e..304b565ed 100644
--- a/pom.xml
+++ b/pom.xml
@@ -230,10 +230,12 @@
<pitest.junit5.plugin.version>1.1.2</pitest.junit5.plugin.version>
<pitest.accelerator.junit5.plugin.version>1.0.4</pitest.accelerator.junit5.plugin.version>
<sonar.test.exclusions>**/test/resources/**/*,**/it/resources/**/*</sonar.test.exclusions>
+ <assertj.version>3.24.2</assertj.version>
<junit.version>5.9.2</junit.version>
<forbiddenapis.version>3.4</forbiddenapis.version>
<json-schema-validator.version>1.2.0</json-schema-validator.version>
- <error-prone.version>2.18.0</error-prone.version>
+ <error-prone.version>2.18.0-picnic-1</error-prone.version>
+ <error-prone-support.version>0.9.0</error-prone-support.version>
<checkerframework.version>3.27.0</checkerframework.version>
</properties>
@@ -277,6 +279,12 @@
</dependency>
<!-- test scope stuff -->
+ <dependency>
+ <groupId>org.assertj</groupId>
+ <artifactId>assertj-core</artifactId>
+ <version>${assertj.version}</version>
+ <scope>test</scope>
+ </dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
@@ -2308,15 +2316,25 @@
<arg>-Xpkginfo:always</arg>
<arg>-XDcompilePolicy=simple</arg>
<arg>
- -Xplugin:ErrorProne
+ -Xplugin:ErrorProne ${error-prone.flags}
</arg>
</compilerArgs>
<annotationProcessorPaths>
<path>
- <groupId>com.google.errorprone</groupId>
+ <groupId>com.github.PicnicSupermarket.error-prone</groupId>
<artifactId>error_prone_core</artifactId>
<version>${error-prone.version}</version>
</path>
+ <path>
+ <groupId>tech.picnic.error-prone-support</groupId>
+ <artifactId>error-prone-contrib</artifactId>
+ <version>${error-prone-support.version}</version>
+ </path>
+ <path>
+ <groupId>tech.picnic.error-prone-support</groupId>
+ <artifactId>refaster-runner</artifactId>
+ <version>${error-prone-support.version}</version>
+ </path>
</annotationProcessorPaths>
</configuration>
</execution>
@@ -2361,15 +2379,26 @@
<arg>-XDcompilePolicy=simple</arg>
<arg>
-Xplugin:ErrorProne \
- -XepExcludedPaths:.*[\\/]resources[\\/].*
+ -XepExcludedPaths:.*[\\/]resources[\\/].* \
+ ${error-prone.flags}
</arg>
</compilerArgs>
<annotationProcessorPaths>
<path>
- <groupId>com.google.errorprone</groupId>
+ <groupId>com.github.PicnicSupermarket.error-prone</groupId>
<artifactId>error_prone_core</artifactId>
<version>${error-prone.version}</version>
</path>
+ <path>
+ <groupId>tech.picnic.error-prone-support</groupId>
+ <artifactId>error-prone-contrib</artifactId>
+ <version>${error-prone-support.version}</version>
+ </path>
+ <path>
+ <groupId>tech.picnic.error-prone-support</groupId>
+ <artifactId>refaster-runner</artifactId>
+ <version>${error-prone-support.version}</version>
+ </path>
</annotationProcessorPaths>
</configuration>
</execution>
diff --git a/src/main/java/com/puppycrawl/tools/checkstyle/DetailNodeTreeStringPrinter.java b/src/main/java/com/puppycrawl/tools/checkstyle/DetailNodeTreeStringPrinter.java
index 61c59b613..9019964ad 100644
--- a/src/main/java/com/puppycrawl/tools/checkstyle/DetailNodeTreeStringPrinter.java
+++ b/src/main/java/com/puppycrawl/tools/checkstyle/DetailNodeTreeStringPrinter.java
@@ -63,6 +63,7 @@ public final class DetailNodeTreeStringPrinter {
* @return DetailNode tree
* @throws IllegalArgumentException if there is an error parsing the Javadoc.
*/
+ @SuppressWarnings("CheckArgumentWithMessage")
public static DetailNode parseJavadocAsDetailNode(DetailAST blockComment) {
final JavadocDetailNodeParser parser = new JavadocDetailNodeParser();
final ParseStatus status = parser.parseJavadocAsDetailNode(blockComment);
diff --git a/src/main/java/com/puppycrawl/tools/checkstyle/checks/javadoc/JavadocNodeImpl.java b/src/main/java/com/puppycrawl/tools/checkstyle/checks/javadoc/JavadocNodeImpl.java
index fd90c4259..0c1b4f141 100644
--- a/src/main/java/com/puppycrawl/tools/checkstyle/checks/javadoc/JavadocNodeImpl.java
+++ b/src/main/java/com/puppycrawl/tools/checkstyle/checks/javadoc/JavadocNodeImpl.java
@@ -20,7 +20,6 @@
package com.puppycrawl.tools.checkstyle.checks.javadoc;
import java.util.Arrays;
-import java.util.Objects;
import java.util.Optional;
import com.puppycrawl.tools.checkstyle.api.DetailNode;
@@ -180,7 +179,7 @@ public class JavadocNodeImpl implements DetailNode {
+ ", text='" + text + '\''
+ ", lineNumber=" + lineNumber
+ ", columnNumber=" + columnNumber
- + ", children=" + Objects.hashCode(children)
+ + ", children=" + Arrays.hashCode(children)
+ ", parent=" + parent + ']';
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,929 @@
diff --git a/guava/src/com/google/common/collect/Iterables.java b/guava/src/com/google/common/collect/Iterables.java
index 7928b15d67..f86ac443ba 100644
--- a/guava/src/com/google/common/collect/Iterables.java
+++ b/guava/src/com/google/common/collect/Iterables.java
@@ -1041,6 +1041,7 @@ public final class Iterables {
*
* @return {@code true} if the iterable contains no elements
*/
+ @SuppressWarnings("IterableIsEmpty")
public static boolean isEmpty(Iterable<?> iterable) {
if (iterable instanceof Collection) {
return ((Collection<?>) iterable).isEmpty();
diff --git a/guava-testlib/test/com/google/common/testing/NullPointerTesterTest.java b/guava-testlib/test/com/google/common/testing/NullPointerTesterTest.java
index a5a20ec3ad..9bad916fe3 100644
--- a/guava-testlib/test/com/google/common/testing/NullPointerTesterTest.java
+++ b/guava-testlib/test/com/google/common/testing/NullPointerTesterTest.java
@@ -839,6 +839,7 @@ public class NullPointerTesterTest extends TestCase {
@SuppressWarnings("unused") // for NullPointerTester
private static class ClassThatFailsToThrowForStatic {
+ @SuppressWarnings("EmptyMethod")
static void staticOneArg(String s) {}
}
@@ -854,6 +855,7 @@ public class NullPointerTesterTest extends TestCase {
private static class SubclassThatTriesToOverrideBadStaticMethod
extends ClassThatFailsToThrowForStatic {
+ @SuppressWarnings("EmptyMethod")
static void staticOneArg(@Nullable String s) {}
}
diff --git a/guava-testlib/test/com/google/common/testing/ClassSanityTesterTest.java b/guava-testlib/test/com/google/common/testing/ClassSanityTesterTest.java
index c5db2d575c..4aa3d60ff0 100644
--- a/guava-testlib/test/com/google/common/testing/ClassSanityTesterTest.java
+++ b/guava-testlib/test/com/google/common/testing/ClassSanityTesterTest.java
@@ -1338,7 +1338,7 @@ public class ClassSanityTesterTest extends TestCase {
private enum EnumFailsToCheckNull {
A;
- @SuppressWarnings("unused")
+ @SuppressWarnings({"unused", "EmptyMethod"})
public void failToCheckNull(String s) {}
}
diff --git a/guava/src/com/google/common/base/Platform.java b/guava/src/com/google/common/base/Platform.java
index 644e89cbfa..137f879603 100644
--- a/guava/src/com/google/common/base/Platform.java
+++ b/guava/src/com/google/common/base/Platform.java
@@ -55,6 +55,7 @@ final class Platform {
return String.format(Locale.ROOT, "%.4g", value);
}
+ @SuppressWarnings("StringIsNullOrEmpty")
static boolean stringIsNullOrEmpty(@CheckForNull String string) {
return string == null || string.isEmpty();
}
diff --git a/guava/src/com/google/common/base/Preconditions.java b/guava/src/com/google/common/base/Preconditions.java
index 13ff77b7f7..1d9729951c 100644
--- a/guava/src/com/google/common/base/Preconditions.java
+++ b/guava/src/com/google/common/base/Preconditions.java
@@ -126,6 +126,7 @@ public final class Preconditions {
* @param expression a boolean expression
* @throws IllegalArgumentException if {@code expression} is false
*/
+ @SuppressWarnings("CheckArgument")
public static void checkArgument(boolean expression) {
if (!expression) {
throw new IllegalArgumentException();
@@ -140,6 +141,7 @@ public final class Preconditions {
* string using {@link String#valueOf(Object)}
* @throws IllegalArgumentException if {@code expression} is false
*/
+ @SuppressWarnings("CheckArgumentWithMessage")
public static void checkArgument(boolean expression, @CheckForNull Object errorMessage) {
if (!expression) {
throw new IllegalArgumentException(String.valueOf(errorMessage));
@@ -159,6 +161,7 @@ public final class Preconditions {
* are converted to strings using {@link String#valueOf(Object)}.
* @throws IllegalArgumentException if {@code expression} is false
*/
+ @SuppressWarnings("CheckArgumentWithMessage")
public static void checkArgument(
boolean expression,
String errorMessageTemplate,
@@ -175,6 +178,7 @@ public final class Preconditions {
*
* @since 20.0 (varargs overload since 2.0)
*/
+ @SuppressWarnings("CheckArgumentWithMessage")
public static void checkArgument(boolean b, String errorMessageTemplate, char p1) {
if (!b) {
throw new IllegalArgumentException(lenientFormat(errorMessageTemplate, p1));
@@ -267,6 +271,7 @@ public final class Preconditions {
*
* @since 20.0 (varargs overload since 2.0)
*/
+ @SuppressWarnings("CheckArgumentWithMessage")
public static void checkArgument(
boolean b, String errorMessageTemplate, char p1, @CheckForNull Object p2) {
if (!b) {
@@ -281,6 +286,7 @@ public final class Preconditions {
*
* @since 20.0 (varargs overload since 2.0)
*/
+ @SuppressWarnings("CheckArgumentWithMessage")
public static void checkArgument(boolean b, String errorMessageTemplate, int p1, char p2) {
if (!b) {
throw new IllegalArgumentException(lenientFormat(errorMessageTemplate, p1, p2));
@@ -294,6 +300,7 @@ public final class Preconditions {
*
* @since 20.0 (varargs overload since 2.0)
*/
+ @SuppressWarnings("CheckArgumentWithMessage")
public static void checkArgument(boolean b, String errorMessageTemplate, int p1, int p2) {
if (!b) {
throw new IllegalArgumentException(lenientFormat(errorMessageTemplate, p1, p2));
@@ -307,6 +314,7 @@ public final class Preconditions {
*
* @since 20.0 (varargs overload since 2.0)
*/
+ @SuppressWarnings("CheckArgumentWithMessage")
public static void checkArgument(boolean b, String errorMessageTemplate, int p1, long p2) {
if (!b) {
throw new IllegalArgumentException(lenientFormat(errorMessageTemplate, p1, p2));
@@ -320,6 +328,7 @@ public final class Preconditions {
*
* @since 20.0 (varargs overload since 2.0)
*/
+ @SuppressWarnings("CheckArgumentWithMessage")
public static void checkArgument(
boolean b, String errorMessageTemplate, int p1, @CheckForNull Object p2) {
if (!b) {
@@ -334,6 +343,7 @@ public final class Preconditions {
*
* @since 20.0 (varargs overload since 2.0)
*/
+ @SuppressWarnings("CheckArgumentWithMessage")
public static void checkArgument(boolean b, String errorMessageTemplate, long p1, char p2) {
if (!b) {
throw new IllegalArgumentException(lenientFormat(errorMessageTemplate, p1, p2));
@@ -347,6 +357,7 @@ public final class Preconditions {
*
* @since 20.0 (varargs overload since 2.0)
*/
+ @SuppressWarnings("CheckArgumentWithMessage")
public static void checkArgument(boolean b, String errorMessageTemplate, long p1, int p2) {
if (!b) {
throw new IllegalArgumentException(lenientFormat(errorMessageTemplate, p1, p2));
@@ -360,6 +371,7 @@ public final class Preconditions {
*
* @since 20.0 (varargs overload since 2.0)
*/
+ @SuppressWarnings("CheckArgumentWithMessage")
public static void checkArgument(boolean b, String errorMessageTemplate, long p1, long p2) {
if (!b) {
throw new IllegalArgumentException(lenientFormat(errorMessageTemplate, p1, p2));
@@ -373,6 +385,7 @@ public final class Preconditions {
*
* @since 20.0 (varargs overload since 2.0)
*/
+ @SuppressWarnings("CheckArgumentWithMessage")
public static void checkArgument(
boolean b, String errorMessageTemplate, long p1, @CheckForNull Object p2) {
if (!b) {
@@ -387,6 +400,7 @@ public final class Preconditions {
*
* @since 20.0 (varargs overload since 2.0)
*/
+ @SuppressWarnings("CheckArgumentWithMessage")
public static void checkArgument(
boolean b, String errorMessageTemplate, @CheckForNull Object p1, char p2) {
if (!b) {
@@ -401,6 +415,7 @@ public final class Preconditions {
*
* @since 20.0 (varargs overload since 2.0)
*/
+ @SuppressWarnings("CheckArgumentWithMessage")
public static void checkArgument(
boolean b, String errorMessageTemplate, @CheckForNull Object p1, int p2) {
if (!b) {
@@ -415,6 +430,7 @@ public final class Preconditions {
*
* @since 20.0 (varargs overload since 2.0)
*/
+ @SuppressWarnings("CheckArgumentWithMessage")
public static void checkArgument(
boolean b, String errorMessageTemplate, @CheckForNull Object p1, long p2) {
if (!b) {
@@ -429,6 +445,7 @@ public final class Preconditions {
*
* @since 20.0 (varargs overload since 2.0)
*/
+ @SuppressWarnings("CheckArgumentWithMessage")
public static void checkArgument(
boolean b, String errorMessageTemplate, @CheckForNull Object p1, @CheckForNull Object p2) {
if (!b) {
@@ -443,6 +460,7 @@ public final class Preconditions {
*
* @since 20.0 (varargs overload since 2.0)
*/
+ @SuppressWarnings("CheckArgumentWithMessage")
public static void checkArgument(
boolean b,
String errorMessageTemplate,
@@ -461,6 +479,7 @@ public final class Preconditions {
*
* @since 20.0 (varargs overload since 2.0)
*/
+ @SuppressWarnings("CheckArgumentWithMessage")
public static void checkArgument(
boolean b,
String errorMessageTemplate,
@@ -481,6 +500,7 @@ public final class Preconditions {
* @throws IllegalStateException if {@code expression} is false
* @see Verify#verify Verify.verify()
*/
+ @SuppressWarnings("CheckState")
public static void checkState(boolean expression) {
if (!expression) {
throw new IllegalStateException();
@@ -497,6 +517,7 @@ public final class Preconditions {
* @throws IllegalStateException if {@code expression} is false
* @see Verify#verify Verify.verify()
*/
+ @SuppressWarnings("CheckStateWithMessage")
public static void checkState(boolean expression, @CheckForNull Object errorMessage) {
if (!expression) {
throw new IllegalStateException(String.valueOf(errorMessage));
@@ -518,6 +539,7 @@ public final class Preconditions {
* @throws IllegalStateException if {@code expression} is false
* @see Verify#verify Verify.verify()
*/
+ @SuppressWarnings("CheckStateWithMessage")
public static void checkState(
boolean expression,
/*
@@ -543,6 +565,7 @@ public final class Preconditions {
*
* @since 20.0 (varargs overload since 2.0)
*/
+ @SuppressWarnings("CheckStateWithMessage")
public static void checkState(boolean b, String errorMessageTemplate, char p1) {
if (!b) {
throw new IllegalStateException(lenientFormat(errorMessageTemplate, p1));
@@ -557,6 +580,7 @@ public final class Preconditions {
*
* @since 20.0 (varargs overload since 2.0)
*/
+ @SuppressWarnings("CheckStateWithMessage")
public static void checkState(boolean b, String errorMessageTemplate, int p1) {
if (!b) {
throw new IllegalStateException(lenientFormat(errorMessageTemplate, p1));
@@ -571,6 +595,7 @@ public final class Preconditions {
*
* @since 20.0 (varargs overload since 2.0)
*/
+ @SuppressWarnings("CheckStateWithMessage")
public static void checkState(boolean b, String errorMessageTemplate, long p1) {
if (!b) {
throw new IllegalStateException(lenientFormat(errorMessageTemplate, p1));
@@ -585,6 +610,7 @@ public final class Preconditions {
*
* @since 20.0 (varargs overload since 2.0)
*/
+ @SuppressWarnings("CheckStateWithMessage")
public static void checkState(boolean b, String errorMessageTemplate, @CheckForNull Object p1) {
if (!b) {
throw new IllegalStateException(lenientFormat(errorMessageTemplate, p1));
@@ -599,6 +625,7 @@ public final class Preconditions {
*
* @since 20.0 (varargs overload since 2.0)
*/
+ @SuppressWarnings("CheckStateWithMessage")
public static void checkState(boolean b, String errorMessageTemplate, char p1, char p2) {
if (!b) {
throw new IllegalStateException(lenientFormat(errorMessageTemplate, p1, p2));
@@ -613,6 +640,7 @@ public final class Preconditions {
*
* @since 20.0 (varargs overload since 2.0)
*/
+ @SuppressWarnings("CheckStateWithMessage")
public static void checkState(boolean b, String errorMessageTemplate, char p1, int p2) {
if (!b) {
throw new IllegalStateException(lenientFormat(errorMessageTemplate, p1, p2));
@@ -627,6 +655,7 @@ public final class Preconditions {
*
* @since 20.0 (varargs overload since 2.0)
*/
+ @SuppressWarnings("CheckStateWithMessage")
public static void checkState(boolean b, String errorMessageTemplate, char p1, long p2) {
if (!b) {
throw new IllegalStateException(lenientFormat(errorMessageTemplate, p1, p2));
@@ -641,6 +670,7 @@ public final class Preconditions {
*
* @since 20.0 (varargs overload since 2.0)
*/
+ @SuppressWarnings("CheckStateWithMessage")
public static void checkState(
boolean b, String errorMessageTemplate, char p1, @CheckForNull Object p2) {
if (!b) {
@@ -656,6 +686,7 @@ public final class Preconditions {
*
* @since 20.0 (varargs overload since 2.0)
*/
+ @SuppressWarnings("CheckStateWithMessage")
public static void checkState(boolean b, String errorMessageTemplate, int p1, char p2) {
if (!b) {
throw new IllegalStateException(lenientFormat(errorMessageTemplate, p1, p2));
@@ -670,6 +701,7 @@ public final class Preconditions {
*
* @since 20.0 (varargs overload since 2.0)
*/
+ @SuppressWarnings("CheckStateWithMessage")
public static void checkState(boolean b, String errorMessageTemplate, int p1, int p2) {
if (!b) {
throw new IllegalStateException(lenientFormat(errorMessageTemplate, p1, p2));
@@ -684,6 +716,7 @@ public final class Preconditions {
*
* @since 20.0 (varargs overload since 2.0)
*/
+ @SuppressWarnings("CheckStateWithMessage")
public static void checkState(boolean b, String errorMessageTemplate, int p1, long p2) {
if (!b) {
throw new IllegalStateException(lenientFormat(errorMessageTemplate, p1, p2));
@@ -698,6 +731,7 @@ public final class Preconditions {
*
* @since 20.0 (varargs overload since 2.0)
*/
+ @SuppressWarnings("CheckStateWithMessage")
public static void checkState(
boolean b, String errorMessageTemplate, int p1, @CheckForNull Object p2) {
if (!b) {
@@ -713,6 +747,7 @@ public final class Preconditions {
*
* @since 20.0 (varargs overload since 2.0)
*/
+ @SuppressWarnings("CheckStateWithMessage")
public static void checkState(boolean b, String errorMessageTemplate, long p1, char p2) {
if (!b) {
throw new IllegalStateException(lenientFormat(errorMessageTemplate, p1, p2));
@@ -727,6 +762,7 @@ public final class Preconditions {
*
* @since 20.0 (varargs overload since 2.0)
*/
+ @SuppressWarnings("CheckStateWithMessage")
public static void checkState(boolean b, String errorMessageTemplate, long p1, int p2) {
if (!b) {
throw new IllegalStateException(lenientFormat(errorMessageTemplate, p1, p2));
@@ -741,6 +777,7 @@ public final class Preconditions {
*
* @since 20.0 (varargs overload since 2.0)
*/
+ @SuppressWarnings("CheckStateWithMessage")
public static void checkState(boolean b, String errorMessageTemplate, long p1, long p2) {
if (!b) {
throw new IllegalStateException(lenientFormat(errorMessageTemplate, p1, p2));
@@ -755,6 +792,7 @@ public final class Preconditions {
*
* @since 20.0 (varargs overload since 2.0)
*/
+ @SuppressWarnings("CheckStateWithMessage")
public static void checkState(
boolean b, String errorMessageTemplate, long p1, @CheckForNull Object p2) {
if (!b) {
@@ -770,6 +808,7 @@ public final class Preconditions {
*
* @since 20.0 (varargs overload since 2.0)
*/
+ @SuppressWarnings("CheckStateWithMessage")
public static void checkState(
boolean b, String errorMessageTemplate, @CheckForNull Object p1, char p2) {
if (!b) {
@@ -785,6 +824,7 @@ public final class Preconditions {
*
* @since 20.0 (varargs overload since 2.0)
*/
+ @SuppressWarnings("CheckStateWithMessage")
public static void checkState(
boolean b, String errorMessageTemplate, @CheckForNull Object p1, int p2) {
if (!b) {
@@ -800,6 +840,7 @@ public final class Preconditions {
*
* @since 20.0 (varargs overload since 2.0)
*/
+ @SuppressWarnings("CheckStateWithMessage")
public static void checkState(
boolean b, String errorMessageTemplate, @CheckForNull Object p1, long p2) {
if (!b) {
@@ -815,6 +856,7 @@ public final class Preconditions {
*
* @since 20.0 (varargs overload since 2.0)
*/
+ @SuppressWarnings("CheckStateWithMessage")
public static void checkState(
boolean b, String errorMessageTemplate, @CheckForNull Object p1, @CheckForNull Object p2) {
if (!b) {
@@ -830,6 +872,7 @@ public final class Preconditions {
*
* @since 20.0 (varargs overload since 2.0)
*/
+ @SuppressWarnings("CheckStateWithMessage")
public static void checkState(
boolean b,
String errorMessageTemplate,
@@ -849,6 +892,7 @@ public final class Preconditions {
*
* @since 20.0 (varargs overload since 2.0)
*/
+ @SuppressWarnings("CheckStateWithMessage")
public static void checkState(
boolean b,
String errorMessageTemplate,
@@ -884,6 +928,7 @@ public final class Preconditions {
* @see Verify#verifyNotNull Verify.verifyNotNull()
*/
@CanIgnoreReturnValue
+ @SuppressWarnings("RequireNonNullStatement")
public static <T> T checkNotNull(@CheckForNull T reference) {
if (reference == null) {
throw new NullPointerException();
@@ -902,6 +947,7 @@ public final class Preconditions {
* @see Verify#verifyNotNull Verify.verifyNotNull()
*/
@CanIgnoreReturnValue
+ @SuppressWarnings("RequireNonNullWithMessageStatement")
public static <T> T checkNotNull(@CheckForNull T reference, @CheckForNull Object errorMessage) {
if (reference == null) {
throw new NullPointerException(String.valueOf(errorMessage));
@@ -925,6 +971,7 @@ public final class Preconditions {
* @see Verify#verifyNotNull Verify.verifyNotNull()
*/
@CanIgnoreReturnValue
+ @SuppressWarnings("RequireNonNullWithMessageStatement")
public static <T> T checkNotNull(
@CheckForNull T reference,
String errorMessageTemplate,
@@ -943,6 +990,7 @@ public final class Preconditions {
* @since 20.0 (varargs overload since 2.0)
*/
@CanIgnoreReturnValue
+ @SuppressWarnings("RequireNonNullWithMessageStatement")
public static <T> T checkNotNull(@CheckForNull T obj, String errorMessageTemplate, char p1) {
if (obj == null) {
throw new NullPointerException(lenientFormat(errorMessageTemplate, p1));
@@ -958,6 +1006,7 @@ public final class Preconditions {
* @since 20.0 (varargs overload since 2.0)
*/
@CanIgnoreReturnValue
+ @SuppressWarnings("RequireNonNullWithMessageStatement")
public static <T> T checkNotNull(@CheckForNull T obj, String errorMessageTemplate, int p1) {
if (obj == null) {
throw new NullPointerException(lenientFormat(errorMessageTemplate, p1));
@@ -973,6 +1022,7 @@ public final class Preconditions {
* @since 20.0 (varargs overload since 2.0)
*/
@CanIgnoreReturnValue
+ @SuppressWarnings("RequireNonNullWithMessageStatement")
public static <T> T checkNotNull(@CheckForNull T obj, String errorMessageTemplate, long p1) {
if (obj == null) {
throw new NullPointerException(lenientFormat(errorMessageTemplate, p1));
@@ -988,6 +1038,7 @@ public final class Preconditions {
* @since 20.0 (varargs overload since 2.0)
*/
@CanIgnoreReturnValue
+ @SuppressWarnings("RequireNonNullWithMessageStatement")
public static <T> T checkNotNull(
@CheckForNull T obj, String errorMessageTemplate, @CheckForNull Object p1) {
if (obj == null) {
@@ -1004,6 +1055,7 @@ public final class Preconditions {
* @since 20.0 (varargs overload since 2.0)
*/
@CanIgnoreReturnValue
+ @SuppressWarnings("RequireNonNullWithMessageStatement")
public static <T> T checkNotNull(
@CheckForNull T obj, String errorMessageTemplate, char p1, char p2) {
if (obj == null) {
@@ -1020,6 +1072,7 @@ public final class Preconditions {
* @since 20.0 (varargs overload since 2.0)
*/
@CanIgnoreReturnValue
+ @SuppressWarnings("RequireNonNullWithMessageStatement")
public static <T> T checkNotNull(
@CheckForNull T obj, String errorMessageTemplate, char p1, int p2) {
if (obj == null) {
@@ -1036,6 +1089,7 @@ public final class Preconditions {
* @since 20.0 (varargs overload since 2.0)
*/
@CanIgnoreReturnValue
+ @SuppressWarnings("RequireNonNullWithMessageStatement")
public static <T> T checkNotNull(
@CheckForNull T obj, String errorMessageTemplate, char p1, long p2) {
if (obj == null) {
@@ -1052,6 +1106,7 @@ public final class Preconditions {
* @since 20.0 (varargs overload since 2.0)
*/
@CanIgnoreReturnValue
+ @SuppressWarnings("RequireNonNullWithMessageStatement")
public static <T> T checkNotNull(
@CheckForNull T obj, String errorMessageTemplate, char p1, @CheckForNull Object p2) {
if (obj == null) {
@@ -1068,6 +1123,7 @@ public final class Preconditions {
* @since 20.0 (varargs overload since 2.0)
*/
@CanIgnoreReturnValue
+ @SuppressWarnings("RequireNonNullWithMessageStatement")
public static <T> T checkNotNull(
@CheckForNull T obj, String errorMessageTemplate, int p1, char p2) {
if (obj == null) {
@@ -1084,6 +1140,7 @@ public final class Preconditions {
* @since 20.0 (varargs overload since 2.0)
*/
@CanIgnoreReturnValue
+ @SuppressWarnings("RequireNonNullWithMessageStatement")
public static <T> T checkNotNull(
@CheckForNull T obj, String errorMessageTemplate, int p1, int p2) {
if (obj == null) {
@@ -1100,6 +1157,7 @@ public final class Preconditions {
* @since 20.0 (varargs overload since 2.0)
*/
@CanIgnoreReturnValue
+ @SuppressWarnings("RequireNonNullWithMessageStatement")
public static <T> T checkNotNull(
@CheckForNull T obj, String errorMessageTemplate, int p1, long p2) {
if (obj == null) {
@@ -1116,6 +1174,7 @@ public final class Preconditions {
* @since 20.0 (varargs overload since 2.0)
*/
@CanIgnoreReturnValue
+ @SuppressWarnings("RequireNonNullWithMessageStatement")
public static <T> T checkNotNull(
@CheckForNull T obj, String errorMessageTemplate, int p1, @CheckForNull Object p2) {
if (obj == null) {
@@ -1132,6 +1191,7 @@ public final class Preconditions {
* @since 20.0 (varargs overload since 2.0)
*/
@CanIgnoreReturnValue
+ @SuppressWarnings("RequireNonNullWithMessageStatement")
public static <T> T checkNotNull(
@CheckForNull T obj, String errorMessageTemplate, long p1, char p2) {
if (obj == null) {
@@ -1148,6 +1208,7 @@ public final class Preconditions {
* @since 20.0 (varargs overload since 2.0)
*/
@CanIgnoreReturnValue
+ @SuppressWarnings("RequireNonNullWithMessageStatement")
public static <T> T checkNotNull(
@CheckForNull T obj, String errorMessageTemplate, long p1, int p2) {
if (obj == null) {
@@ -1164,6 +1225,7 @@ public final class Preconditions {
* @since 20.0 (varargs overload since 2.0)
*/
@CanIgnoreReturnValue
+ @SuppressWarnings("RequireNonNullWithMessageStatement")
public static <T> T checkNotNull(
@CheckForNull T obj, String errorMessageTemplate, long p1, long p2) {
if (obj == null) {
@@ -1180,6 +1242,7 @@ public final class Preconditions {
* @since 20.0 (varargs overload since 2.0)
*/
@CanIgnoreReturnValue
+ @SuppressWarnings("RequireNonNullWithMessageStatement")
public static <T> T checkNotNull(
@CheckForNull T obj, String errorMessageTemplate, long p1, @CheckForNull Object p2) {
if (obj == null) {
@@ -1196,6 +1259,7 @@ public final class Preconditions {
* @since 20.0 (varargs overload since 2.0)
*/
@CanIgnoreReturnValue
+ @SuppressWarnings("RequireNonNullWithMessageStatement")
public static <T> T checkNotNull(
@CheckForNull T obj, String errorMessageTemplate, @CheckForNull Object p1, char p2) {
if (obj == null) {
@@ -1212,6 +1276,7 @@ public final class Preconditions {
* @since 20.0 (varargs overload since 2.0)
*/
@CanIgnoreReturnValue
+ @SuppressWarnings("RequireNonNullWithMessageStatement")
public static <T> T checkNotNull(
@CheckForNull T obj, String errorMessageTemplate, @CheckForNull Object p1, int p2) {
if (obj == null) {
@@ -1228,6 +1293,7 @@ public final class Preconditions {
* @since 20.0 (varargs overload since 2.0)
*/
@CanIgnoreReturnValue
+ @SuppressWarnings("RequireNonNullWithMessageStatement")
public static <T> T checkNotNull(
@CheckForNull T obj, String errorMessageTemplate, @CheckForNull Object p1, long p2) {
if (obj == null) {
@@ -1244,6 +1310,7 @@ public final class Preconditions {
* @since 20.0 (varargs overload since 2.0)
*/
@CanIgnoreReturnValue
+ @SuppressWarnings("RequireNonNullWithMessageStatement")
public static <T> T checkNotNull(
@CheckForNull T obj,
String errorMessageTemplate,
@@ -1263,6 +1330,7 @@ public final class Preconditions {
* @since 20.0 (varargs overload since 2.0)
*/
@CanIgnoreReturnValue
+ @SuppressWarnings("RequireNonNullWithMessageStatement")
public static <T> T checkNotNull(
@CheckForNull T obj,
String errorMessageTemplate,
@@ -1283,6 +1351,7 @@ public final class Preconditions {
* @since 20.0 (varargs overload since 2.0)
*/
@CanIgnoreReturnValue
+ @SuppressWarnings("RequireNonNullWithMessageStatement")
public static <T> T checkNotNull(
@CheckForNull T obj,
String errorMessageTemplate,
@@ -1349,6 +1418,7 @@ public final class Preconditions {
* @throws IllegalArgumentException if {@code size} is negative
*/
@CanIgnoreReturnValue
+ @SuppressWarnings("CheckElementIndexWithMessage")
public static int checkElementIndex(int index, int size, String desc) {
// Carefully optimized for execution by hotspot (explanatory comment above)
if (index < 0 || index >= size) {
@@ -1394,6 +1464,7 @@ public final class Preconditions {
* @throws IllegalArgumentException if {@code size} is negative
*/
@CanIgnoreReturnValue
+ @SuppressWarnings("CheckPositionIndexWithMessage")
public static int checkPositionIndex(int index, int size, String desc) {
// Carefully optimized for execution by hotspot (explanatory comment above)
if (index < 0 || index > size) {
diff --git a/guava/src/com/google/common/base/Strings.java b/guava/src/com/google/common/base/Strings.java
index e56bf1c481..459acbca1a 100644
--- a/guava/src/com/google/common/base/Strings.java
+++ b/guava/src/com/google/common/base/Strings.java
@@ -265,6 +265,7 @@ public final class Strings {
* @since 25.1
*/
// TODO(diamondm) consider using Arrays.toString() for array parameters
+ @SuppressWarnings("IdentityConversion")
public static String lenientFormat(
@CheckForNull String template, @CheckForNull @Nullable Object... args) {
template = String.valueOf(template); // null -> "null"
diff --git a/guava/src/com/google/common/graph/UndirectedNetworkConnections.java b/guava/src/com/google/common/graph/UndirectedNetworkConnections.java
index 190897f882..f11f98867c 100644
--- a/guava/src/com/google/common/graph/UndirectedNetworkConnections.java
+++ b/guava/src/com/google/common/graph/UndirectedNetworkConnections.java
@@ -43,6 +43,7 @@ final class UndirectedNetworkConnections<N, E> extends AbstractUndirectedNetwork
return new UndirectedNetworkConnections<>(HashBiMap.<E, N>create(EXPECTED_DEGREE));
}
+ @SuppressWarnings("IdentityConversion")
static <N, E> UndirectedNetworkConnections<N, E> ofImmutable(Map<E, N> incidentEdges) {
return new UndirectedNetworkConnections<>(ImmutableBiMap.copyOf(incidentEdges));
}
diff --git a/guava/src/com/google/common/graph/DirectedNetworkConnections.java b/guava/src/com/google/common/graph/DirectedNetworkConnections.java
index e1db65708e..9d70c790ee 100644
--- a/guava/src/com/google/common/graph/DirectedNetworkConnections.java
+++ b/guava/src/com/google/common/graph/DirectedNetworkConnections.java
@@ -44,6 +44,7 @@ final class DirectedNetworkConnections<N, E> extends AbstractDirectedNetworkConn
HashBiMap.<E, N>create(EXPECTED_DEGREE), HashBiMap.<E, N>create(EXPECTED_DEGREE), 0);
}
+ @SuppressWarnings("IdentityConversion")
static <N, E> DirectedNetworkConnections<N, E> ofImmutable(
Map<E, N> inEdges, Map<E, N> outEdges, int selfLoopCount) {
return new DirectedNetworkConnections<>(
diff --git a/guava-testlib/src/com/google/common/collect/testing/google/MapGenerators.java b/guava-testlib/src/com/google/common/collect/testing/google/MapGenerators.java
index 35063e815d..3f445ca116 100644
--- a/guava-testlib/src/com/google/common/collect/testing/google/MapGenerators.java
+++ b/guava-testlib/src/com/google/common/collect/testing/google/MapGenerators.java
@@ -60,6 +60,7 @@ public class MapGenerators {
public static class ImmutableMapCopyOfGenerator extends TestStringMapGenerator {
@Override
+ @SuppressWarnings("IdentityConversion")
protected Map<String, String> create(Entry<String, String>[] entries) {
Map<String, String> builder = Maps.newLinkedHashMap();
for (Entry<String, String> entry : entries) {
@@ -71,6 +72,7 @@ public class MapGenerators {
public static class ImmutableMapCopyOfEntriesGenerator extends TestStringMapGenerator {
@Override
+ @SuppressWarnings("IdentityConversion")
protected Map<String, String> create(Entry<String, String>[] entries) {
return ImmutableMap.copyOf(Arrays.asList(entries));
}
@@ -162,6 +164,7 @@ public class MapGenerators {
public static class ImmutableMapCopyOfEnumMapGenerator extends TestEnumMapGenerator {
@Override
+ @SuppressWarnings("IdentityConversion")
protected Map<AnEnum, String> create(Entry<AnEnum, String>[] entries) {
EnumMap<AnEnum, String> map = new EnumMap<>(AnEnum.class);
for (Entry<AnEnum, String> entry : entries) {
diff --git a/guava/src/com/google/common/collect/RegularImmutableSortedSet.java b/guava/src/com/google/common/collect/RegularImmutableSortedSet.java
index 572e0acbf5..fa17e67916 100644
--- a/guava/src/com/google/common/collect/RegularImmutableSortedSet.java
+++ b/guava/src/com/google/common/collect/RegularImmutableSortedSet.java
@@ -324,6 +324,7 @@ final class RegularImmutableSortedSet<E> extends ImmutableSortedSet<E> {
@Override
ImmutableSortedSet<E> createDescendingSet() {
+ @SuppressWarnings("StaticImport")
Comparator<? super E> reversedOrder = Collections.reverseOrder(comparator);
return isEmpty()
? emptySet(reversedOrder)
diff --git a/pom.xml b/pom.xml
index 13dd0985d3..30c1060d1c 100644
--- a/pom.xml
+++ b/pom.xml
@@ -22,6 +22,9 @@
<maven-javadoc-plugin.additionalJOptions></maven-javadoc-plugin.additionalJOptions>
<maven-source-plugin.version>3.2.1</maven-source-plugin.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+ <error-prone.version>v2.19.1-picnic-1</error-prone.version> <java.version>11</java.version>
+ <error-prone-support.version>0.11.2-SNAPSHOT</error-prone-support.version>
+ <maven.compiler.plugin.version>3.11.0</maven.compiler.plugin.version>
</properties>
<issueManagement>
<system>GitHub Issues</system>
@@ -347,50 +350,163 @@
</dependencyManagement>
<profiles>
<profile>
- <id>sonatype-oss-release</id>
- <build>
- <plugins>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-source-plugin</artifactId>
- <version>${maven-source-plugin.version}</version>
- <executions>
- <execution>
- <id>attach-sources</id>
- <goals>
- <goal>jar-no-fork</goal>
- </goals>
- </execution>
- </executions>
- </plugin>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-javadoc-plugin</artifactId>
- <version>${maven-javadoc-plugin.version}</version>
- <executions>
- <execution>
- <id>attach-javadocs</id>
- <goals>
- <goal>jar</goal>
- </goals>
- </execution>
- </executions>
- </plugin>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-gpg-plugin</artifactId>
- <version>1.6</version>
- <executions>
- <execution>
- <id>sign-artifacts</id>
- <phase>verify</phase>
- <goals>
- <goal>sign</goal>
- </goals>
- </execution>
- </executions>
- </plugin>
- </plugins>
+ <id>error-prone-compile</id>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-compiler-plugin</artifactId>
+ <version>${maven.compiler.plugin.version}</version>
+ <executions>
+ <execution>
+ <id>error-prone-compile</id>
+ <phase>compile</phase>
+ <goals>
+ <goal>compile</goal>
+ </goals>
+ <configuration>
+ <failOnError>false</failOnError>
+ <source>1.8</source>
+ <target>1.8</target>
+ <compilerArgs>
+ <arg>-Xpkginfo:always</arg>
+ <arg>-XDcompilePolicy=simple</arg>
+ <arg>
+ -Xplugin:ErrorProne ${error-prone.flags} -Xep:CollectorMutability:OFF -Xep:FluxImplicitBlock:OFF -Xep:ScheduledTransactionTrace:OFF -XepOpt:Refaster:NamePattern=^((?!(Immutable|PrimitiveRules|AssortedRules\$CheckIndex|NullRules\$RequireNonNullElse|MapEntryRules\$MapEntry|OptionalRules\$OptionalOrElseThrow|OptionalRules\$OptionalIsEmpty)).*)
+ </arg>
+ </compilerArgs>
+ <annotationProcessorPaths>
+ <path>
+ <groupId>com.github.PicnicSupermarket.error-prone</groupId>
+ <artifactId>error_prone_core</artifactId>
+ <version>${error-prone.version}</version>
+ </path>
+ <path>
+ <groupId>tech.picnic.error-prone-support</groupId>
+ <artifactId>error-prone-contrib</artifactId>
+ <version>${error-prone-support.version}</version>
+ </path>
+ <path>
+ <groupId>tech.picnic.error-prone-support</groupId>
+ <artifactId>refaster-runner</artifactId>
+ <version>${error-prone-support.version}</version>
+ </path>
+ </annotationProcessorPaths>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+ </profile>
+ <profile>
+ <id>error-prone-test-compile</id>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-compiler-plugin</artifactId>
+ <version>${maven.compiler.plugin.version}</version>
+ <executions>
+ <!-- Skip the default-testCompile execution as we don't want to execute the testCompile goal twice -->
+ <execution>
+ <id>default-testCompile</id>
+ <phase>test-compile</phase>
+ <goals>
+ <goal>testCompile</goal>
+ </goals>
+ <configuration>
+ <skip>true</skip>
+ </configuration>
+ </execution>
+ <execution>
+ <id>error-prone-test-compile</id>
+ <phase>test-compile</phase>
+ <goals>
+ <goal>testCompile</goal>
+ </goals>
+ <configuration>
+ <failOnError>false</failOnError>
+ <source>${java.version}</source>
+ <target>${java.version}</target>
+ <compilerArgs>
+ <arg>-Xpkginfo:always</arg>
+ <arg>-XDcompilePolicy=simple</arg>
+ <arg>
+ -Xplugin:ErrorProne \
+
+ ${error-prone.flags}
+ </arg>
+ </compilerArgs>
+ <annotationProcessorPaths>
+ <path>
+ <groupId>com.github.PicnicSupermarket.error-prone</groupId>
+ <artifactId>error_prone_core</artifactId>
+ <version>${error-prone.version}</version>
+ </path>
+ <path>
+ <groupId>tech.picnic.error-prone-support</groupId>
+ <artifactId>error-prone-contrib</artifactId>
+ <version>${error-prone-support.version}</version>
+ </path>
+ <path>
+ <groupId>tech.picnic.error-prone-support</groupId>
+ <artifactId>refaster-runner</artifactId>
+ <version>${error-prone-support.version}</version>
+ </path>
+ </annotationProcessorPaths>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+ </profile>
+ <profile>
+ <id>sonatype-oss-release</id>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-source-plugin</artifactId>
+ <version>${maven-source-plugin.version}</version>
+ <executions>
+ <execution>
+ <id>attach-sources</id>
+ <goals>
+ <goal>jar-no-fork</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-javadoc-plugin</artifactId>
+ <version>${maven-javadoc-plugin.version}</version>
+ <executions>
+ <execution>
+ <id>attach-javadocs</id>
+ <goals>
+ <goal>jar</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-gpg-plugin</artifactId>
+ <version>1.6</version>
+ <executions>
+ <execution>
+ <id>sign-artifacts</id>
+ <phase>verify</phase>
+ <goals>
+ <goal>sign</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
</build>
</profile>
<profile>

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,8 @@
metrics-core/src/main/java/com/codahale/metrics/CsvReporter.java:[382,36] [FormatStringConcatenation] Defer string concatenation to the invoked method
metrics-graphite/src/main/java/com/codahale/metrics/graphite/GraphiteReporter.java:[431,18] [Slf4jLogStatement] Log statement contains 0 placeholders, but specifies 1 matching argument(s)
metrics-graphite/src/main/java/com/codahale/metrics/graphite/GraphiteReporter.java:[436,20] [Slf4jLogStatement] Log statement contains 0 placeholders, but specifies 1 matching argument(s)
metrics-graphite/src/main/java/com/codahale/metrics/graphite/GraphiteReporter.java:[449,21] [Slf4jLogStatement] Log statement contains 0 placeholders, but specifies 1 matching argument(s)
metrics-healthchecks/src/test/java/com/codahale/metrics/health/HealthCheckTest.java:[189,47] [TimeZoneUsage] Derive the current time from an existing `Clock` Spring bean, and don't rely on a `Clock`'s time zone
metrics-healthchecks/src/test/java/com/codahale/metrics/health/HealthCheckTest.java:[203,47] [TimeZoneUsage] Derive the current time from an existing `Clock` Spring bean, and don't rely on a `Clock`'s time zone
metrics-jakarta-servlets/src/test/java/io/dropwizard/metrics/servlets/HealthCheckServletTest.java:[29,68] [TimeZoneUsage] Derive the current time from an existing `Clock` Spring bean, and don't rely on a `Clock`'s time zone
metrics-servlets/src/test/java/com/codahale/metrics/servlets/HealthCheckServletTest.java:[30,68] [TimeZoneUsage] Derive the current time from an existing `Clock` Spring bean, and don't rely on a `Clock`'s time zone

View File

@@ -0,0 +1,231 @@
diff --git a/pom.xml b/pom.xml
index 6192b52f..b8e38fbc 100644
--- a/pom.xml
+++ b/pom.xml
@@ -66,7 +66,9 @@
<junit.version>4.13.1</junit.version>
<hamcrest.version>1.3</hamcrest.version>
<maven-compiler-plugin.version>3.11.0</maven-compiler-plugin.version>
- <errorprone.version>2.19.1</errorprone.version>
+ <errorprone.version>v2.19.1-picnic-1</errorprone.version>
+ <error-prone-support.version>0.11.2-SNAPSHOT</error-prone-support.version>
+ <error-prone-support.flags>-Xplugin:ErrorProne ${error-prone.flags} -Xep:CollectorMutability:OFF -XepOpt:Refaster:NamePattern=^((?!(Immutable|Preconditions|StringRules\$StringIsNullOrEmpty)).*)</error-prone-support.flags>
<errorprone.javac.version>9+181-r4173-1</errorprone.javac.version>
<sonar.projectKey>dropwizard_metrics</sonar.projectKey>
@@ -137,60 +139,118 @@
<profiles>
<profile>
- <id>jdk8</id>
- <activation>
- <jdk>1.8</jdk>
- </activation>
+ <id>error-prone-compile</id>
<build>
<plugins>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-compiler-plugin</artifactId>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-compiler-plugin</artifactId>
+ <version>${maven-compiler-plugin.version}</version>
+ <executions>
+ <execution>
+ <id>error-prone-compile</id>
+ <phase>compile</phase>
+ <goals>
+ <goal>compile</goal>
+ </goals>
<configuration>
- <compilerArgs combine.children="append">
- <arg>-J-Xbootclasspath/p:${settings.localRepository}/com/google/errorprone/javac/${errorprone.javac.version}/javac-${errorprone.javac.version}.jar</arg>
- </compilerArgs>
+ <failOnError>true</failOnError>
+ <compilerArgs combine.children="append">
+ <arg>-Xpkginfo:always</arg>
+ <arg>-XDcompilePolicy=simple</arg>
+ <arg>${error-prone-support.flags}</arg>
+ <arg>-J--add-exports=jdk.compiler/com.sun.tools.javac.api=ALL-UNNAMED</arg>
+ <arg>-J--add-exports=jdk.compiler/com.sun.tools.javac.file=ALL-UNNAMED</arg>
+ <arg>-J--add-exports=jdk.compiler/com.sun.tools.javac.main=ALL-UNNAMED</arg>
+ <arg>-J--add-exports=jdk.compiler/com.sun.tools.javac.model=ALL-UNNAMED</arg>
+ <arg>-J--add-exports=jdk.compiler/com.sun.tools.javac.parser=ALL-UNNAMED</arg>
+ <arg>-J--add-exports=jdk.compiler/com.sun.tools.javac.processing=ALL-UNNAMED</arg>
+ <arg>-J--add-exports=jdk.compiler/com.sun.tools.javac.tree=ALL-UNNAMED</arg>
+ <arg>-J--add-exports=jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED</arg>
+ <arg>-J--add-opens=jdk.compiler/com.sun.tools.javac.code=ALL-UNNAMED</arg>
+ <arg>-J--add-opens=jdk.compiler/com.sun.tools.javac.comp=ALL-UNNAMED</arg>
+ </compilerArgs>
+ <annotationProcessorPaths combine.children="append">
+ <path>
+ <groupId>com.github.PicnicSupermarket.error-prone</groupId>
+ <artifactId>error_prone_core</artifactId>
+ <version>${errorprone.version}</version>
+ </path>
+ <path>
+ <groupId>tech.picnic.error-prone-support</groupId>
+ <artifactId>error-prone-contrib</artifactId>
+ <version>${error-prone-support.version}</version>
+ </path>
+ <path>
+ <groupId>tech.picnic.error-prone-support</groupId>
+ <artifactId>refaster-runner</artifactId>
+ <version>${error-prone-support.version}</version>
+ </path>
+ </annotationProcessorPaths>
</configuration>
- </plugin>
+ </execution>
+ </executions>
+ </plugin>
</plugins>
- </build>
+ </build>
</profile>
<profile>
- <id>jdk17</id>
- <activation>
- <jdk>[17,)</jdk>
- </activation>
+ <id>error-prone-test-compile</id>
<build>
- <plugins>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-compiler-plugin</artifactId>
- <configuration>
- <compilerArgs>
- <arg>-Xlint:all</arg>
- <arg>-XDcompilePolicy=simple</arg>
- <arg>-Xplugin:ErrorProne -XepExcludedPaths:.*/target/generated-sources/.*</arg>
- <arg>-J--add-exports=jdk.compiler/com.sun.tools.javac.api=ALL-UNNAMED</arg>
- <arg>-J--add-exports=jdk.compiler/com.sun.tools.javac.file=ALL-UNNAMED</arg>
- <arg>-J--add-exports=jdk.compiler/com.sun.tools.javac.main=ALL-UNNAMED</arg>
- <arg>-J--add-exports=jdk.compiler/com.sun.tools.javac.model=ALL-UNNAMED</arg>
- <arg>-J--add-exports=jdk.compiler/com.sun.tools.javac.parser=ALL-UNNAMED</arg>
- <arg>-J--add-exports=jdk.compiler/com.sun.tools.javac.processing=ALL-UNNAMED</arg>
- <arg>-J--add-exports=jdk.compiler/com.sun.tools.javac.tree=ALL-UNNAMED</arg>
- <arg>-J--add-exports=jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED</arg>
- <arg>-J--add-opens=jdk.compiler/com.sun.tools.javac.code=ALL-UNNAMED</arg>
- <arg>-J--add-opens=jdk.compiler/com.sun.tools.javac.comp=ALL-UNNAMED</arg>
- </compilerArgs>
- <annotationProcessorPaths>
- <path>
- <groupId>com.google.errorprone</groupId>
- <artifactId>error_prone_core</artifactId>
- <version>${errorprone.version}</version>
- </path>
- </annotationProcessorPaths>
- </configuration>
- </plugin>
- </plugins>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-compiler-plugin</artifactId>
+ <version>${maven-compiler-plugin.version}</version>
+ <executions>
+ <!-- Skip the default-testCompile execution as we don't want to execute the testCompile goal twice -->
+ <execution>
+ <id>default-testCompile</id>
+ <phase>test-compile</phase>
+ <goals>
+ <goal>testCompile</goal>
+ </goals>
+ <configuration>
+ <skip>true</skip>
+ </configuration>
+ </execution>
+ <execution>
+ <id>error-prone-test-compile</id>
+ <phase>test-compile</phase>
+ <goals>
+ <goal>testCompile</goal>
+ </goals>
+ <configuration>
+ <failOnError>false</failOnError>
+ <source>1.8</source>
+ <target>1.8</target>
+ <compilerArgs combine.children="append">
+ <arg>-Xpkginfo:always</arg>
+ <arg>-XDcompilePolicy=simple</arg>
+ <arg>${error-prone-support.flags}</arg>
+ </compilerArgs>
+ <annotationProcessorPaths>
+ <path>
+ <groupId>com.github.PicnicSupermarket.error-prone</groupId>
+ <artifactId>error_prone_core</artifactId>
+ <version>${errorprone.version}</version>
+ </path>
+ <path>
+ <groupId>tech.picnic.error-prone-support</groupId>
+ <artifactId>error-prone-contrib</artifactId>
+ <version>${error-prone-support.version}</version>
+ </path>
+ <path>
+ <groupId>tech.picnic.error-prone-support</groupId>
+ <artifactId>refaster-runner</artifactId>
+ <version>${error-prone-support.version}</version>
+ </path>
+ </annotationProcessorPaths>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
</build>
</profile>
<profile>
@@ -315,23 +375,13 @@
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
- <source>1.8</source>
- <target>1.8</target>
- <fork>true</fork>
+ <fork>false</fork>
<parameters>true</parameters>
<showWarnings>true</showWarnings>
<compilerArgs>
<arg>-Xlint:all</arg>
<arg>-XDcompilePolicy=simple</arg>
- <arg>-Xplugin:ErrorProne -XepExcludedPaths:.*/target/generated-sources/.*</arg>
</compilerArgs>
- <annotationProcessorPaths>
- <path>
- <groupId>com.google.errorprone</groupId>
- <artifactId>error_prone_core</artifactId>
- <version>${errorprone.version}</version>
- </path>
- </annotationProcessorPaths>
</configuration>
</plugin>
<plugin>
diff --git a/metrics-jakarta-servlets/src/main/java/io/dropwizard/metrics/servlets/MetricsServlet.java b/metrics-jakarta-servlets/src/main/java/io/dropwizard/metrics/servlets/MetricsServlet.java
index a248dd81..64d00eb1 100644
--- a/metrics-jakarta-servlets/src/main/java/io/dropwizard/metrics/servlets/MetricsServlet.java
+++ b/metrics-jakarta-servlets/src/main/java/io/dropwizard/metrics/servlets/MetricsServlet.java
@@ -188,6 +188,7 @@ public class MetricsServlet extends HttpServlet {
return mapper.writer();
}
+ @SuppressWarnings("IdentityConversion")
protected TimeUnit parseTimeUnit(String value, TimeUnit defaultValue) {
try {
return TimeUnit.valueOf(String.valueOf(value).toUpperCase(Locale.US));
diff --git a/metrics-servlets/src/main/java/com/codahale/metrics/servlets/MetricsServlet.java b/metrics-servlets/src/main/java/com/codahale/metrics/servlets/MetricsServlet.java
index 0bd1297d..22fc1c54 100644
--- a/metrics-servlets/src/main/java/com/codahale/metrics/servlets/MetricsServlet.java
+++ b/metrics-servlets/src/main/java/com/codahale/metrics/servlets/MetricsServlet.java
@@ -189,6 +189,7 @@ public class MetricsServlet extends HttpServlet {
return mapper.writer();
}
+ @SuppressWarnings("IdentityConversion")
protected TimeUnit parseTimeUnit(String value, TimeUnit defaultValue) {
try {
return TimeUnit.valueOf(String.valueOf(value).toUpperCase(Locale.US));

104
integration-tests/run-gradle.sh Executable file
View File

@@ -0,0 +1,104 @@
#!/usr/bin/env bash
set -e -u -o pipefail
project=calcite
revision=calcite-1.35.0
if [ "${#}" -gt 1 ] || [[ ${1:---sync} != '--sync' ]]; then
echo "Usage: ${0} [--sync]"
exit 1
fi
do_sync="${1:-}"
error_prone_support_version="$(
mvn -f .. help:evaluate -Dexpression=project.version -q -DforceStdout
)"
error_prone_shared_flags='-XepExcludedPaths:(\Q${project.basedir}${file.separator}src${file.separator}\E(it|test)\Q${file.separator}resources\E|\Q${project.build.directory}${file.separator}\E).*'
error_prone_patch_flags="${error_prone_shared_flags} -XepPatchLocation:IN_PLACE -XepPatchChecks:$(
find .. -path "*/META-INF/services/com.google.errorprone.bugpatterns.BugChecker" \
| xargs grep -hoP '[^.]+$' \
| paste -s -d ','
)"
error_prone_validation_flags="${error_prone_shared_flags} -XepDisableAllChecks $(
find .. -path "*/META-INF/services/com.google.errorprone.bugpatterns.BugChecker" \
| xargs grep -hoP '[^.]+$' \
| sed -r 's,(.*),-Xep:\1:WARN,' \
| paste -s -d ' '
)"
validation_log_file="$(mktemp)"
trap 'rm -rf -- "${validation_log_file}"' INT TERM HUP EXIT
echo "Error Prone Support version: ${error_prone_support_version}"
echo "Error Prone patch flags: ${error_prone_patch_flags}"
echo "Error Prone validation flags: ${error_prone_validation_flags}"
pushd "${project}"
git checkout -f "${revision}"
git apply < "../${project}-${revision}-init.patch"
git commit -m 'dependency: Introduce Error Prone Support' .
# XXX: autostyleApply is only available in calcite, need to find better approach
./gradlew clean autostyleApply --no-build-cache
git commit -m 'minor: Reformat using Google Java Format' .
function apply_patch() {
local current_diff="${1}"
./gradlew clean autostyleApply compileJava -PenableErrorprone \
-Derror-prone.flags="${error_prone_patch_flags}" \
-Derror-prone-support.version="${error_prone_support_version}" \
--no-build-cache
local new_diff="$(git diff | shasum --algorithm 256)"
if [ "${current_diff}" != "${new_diff}" ]; then
apply_patch "${new_diff}"
fi
}
echo "Running patches..."
apply_patch "$(git diff | shasum --algorithm 256)"
baseline_patch="../${project}-${revision}-expected-changes.patch"
if [ -n "${do_sync}" ]; then
echo 'Saving changes...'
git diff > "${baseline_patch}"
else
echo 'Inspecting changes...'
if ! diff -u "${baseline_patch}" <(git diff); then
echo 'There are unexpected changes.'
exit 1
fi
fi
# Validate the results.
#
# - The `metadataFilesGenerationAllFiles` test is skipped because is makes line
# number assertions that will fail when the code is formatted or patched.
# - The `allCheckSectionJavaDocs` test is skipped because is validates that
# Javadoc has certain closing tags that are removed by Google Java Format.
# XXX: Figure out why the `validateCliDocSections` test fails.
./gradlew clean autostyleApply compileJava -PenableErrorprone \
-Derror-prone.flags="${error_prone_patch_flags}" \
-Derror-prone-support.version="${error_prone_support_version}" \
--no-build-cache \
| tee "${validation_log_file}"
baseline_warnings="../${project}-${revision}-expected-warnings.txt"
generated_warnngs="$(grep -oP "(?<=^\\Q[WARNING] ${PWD}/\\E).*" "${validation_log_file}" | grep -P '\]*\[')"
if [ -n "${do_sync}" ]; then
echo 'Saving emitted warnings...'
echo "${generated_warnngs}" > "${baseline_warnings}"
else
echo 'Inspecting emitted warnings...'
if ! diff -u "${baseline_warnings}" <(echo "${generated_warnngs}"); then
echo 'Diagnostics output changed.'
exit 1
fi
fi

109
integration-tests/run.sh Executable file
View File

@@ -0,0 +1,109 @@
#!/usr/bin/env bash
set -e -u -o pipefail
project=checkstyle
revision=checkstyle-10.9.3
if [ "${#}" -gt 1 ] || [[ ${1:---sync} != '--sync' ]]; then
echo "Usage: ${0} [--sync]"
exit 1
fi
do_sync="${1:-}"
error_prone_support_version="$(
mvn -f .. help:evaluate -Dexpression=project.version -q -DforceStdout
)"
error_prone_shared_flags='-XepExcludedPaths:(\Q${project.basedir}${file.separator}src${file.separator}\E(it|test)\Q${file.separator}resources\E|\Q${project.build.directory}${file.separator}\E).*'
error_prone_patch_flags="${error_prone_shared_flags} -XepPatchLocation:IN_PLACE -XepPatchChecks:$(
find .. -path "*/META-INF/services/com.google.errorprone.bugpatterns.BugChecker" \
| xargs grep -hoP '[^.]+$' \
| paste -s -d ','
)"
error_prone_validation_flags="${error_prone_shared_flags} -XepDisableAllChecks $(
find .. -path "*/META-INF/services/com.google.errorprone.bugpatterns.BugChecker" \
| xargs grep -hoP '[^.]+$' \
| sed -r 's,(.*),-Xep:\1:WARN,' \
| paste -s -d ' '
)"
validation_log_file="$(mktemp)"
trap 'rm -rf -- "${validation_log_file}"' INT TERM HUP EXIT
echo "Error Prone Support version: ${error_prone_support_version}"
echo "Error Prone patch flags: ${error_prone_patch_flags}"
echo "Error Prone validation flags: ${error_prone_validation_flags}"
pushd "${project}"
git checkout -f "${revision}"
git apply < "../${project}-${revision}-init.patch"
git commit -m 'dependency: Introduce Error Prone Support' .
mvn com.spotify.fmt:fmt-maven-plugin:2.19:format \
-DadditionalSourceDirectories='${project.basedir}${file.separator}src${file.separator}it${file.separator}java'
git commit -m 'minor: Reformat using Google Java Format' .
function apply_patch() {
local current_diff="${1}"
mvn clean package com.spotify.fmt:fmt-maven-plugin:2.19:format \
-DadditionalSourceDirectories='${project.basedir}${file.separator}src${file.separator}it${file.separator}java' \
-Perror-prone-compile,error-prone-test-compile \
-Derror-prone.flags="${error_prone_patch_flags}" \
-Derror-prone-support.version="${error_prone_support_version}" \
-DskipTests
local new_diff="$(git diff | shasum --algorithm 256)"
if [ "${current_diff}" != "${new_diff}" ]; then
apply_patch "${new_diff}"
fi
}
apply_patch "$(git diff | shasum --algorithm 256)"
baseline_patch="../${project}-${revision}-expected-changes.patch"
if [ -n "${do_sync}" ]; then
echo 'Saving changes...'
git diff > "${baseline_patch}"
else
echo 'Inspecting changes...'
if ! diff -u "${baseline_patch}" <(git diff); then
echo 'There are unexpected changes.'
exit 1
fi
fi
# Validate the results.
#
# - The `metadataFilesGenerationAllFiles` test is skipped because is makes line
# number assertions that will fail when the code is formatted or patched.
# - The `allCheckSectionJavaDocs` test is skipped because is validates that
# Javadoc has certain closing tags that are removed by Google Java Format.
# XXX: Figure out why the `validateCliDocSections` test fails.
echo "Validation file: ${validation_log_file}"
mvn clean package \
-Perror-prone-compile,error-prone-test-compile \
-Derror-prone.flags="${error_prone_validation_flags}" \
-Derror-prone-support.version="${error_prone_support_version}" \
-Dmaven.compiler.showWarnings \
| tee "${validation_log_file}"
echo "Finished validation run!"
baseline_warnings="../${project}-${revision}-expected-warnings.txt"
# note: added '*' in the final grep, required in order to get matches in GNU grep 3.11
generated_warnings="$(grep -oP "(?<=^\\Q[WARNING] ${PWD}/\\E).*" "${validation_log_file}" | grep -P '\]*\[')"
if [ -n "${do_sync}" ]; then
echo 'Saving emitted warnings...'
echo "${generated_warnings}" > "${baseline_warnings}"
else
echo 'Inspecting emitted warnings...'
if ! diff -u "${baseline_warnings}" <(echo "${generated_warnings}"); then
echo 'Diagnostics output changed.'
exit 1
fi
fi