diff --git a/build.gradle b/build.gradle
index 9e4f07c75a..9baa47df27 100644
--- a/build.gradle
+++ b/build.gradle
@@ -12,6 +12,7 @@ repositories {
apply from: rootProject.file('gradle/java-publish.gradle')
apply from: rootProject.file('gradle/changelog.gradle')
allprojects {
+ apply from: rootProject.file('gradle/error-prone.gradle')
apply from: rootProject.file('gradle/rewrite.gradle')
apply from: rootProject.file('gradle/spotless.gradle')
}
diff --git a/gradle/error-prone.gradle b/gradle/error-prone.gradle
new file mode 100644
index 0000000000..af47645f85
--- /dev/null
+++ b/gradle/error-prone.gradle
@@ -0,0 +1,30 @@
+import static java.lang.System.getenv
+
+apply plugin: 'net.ltgt.errorprone'
+
+dependencies {
+ errorprone('com.google.errorprone:error_prone_core:2.42.0')
+ errorprone('tech.picnic.error-prone-support:error-prone-contrib:0.25.0')
+ constraints {
+ errorprone('com.google.guava:guava') {
+ version {
+ require('33.4.8-jre')
+ }
+ because('Older versions use deprecated methods in sun.misc.Unsafe')
+ // https://github.com/junit-team/junit-framework/pull/5039#discussion_r2414490581
+ }
+ }
+}
+
+tasks.withType(JavaCompile).configureEach {
+ options.errorprone {
+ disableAllChecks = true // consider removal to avoid error prone error“s, following convention over configuration.
+ error('RedundantStringConversion')
+ if (!getenv().containsKey('CI') && getenv('IN_PLACE')?.toBoolean()) {
+ errorproneArgs.addAll(
+ '-XepPatchLocation:IN_PLACE',
+ '-XepPatchChecks:RedundantStringConversion'
+ )
+ }
+ }
+}
diff --git a/lib/src/main/java/com/diffplug/spotless/ForeignExe.java b/lib/src/main/java/com/diffplug/spotless/ForeignExe.java
index d205e14039..8697ca68c3 100644
--- a/lib/src/main/java/com/diffplug/spotless/ForeignExe.java
+++ b/lib/src/main/java/com/diffplug/spotless/ForeignExe.java
@@ -134,7 +134,7 @@ private RuntimeException exceptionFmt(String msgPrimary, ProcessRunner.Result cm
errorMsg.append(msgFix);
errorMsg.append('\n');
}
- errorMsg.append(cmd.toString());
+ errorMsg.append(cmd);
return new RuntimeException(errorMsg.toString());
}
}
diff --git a/lib/src/main/java/com/diffplug/spotless/biome/BiomeExecutableDownloader.java b/lib/src/main/java/com/diffplug/spotless/biome/BiomeExecutableDownloader.java
index 8a9c6923c0..ae090d3e4a 100644
--- a/lib/src/main/java/com/diffplug/spotless/biome/BiomeExecutableDownloader.java
+++ b/lib/src/main/java/com/diffplug/spotless/biome/BiomeExecutableDownloader.java
@@ -261,7 +261,7 @@ private Path getChecksumPath(Path file) {
var parent = file.getParent();
var base = parent != null ? parent : file;
var fileName = file.getFileName();
- var checksumName = fileName != null ? fileName.toString() + ".sha256" : "checksum.sha256";
+ var checksumName = fileName != null ? fileName + ".sha256" : "checksum.sha256";
return base.resolve(checksumName);
}
diff --git a/lib/src/main/java/com/diffplug/spotless/sql/dbeaver/SQLTokensParser.java b/lib/src/main/java/com/diffplug/spotless/sql/dbeaver/SQLTokensParser.java
index f80b084c91..de692a5e4e 100644
--- a/lib/src/main/java/com/diffplug/spotless/sql/dbeaver/SQLTokensParser.java
+++ b/lib/src/main/java/com/diffplug/spotless/sql/dbeaver/SQLTokensParser.java
@@ -186,7 +186,7 @@ else if (contains(singleLineCommentStart, fChar)) {
s.append(fChar);
}
}
- return new FormatterToken(TokenType.COMMAND, word + s.toString(), start_pos);
+ return new FormatterToken(TokenType.COMMAND, word + s, start_pos);
}
if (sqlDialect.getKeywordType(word) != null) {
return new FormatterToken(TokenType.KEYWORD, word, start_pos);
diff --git a/plugin-maven/src/test/java/com/diffplug/spotless/maven/java/LintSuppressionTest.java b/plugin-maven/src/test/java/com/diffplug/spotless/maven/java/LintSuppressionTest.java
index 3f97b63f5d..e1975de5da 100644
--- a/plugin-maven/src/test/java/com/diffplug/spotless/maven/java/LintSuppressionTest.java
+++ b/plugin-maven/src/test/java/com/diffplug/spotless/maven/java/LintSuppressionTest.java
@@ -161,8 +161,8 @@ private void writePomWithLintSuppressions(String... stepsAndSuppressions) throws
}
// Create the configuration
- String javaGroup = "" + javaSteps.toString() + "";
- String fullConfiguration = javaGroup + globalConfig.toString();
+ String javaGroup = "" + javaSteps + "";
+ String fullConfiguration = javaGroup + globalConfig;
writePom(fullConfiguration);
}
diff --git a/settings.gradle b/settings.gradle
index d4d047af6a..6bda8e28dc 100644
--- a/settings.gradle
+++ b/settings.gradle
@@ -24,6 +24,7 @@ plugins {
// https://github.com/equodev/equo-ide/blob/main/plugin-gradle/CHANGELOG.md
id 'dev.equo.ide' version '1.7.8' apply false
id 'org.openrewrite.rewrite' version '7.18.0' apply false
+ id 'net.ltgt.errorprone' version '4.3.0' apply false
}
dependencyResolutionManagement {
diff --git a/testlib/src/main/java/com/diffplug/spotless/ReflectionUtil.java b/testlib/src/main/java/com/diffplug/spotless/ReflectionUtil.java
index 4d0a340f42..1590b08311 100644
--- a/testlib/src/main/java/com/diffplug/spotless/ReflectionUtil.java
+++ b/testlib/src/main/java/com/diffplug/spotless/ReflectionUtil.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2016 DiffPlug
+ * Copyright 2016-2025 DiffPlug
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -37,7 +37,7 @@ public static void dumpAllInfo(String name, Object obj) {
public static void dumpMethod(Method method) {
System.out.print(Modifier.toString(method.getModifiers()));
- System.out.print(" " + method.getReturnType().toString());
+ System.out.print(" " + method.getReturnType());
System.out.print(" " + method.getName() + "(");
Iterator paramIter = Arrays.asList(method.getParameters()).iterator();
while (paramIter.hasNext()) {