From b4b431711c176be26c7f6dca692d98f07dfec6a4 Mon Sep 17 00:00:00 2001 From: Vincent Potucek Date: Sat, 18 Oct 2025 14:33:02 +0200 Subject: [PATCH 1/2] [2667] Add `normalizeTargetExclude` to handle directory --- .../gradle/spotless/FormatExtension.java | 31 ++++++++++++++----- 1 file changed, 24 insertions(+), 7 deletions(-) diff --git a/plugin-gradle/src/main/java/com/diffplug/gradle/spotless/FormatExtension.java b/plugin-gradle/src/main/java/com/diffplug/gradle/spotless/FormatExtension.java index 777223c5f7..08f855fbea 100644 --- a/plugin-gradle/src/main/java/com/diffplug/gradle/spotless/FormatExtension.java +++ b/plugin-gradle/src/main/java/com/diffplug/gradle/spotless/FormatExtension.java @@ -30,9 +30,11 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; +import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Random; +import java.util.Set; import java.util.TreeMap; import java.util.function.Consumer; import java.util.function.Function; @@ -45,7 +47,6 @@ import org.gradle.api.GradleException; import org.gradle.api.Project; import org.gradle.api.file.ConfigurableFileTree; -import org.gradle.api.file.Directory; import org.gradle.api.file.FileCollection; import org.gradle.api.plugins.BasePlugin; import org.gradle.api.tasks.TaskProvider; @@ -1075,7 +1076,26 @@ public void toggleOffOnDisable() { protected void setupTask(SpotlessTask task) { task.setEncoding(getEncoding().name()); task.setLintSuppressions(lintSuppressions); - FileCollection totalTarget = targetExclude == null ? target : target.minus(targetExclude); + setupTask(task, normalizeTargetExclude()); + } + + private FileCollection normalizeTargetExclude() { + if (targetExclude != null) { + Set expandedExcludeFiles = new HashSet<>(); + for (File file : targetExclude.getFiles()) { + if (file.isDirectory()) { + expandedExcludeFiles.addAll(getProject().fileTree(file).getFiles()); // include all files within it recursively. + } else { + expandedExcludeFiles.add(file); + } + } + return target.minus(getProject().files(expandedExcludeFiles)); + } else { + return target; + } + } + + private void setupTask(final SpotlessTask task, final FileCollection totalTarget) { task.setTarget(totalTarget); List steps; if (toggleFence != null) { @@ -1087,13 +1107,10 @@ protected void setupTask(SpotlessTask task) { } if (targetExcludeContentPattern != null) { steps.replaceAll( - formatterStep -> formatterStep.filterByContent(OnMatch.EXCLUDE, targetExcludeContentPattern)); + formatterStep -> formatterStep.filterByContent(OnMatch.EXCLUDE, targetExcludeContentPattern)); } task.setSteps(steps); - Directory projectDir = getProject().getLayout().getProjectDirectory(); - LineEnding lineEndings = getLineEndings(); - task.setLineEndingsPolicy( - getProject().provider(() -> lineEndings.createPolicy(projectDir.getAsFile(), () -> totalTarget))); + task.setLineEndingsPolicy(getProject().provider(() -> getLineEndings().createPolicy(getProject().getLayout().getProjectDirectory().getAsFile(), () -> totalTarget))); spotless.getRegisterDependenciesTask().hookSubprojectTask(task); task.setupRatchet(getRatchetFrom() != null ? getRatchetFrom() : ""); } From 49596128d248aa76a130e56e6e8c9d11d9dafbc3 Mon Sep 17 00:00:00 2001 From: Vincent Potucek Date: Sat, 18 Oct 2025 14:34:19 +0200 Subject: [PATCH 2/2] [2667] Add `normalizeTargetExclusion` to handle directory --- .../java/com/diffplug/gradle/spotless/FormatExtension.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/plugin-gradle/src/main/java/com/diffplug/gradle/spotless/FormatExtension.java b/plugin-gradle/src/main/java/com/diffplug/gradle/spotless/FormatExtension.java index 08f855fbea..7485263109 100644 --- a/plugin-gradle/src/main/java/com/diffplug/gradle/spotless/FormatExtension.java +++ b/plugin-gradle/src/main/java/com/diffplug/gradle/spotless/FormatExtension.java @@ -1076,10 +1076,10 @@ public void toggleOffOnDisable() { protected void setupTask(SpotlessTask task) { task.setEncoding(getEncoding().name()); task.setLintSuppressions(lintSuppressions); - setupTask(task, normalizeTargetExclude()); + setupTask(task, normalizeTargetExclusion()); } - private FileCollection normalizeTargetExclude() { + private FileCollection normalizeTargetExclusion() { if (targetExclude != null) { Set expandedExcludeFiles = new HashSet<>(); for (File file : targetExclude.getFiles()) {