diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 4557925e43..c0df8dc368 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -13,7 +13,7 @@ concurrency: cancel-in-progress: true jobs: sanity-check: - name: SanityCheck + name: Sanity Check 🦢️ runs-on: ubuntu-latest env: buildcacheuser: ${{ secrets.BUILDCACHE_USER }} @@ -27,13 +27,13 @@ jobs: with: distribution: "temurin" java-version: 21 - - name: gradle caching + - name: Gradle setup 🐘 uses: gradle/actions/setup-gradle@v5 - - name: spotlessCheck + - name: Spotless ✨ run: ./gradlew spotlessCheck - - name: rewriteDryRun + - name: Rewrite 🦉 run: ./gradlew rewriteDryRun - - name: assemble testClasses + - name: Assemble Test Classes 📦 run: ./gradlew assemble testClasses build: needs: sanity-check diff --git a/gradle/rewrite.gradle b/gradle/rewrite.gradle index 62f5170c46..ec3601e9e3 100644 --- a/gradle/rewrite.gradle +++ b/gradle/rewrite.gradle @@ -1,6 +1,7 @@ apply plugin: 'org.openrewrite.rewrite' rewrite { activeRecipe('com.diffplug.spotless.openrewrite.SanityCheck') + configFile = project.getRootProject().file("${rootDir}/gradle/rewrite.yml") exclusions.addAll( '**.dirty.java', '**FormatterProperties.java', @@ -21,9 +22,9 @@ rewrite { failOnDryRunResults = true } dependencies { - rewrite('org.openrewrite.recipe:rewrite-migrate-java:3.22.0') - rewrite('org.openrewrite.recipe:rewrite-java-security:3.22.0') - rewrite('org.openrewrite.recipe:rewrite-rewrite:0.16.0') - rewrite('org.openrewrite.recipe:rewrite-static-analysis:2.22.0') - rewrite('org.openrewrite.recipe:rewrite-third-party:0.31.2') + rewrite('org.openrewrite.recipe:rewrite-migrate-java:3.24.0') + rewrite('org.openrewrite.recipe:rewrite-java-security:3.24.0') + rewrite('org.openrewrite.recipe:rewrite-rewrite:0.17.0') + rewrite('org.openrewrite.recipe:rewrite-static-analysis:2.24.0') + rewrite('org.openrewrite.recipe:rewrite-third-party:0.32.1') } diff --git a/rewrite.yml b/gradle/rewrite.yml similarity index 91% rename from rewrite.yml rename to gradle/rewrite.yml index 00f05a6fa4..d318e9bce3 100644 --- a/rewrite.yml +++ b/gradle/rewrite.yml @@ -3,11 +3,6 @@ type: specs.openrewrite.org/v1beta/recipe name: com.diffplug.spotless.openrewrite.SanityCheck displayName: Apply all Java & Gradle best practices description: Comprehensive code quality recipe combining modernization, security, and best practices. -tags: - - java - - gradle - - static-analysis - - cleanup recipeList: - org.openrewrite.gradle.EnableGradleBuildCache - org.openrewrite.gradle.EnableGradleParallelExecution @@ -39,7 +34,6 @@ recipeList: - org.openrewrite.staticanalysis.RemoveUnusedLocalVariables - org.openrewrite.staticanalysis.RemoveUnusedPrivateFields - org.openrewrite.staticanalysis.RemoveUnusedPrivateMethods - - org.openrewrite.staticanalysis.ReplaceApacheCommonsLang3ValidateNotNullWithObjectsRequireNonNull - org.openrewrite.staticanalysis.SimplifyTernaryRecipes - org.openrewrite.staticanalysis.URLEqualsHashCodeRecipes - org.openrewrite.staticanalysis.UnnecessaryCloseInTryWithResources @@ -64,5 +58,4 @@ recipeList: - tech.picnic.errorprone.refasterrules.StreamRulesRecipes - tech.picnic.errorprone.refasterrules.StringRulesRecipes - tech.picnic.errorprone.refasterrules.TimeRulesRecipes - # - org.openrewrite.java.migrate.lang.FindVirtualThreadOpportunities # don't want to use: https://github.com/diffplug/spotless/pull/2684#discussion_r2433831887 --- diff --git a/lib-extra/src/main/java/com/diffplug/spotless/extra/integration/DiffMessageFormatter.java b/lib-extra/src/main/java/com/diffplug/spotless/extra/integration/DiffMessageFormatter.java index fb9d176eac..263f73a5bb 100644 --- a/lib-extra/src/main/java/com/diffplug/spotless/extra/integration/DiffMessageFormatter.java +++ b/lib-extra/src/main/java/com/diffplug/spotless/extra/integration/DiffMessageFormatter.java @@ -201,7 +201,7 @@ private void addFile(String arg) { // ... (more lines that didn't fit) List lines = NEWLINE_SPLITTER.splitToList(arg); if (!lines.isEmpty()) { - addIntendedLine(NORMAL_INDENT, lines.get(0)); + addIntendedLine(NORMAL_INDENT, lines.getFirst()); } for (int i = 1; i < Math.min(MIN_LINES_PER_FILE, lines.size()); i++) { addIntendedLine(DIFF_INDENT, lines.get(i)); diff --git a/lib/src/main/java/com/diffplug/spotless/FileSignature.java b/lib/src/main/java/com/diffplug/spotless/FileSignature.java index 92acbcb356..ed0cc7506c 100644 --- a/lib/src/main/java/com/diffplug/spotless/FileSignature.java +++ b/lib/src/main/java/com/diffplug/spotless/FileSignature.java @@ -140,7 +140,7 @@ public Collection files() { /** Returns the only file in this signature, throwing an exception if there are more or less than 1 file. */ public File getOnlyFile() { if (files.size() == 1) { - return files.iterator().next(); + return files.getFirst(); } else { throw new IllegalArgumentException("Expected one file, but was " + files.size()); } diff --git a/lib/src/main/java/com/diffplug/spotless/PaddedCell.java b/lib/src/main/java/com/diffplug/spotless/PaddedCell.java index f6973a6daa..cb69bc4841 100644 --- a/lib/src/main/java/com/diffplug/spotless/PaddedCell.java +++ b/lib/src/main/java/com/diffplug/spotless/PaddedCell.java @@ -152,7 +152,7 @@ public boolean isResolvable() { public String canonical() { // @formatter:off switch (type) { - case CONVERGE: return steps.get(steps.size() - 1); + case CONVERGE: return steps.getLast(); case CYCLE: return Collections.min(steps, Comparator.comparingInt(String::length).thenComparing(Function.identity())); case DIVERGE: throw new IllegalArgumentException("No canonical form for a diverging result"); default: throw new IllegalArgumentException("Unknown type: " + type); diff --git a/lib/src/main/java/com/diffplug/spotless/java/ImportSorterImpl.java b/lib/src/main/java/com/diffplug/spotless/java/ImportSorterImpl.java index e9e28c2576..dd80c9e59f 100644 --- a/lib/src/main/java/com/diffplug/spotless/java/ImportSorterImpl.java +++ b/lib/src/main/java/com/diffplug/spotless/java/ImportSorterImpl.java @@ -203,8 +203,8 @@ private List mergeMatchingItems() { } } // if there is \n on the end, remove it - if (!template.isEmpty() && ImportSorter.N.equals(template.get(template.size() - 1))) { - template.remove(template.size() - 1); + if (!template.isEmpty() && ImportSorter.N.equals(template.getLast())) { + template.removeLast(); } return template; } diff --git a/lib/src/main/java/com/diffplug/spotless/npm/TimedLogger.java b/lib/src/main/java/com/diffplug/spotless/npm/TimedLogger.java index eaf51320c4..d4e366471c 100644 --- a/lib/src/main/java/com/diffplug/spotless/npm/TimedLogger.java +++ b/lib/src/main/java/com/diffplug/spotless/npm/TimedLogger.java @@ -111,7 +111,7 @@ public final void close() { } private Object[] paramsForEnd() { - if (params.isEmpty() || !(params.get(params.size() - 1) instanceof Throwable)) { + if (params.isEmpty() || !(params.getLast() instanceof Throwable)) { // if the last element is not a throwable, we can add the duration as the last element return Stream.concat(params.stream(), Stream.of(lazy(this::durationString))).toArray(); } @@ -119,7 +119,7 @@ private Object[] paramsForEnd() { return Stream.concat( params.stream().limit(params.size() - 1), Stream.of(lazy(this::durationString), - params.get(params.size() - 1))) + params.getLast())) .toArray(); } diff --git a/lib/src/main/java/com/diffplug/spotless/rdf/ReflectionHelper.java b/lib/src/main/java/com/diffplug/spotless/rdf/ReflectionHelper.java index 061062434f..61db1306b7 100644 --- a/lib/src/main/java/com/diffplug/spotless/rdf/ReflectionHelper.java +++ b/lib/src/main/java/com/diffplug/spotless/rdf/ReflectionHelper.java @@ -317,7 +317,7 @@ private void callBuilderMethod(Object builder, Method method, String parameterVa "Found more than 1 enum value for name %s, that should never happen".formatted( parameterValueAsString)); } - method.invoke(builder, selectedEnumValueList.get(0)); + method.invoke(builder, selectedEnumValueList.getFirst()); } else if (param.equals(NumberFormat.class)) { method.invoke(builder, new DecimalFormat(parameterValueAsString, DecimalFormatSymbols.getInstance(Locale.US))); } else if (param.equals(Boolean.class) || param.equals(Boolean.TYPE)) { @@ -455,7 +455,7 @@ private Method getBuilderMethod(String optionName) { "More than one builder method found for configuration parameter name: %s".formatted( optionName)); } - Method method = methods.get(0); + Method method = methods.getFirst(); if (method.getParameterCount() != 1) { throw new RuntimeException( "Method with unexpected parameter count %s found for configuration parameter name: %s".formatted( diff --git a/lib/src/main/java/com/diffplug/spotless/sql/dbeaver/SQLTokenizedFormatter.java b/lib/src/main/java/com/diffplug/spotless/sql/dbeaver/SQLTokenizedFormatter.java index 52665bf716..db60ce6c8d 100644 --- a/lib/src/main/java/com/diffplug/spotless/sql/dbeaver/SQLTokenizedFormatter.java +++ b/lib/src/main/java/com/diffplug/spotless/sql/dbeaver/SQLTokenizedFormatter.java @@ -78,17 +78,17 @@ private List format(final List argList) { return argList; } - FormatterToken token = argList.get(0); + FormatterToken token = argList.getFirst(); if (token.getType() == TokenType.SPACE) { - argList.remove(0); + argList.removeFirst(); if (argList.isEmpty()) { return argList; } } - token = argList.get(argList.size() - 1); + token = argList.getLast(); if (token.getType() == TokenType.SPACE) { - argList.remove(argList.size() - 1); + argList.removeLast(); if (argList.isEmpty()) { return argList; } @@ -161,9 +161,9 @@ private List format(final List argList) { indent++; index += insertReturnAndIndent(argList, index + 1, indent); } else if (")".equals(tokenString) && !bracketIndent.isEmpty() && !functionBracket.isEmpty()) { - indent = bracketIndent.remove(bracketIndent.size() - 1); + indent = bracketIndent.removeLast(); index += insertReturnAndIndent(argList, index, indent); - functionBracket.remove(functionBracket.size() - 1); + functionBracket.removeLast(); } else if (",".equals(tokenString)) { index += insertReturnAndIndent(argList, index + 1, indent); } else if (statementDelimiters.contains(tokenString)) { diff --git a/plugin-maven/src/main/java/com/diffplug/spotless/maven/SpotlessCheckMojo.java b/plugin-maven/src/main/java/com/diffplug/spotless/maven/SpotlessCheckMojo.java index 910a004dfe..df996b68dc 100644 --- a/plugin-maven/src/main/java/com/diffplug/spotless/maven/SpotlessCheckMojo.java +++ b/plugin-maven/src/main/java/com/diffplug/spotless/maven/SpotlessCheckMojo.java @@ -120,7 +120,7 @@ protected void process(String name, Iterable files, Formatter formatter, U .getMessage()); } else if (!lintProblems.isEmpty()) { // Show lints only if there are no formatting violations - Map.Entry firstLintProblem = lintProblems.get(0); + Map.Entry firstLintProblem = lintProblems.getFirst(); File file = firstLintProblem.getKey(); LintState lintState = firstLintProblem.getValue(); String stepName = lintState.getLintsByStep(formatter).keySet().iterator().next();