From cb9433fe36025accd94a16f5fda1c94326e6c841 Mon Sep 17 00:00:00 2001 From: Goooler Date: Sat, 11 Mar 2023 19:01:09 +0800 Subject: [PATCH 1/8] Prefer using plugin extensions over deprecated conventions https://docs.gradle.org/current/userguide/upgrading_version_7.html#all_convention_deprecation --- .../gradle/spotless/GroovyExtension.java | 52 ++++++++++++++----- .../gradle/spotless/JavaExtension.java | 30 ++++++++--- .../gradle/spotless/KotlinExtension.java | 39 ++++++++++---- .../gradle/spotless/ScalaExtension.java | 41 ++++++++++----- 4 files changed, 117 insertions(+), 45 deletions(-) diff --git a/plugin-gradle/src/main/java/com/diffplug/gradle/spotless/GroovyExtension.java b/plugin-gradle/src/main/java/com/diffplug/gradle/spotless/GroovyExtension.java index d25433293d..8d20cd3036 100644 --- a/plugin-gradle/src/main/java/com/diffplug/gradle/spotless/GroovyExtension.java +++ b/plugin-gradle/src/main/java/com/diffplug/gradle/spotless/GroovyExtension.java @@ -28,8 +28,11 @@ import org.gradle.api.internal.plugins.DslObject; import org.gradle.api.plugins.GroovyBasePlugin; import org.gradle.api.plugins.JavaPluginConvention; +import org.gradle.api.plugins.JavaPluginExtension; +import org.gradle.api.tasks.GroovySourceDirectorySet; import org.gradle.api.tasks.GroovySourceSet; import org.gradle.api.tasks.SourceSet; +import org.gradle.util.GradleVersion; import com.diffplug.spotless.extra.EquoBasedStepBuilder; import com.diffplug.spotless.extra.groovy.GrEclipseFormatterStep; @@ -112,22 +115,43 @@ public GrEclipseConfig withP2Mirrors(Map mirrors) { @Override protected void setupTask(SpotlessTask task) { if (target == null) { - JavaPluginConvention convention = getProject().getConvention().getPlugin(JavaPluginConvention.class); - if (convention == null || !getProject().getPlugins().hasPlugin(GroovyBasePlugin.class)) { - throw new GradleException("You must apply the groovy plugin before the spotless plugin if you are using the groovy extension."); - } - //Add all Groovy files (may contain Java files as well) - - FileCollection union = getProject().files(); - for (SourceSet sourceSet : convention.getSourceSets()) { - GroovySourceSet groovySourceSet = new DslObject(sourceSet).getConvention().getPlugin(GroovySourceSet.class); - if (excludeJava) { - union = union.plus(groovySourceSet.getAllGroovy()); - } else { - union = union.plus(groovySourceSet.getGroovy()); + if (GradleVersion.current().compareTo(GradleVersion.version("7.1")) >= 0) { + JavaPluginExtension javaPluginExtension = getProject().getExtensions().findByType(JavaPluginExtension.class); + if (javaPluginExtension == null || !getProject().getPlugins().hasPlugin(GroovyBasePlugin.class)) { + throw new GradleException("You must apply the groovy plugin before the spotless plugin if you are using the groovy extension."); + } + //Add all Groovy files (may contain Java files as well) + + FileCollection union = getProject().files(); + for (SourceSet sourceSet : javaPluginExtension.getSourceSets()) { + union = union.plus(sourceSet.getExtensions().getByType(GroovySourceDirectorySet.class).filter(file -> { + String name = file.getName(); + if (excludeJava) { + return name.endsWith(".groovy"); + } else { + return name.endsWith(".groovy") || name.endsWith(".java"); + } + })); + } + target = union; + } else { + JavaPluginConvention convention = getProject().getConvention().getPlugin(JavaPluginConvention.class); + if (convention == null || !getProject().getPlugins().hasPlugin(GroovyBasePlugin.class)) { + throw new GradleException("You must apply the groovy plugin before the spotless plugin if you are using the groovy extension."); + } + //Add all Groovy files (may contain Java files as well) + + FileCollection union = getProject().files(); + for (SourceSet sourceSet : convention.getSourceSets()) { + GroovySourceSet groovySourceSet = new DslObject(sourceSet).getConvention().getPlugin(GroovySourceSet.class); + if (excludeJava) { + union = union.plus(groovySourceSet.getAllGroovy()); + } else { + union = union.plus(groovySourceSet.getGroovy()); + } } + target = union; } - target = union; } else if (excludeJava) { throw new IllegalArgumentException("'excludeJava' is not supported in combination with a custom 'target'."); } diff --git a/plugin-gradle/src/main/java/com/diffplug/gradle/spotless/JavaExtension.java b/plugin-gradle/src/main/java/com/diffplug/gradle/spotless/JavaExtension.java index e67bb6d076..f511e9cebd 100644 --- a/plugin-gradle/src/main/java/com/diffplug/gradle/spotless/JavaExtension.java +++ b/plugin-gradle/src/main/java/com/diffplug/gradle/spotless/JavaExtension.java @@ -30,7 +30,9 @@ import org.gradle.api.Project; import org.gradle.api.file.FileCollection; import org.gradle.api.plugins.JavaPluginConvention; +import org.gradle.api.plugins.JavaPluginExtension; import org.gradle.api.tasks.SourceSet; +import org.gradle.util.GradleVersion; import com.diffplug.spotless.FormatterStep; import com.diffplug.spotless.extra.EquoBasedStepBuilder; @@ -366,15 +368,27 @@ private FormatterStep createStep() { @Override protected void setupTask(SpotlessTask task) { if (target == null) { - JavaPluginConvention javaPlugin = getProject().getConvention().findPlugin(JavaPluginConvention.class); - if (javaPlugin == null) { - throw new GradleException("You must either specify 'target' manually or apply the 'java' plugin."); - } - FileCollection union = getProject().files(); - for (SourceSet sourceSet : javaPlugin.getSourceSets()) { - union = union.plus(sourceSet.getAllJava()); + if (GradleVersion.current().compareTo(GradleVersion.version("7.1")) >= 0) { + JavaPluginExtension javaPluginExtension = getProject().getExtensions().findByType(JavaPluginExtension.class); + if (javaPluginExtension == null) { + throw new GradleException("You must either specify 'target' manually or apply the 'java' plugin."); + } + FileCollection union = getProject().files(); + for (SourceSet sourceSet : javaPluginExtension.getSourceSets()) { + union = union.plus(sourceSet.getAllJava()); + } + target = union; + } else { + JavaPluginConvention javaPlugin = getProject().getConvention().findPlugin(JavaPluginConvention.class); + if (javaPlugin == null) { + throw new GradleException("You must either specify 'target' manually or apply the 'java' plugin."); + } + FileCollection union = getProject().files(); + for (SourceSet sourceSet : javaPlugin.getSourceSets()) { + union = union.plus(sourceSet.getAllJava()); + } + target = union; } - target = union; } steps.replaceAll(step -> { diff --git a/plugin-gradle/src/main/java/com/diffplug/gradle/spotless/KotlinExtension.java b/plugin-gradle/src/main/java/com/diffplug/gradle/spotless/KotlinExtension.java index 5a7419f68d..f6cab3c28b 100644 --- a/plugin-gradle/src/main/java/com/diffplug/gradle/spotless/KotlinExtension.java +++ b/plugin-gradle/src/main/java/com/diffplug/gradle/spotless/KotlinExtension.java @@ -30,7 +30,9 @@ import org.gradle.api.GradleException; import org.gradle.api.file.FileCollection; import org.gradle.api.plugins.JavaPluginConvention; +import org.gradle.api.plugins.JavaPluginExtension; import org.gradle.api.tasks.SourceSet; +import org.gradle.util.GradleVersion; import com.diffplug.common.collect.ImmutableSortedMap; import com.diffplug.spotless.FileSignature; @@ -230,18 +232,33 @@ private FormatterStep createStep() { @Override protected void setupTask(SpotlessTask task) { if (target == null) { - JavaPluginConvention javaPlugin = getProject().getConvention().findPlugin(JavaPluginConvention.class); - if (javaPlugin == null) { - throw new GradleException("You must either specify 'target' manually or apply a kotlin plugin."); - } - FileCollection union = getProject().files(); - for (SourceSet sourceSet : javaPlugin.getSourceSets()) { - union = union.plus(sourceSet.getAllSource().filter(file -> { - String name = file.getName(); - return name.endsWith(".kt") || name.endsWith(".kts"); - })); + if (GradleVersion.current().compareTo(GradleVersion.version("7.1")) >= 0) { + JavaPluginExtension javaPluginExtension = getProject().getExtensions().findByType(JavaPluginExtension.class); + if (javaPluginExtension == null) { + throw new GradleException("You must either specify 'target' manually or apply a kotlin plugin."); + } + FileCollection union = getProject().files(); + for (SourceSet sourceSet : javaPluginExtension.getSourceSets()) { + union = union.plus(sourceSet.getAllSource().filter(file -> { + String name = file.getName(); + return name.endsWith(".kt") || name.endsWith(".kts"); + })); + } + target = union; + } else { + JavaPluginConvention javaPlugin = getProject().getConvention().findPlugin(JavaPluginConvention.class); + if (javaPlugin == null) { + throw new GradleException("You must either specify 'target' manually or apply a kotlin plugin."); + } + FileCollection union = getProject().files(); + for (SourceSet sourceSet : javaPlugin.getSourceSets()) { + union = union.plus(sourceSet.getAllSource().filter(file -> { + String name = file.getName(); + return name.endsWith(".kt") || name.endsWith(".kts"); + })); + } + target = union; } - target = union; } super.setupTask(task); } diff --git a/plugin-gradle/src/main/java/com/diffplug/gradle/spotless/ScalaExtension.java b/plugin-gradle/src/main/java/com/diffplug/gradle/spotless/ScalaExtension.java index 8a8765b539..9d710a1ba9 100644 --- a/plugin-gradle/src/main/java/com/diffplug/gradle/spotless/ScalaExtension.java +++ b/plugin-gradle/src/main/java/com/diffplug/gradle/spotless/ScalaExtension.java @@ -1,5 +1,5 @@ /* - * Copyright 2016-2022 DiffPlug + * Copyright 2016-2023 DiffPlug * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -24,7 +24,9 @@ import org.gradle.api.GradleException; import org.gradle.api.file.FileCollection; import org.gradle.api.plugins.JavaPluginConvention; +import org.gradle.api.plugins.JavaPluginExtension; import org.gradle.api.tasks.SourceSet; +import org.gradle.util.GradleVersion; import com.diffplug.spotless.FormatterStep; import com.diffplug.spotless.scala.ScalaFmtStep; @@ -79,18 +81,33 @@ private FormatterStep createStep() { @Override protected void setupTask(SpotlessTask task) { if (target == null) { - JavaPluginConvention javaPlugin = getProject().getConvention().findPlugin(JavaPluginConvention.class); - if (javaPlugin == null) { - throw new GradleException("You must either specify 'target' manually or apply the 'scala' plugin."); + if (GradleVersion.current().compareTo(GradleVersion.version("7.1")) >= 0) { + JavaPluginExtension javaPluginExtension = getProject().getExtensions().findByType(JavaPluginExtension.class); + if (javaPluginExtension == null) { + throw new GradleException("You must either specify 'target' manually or apply the 'scala' plugin."); + } + FileCollection union = getProject().files(); + for (SourceSet sourceSet : javaPluginExtension.getSourceSets()) { + union = union.plus(sourceSet.getAllSource().filter(file -> { + String name = file.getName(); + return name.endsWith(".scala") || name.endsWith(".sc"); + })); + } + target = union; + } else { + JavaPluginConvention javaPlugin = getProject().getConvention().findPlugin(JavaPluginConvention.class); + if (javaPlugin == null) { + throw new GradleException("You must either specify 'target' manually or apply the 'scala' plugin."); + } + FileCollection union = getProject().files(); + for (SourceSet sourceSet : javaPlugin.getSourceSets()) { + union = union.plus(sourceSet.getAllSource().filter(file -> { + String name = file.getName(); + return name.endsWith(".scala") || name.endsWith(".sc"); + })); + } + target = union; } - FileCollection union = getProject().files(); - for (SourceSet sourceSet : javaPlugin.getSourceSets()) { - union = union.plus(sourceSet.getAllSource().filter(file -> { - String name = file.getName(); - return name.endsWith(".scala") || name.endsWith(".sc"); - })); - } - target = union; } super.setupTask(task); } From 4410531a75e26788114b627d804d263afc791de7 Mon Sep 17 00:00:00 2001 From: Goooler Date: Sat, 11 Mar 2023 10:29:23 +0800 Subject: [PATCH 2/8] Reuse getSources logic for Jvm languages --- .../gradle/spotless/GroovyExtension.java | 55 ++++++------------- .../gradle/spotless/JavaExtension.java | 32 ++--------- .../com/diffplug/gradle/spotless/JvmLang.java | 55 +++++++++++++++++++ .../gradle/spotless/KotlinExtension.java | 39 +++---------- .../gradle/spotless/ScalaExtension.java | 39 +++---------- 5 files changed, 92 insertions(+), 128 deletions(-) create mode 100644 plugin-gradle/src/main/java/com/diffplug/gradle/spotless/JvmLang.java diff --git a/plugin-gradle/src/main/java/com/diffplug/gradle/spotless/GroovyExtension.java b/plugin-gradle/src/main/java/com/diffplug/gradle/spotless/GroovyExtension.java index 8d20cd3036..17a57f6301 100644 --- a/plugin-gradle/src/main/java/com/diffplug/gradle/spotless/GroovyExtension.java +++ b/plugin-gradle/src/main/java/com/diffplug/gradle/spotless/GroovyExtension.java @@ -24,14 +24,10 @@ import org.gradle.api.GradleException; import org.gradle.api.Project; -import org.gradle.api.file.FileCollection; import org.gradle.api.internal.plugins.DslObject; import org.gradle.api.plugins.GroovyBasePlugin; -import org.gradle.api.plugins.JavaPluginConvention; -import org.gradle.api.plugins.JavaPluginExtension; import org.gradle.api.tasks.GroovySourceDirectorySet; import org.gradle.api.tasks.GroovySourceSet; -import org.gradle.api.tasks.SourceSet; import org.gradle.util.GradleVersion; import com.diffplug.spotless.extra.EquoBasedStepBuilder; @@ -39,7 +35,7 @@ import com.diffplug.spotless.generic.LicenseHeaderStep; import com.diffplug.spotless.java.ImportOrderStep; -public class GroovyExtension extends FormatExtension implements HasBuiltinDelimiterForLicense { +public class GroovyExtension extends FormatExtension implements HasBuiltinDelimiterForLicense, JvmLang { static final String NAME = "groovy"; @Inject @@ -115,43 +111,28 @@ public GrEclipseConfig withP2Mirrors(Map mirrors) { @Override protected void setupTask(SpotlessTask task) { if (target == null) { - if (GradleVersion.current().compareTo(GradleVersion.version("7.1")) >= 0) { - JavaPluginExtension javaPluginExtension = getProject().getExtensions().findByType(JavaPluginExtension.class); - if (javaPluginExtension == null || !getProject().getPlugins().hasPlugin(GroovyBasePlugin.class)) { - throw new GradleException("You must apply the groovy plugin before the spotless plugin if you are using the groovy extension."); - } - //Add all Groovy files (may contain Java files as well) - - FileCollection union = getProject().files(); - for (SourceSet sourceSet : javaPluginExtension.getSourceSets()) { - union = union.plus(sourceSet.getExtensions().getByType(GroovySourceDirectorySet.class).filter(file -> { - String name = file.getName(); + final String message = "You must apply the groovy plugin before the spotless plugin if you are using the groovy extension."; + if (!getProject().getPlugins().hasPlugin(GroovyBasePlugin.class)) { + throw new GradleException(message); + } + target = getSources(getProject(), + message, + sourceSet -> { + if (GradleVersion.current().compareTo(GradleVersion.version("7.1")) >= 0) { + return sourceSet.getExtensions().getByType(GroovySourceDirectorySet.class); + } else { + final GroovySourceSet groovySourceSet = new DslObject(sourceSet).getConvention().getPlugin(GroovySourceSet.class); + return groovySourceSet.getGroovy(); + } + }, + file -> { + final String name = file.getName(); if (excludeJava) { return name.endsWith(".groovy"); } else { return name.endsWith(".groovy") || name.endsWith(".java"); } - })); - } - target = union; - } else { - JavaPluginConvention convention = getProject().getConvention().getPlugin(JavaPluginConvention.class); - if (convention == null || !getProject().getPlugins().hasPlugin(GroovyBasePlugin.class)) { - throw new GradleException("You must apply the groovy plugin before the spotless plugin if you are using the groovy extension."); - } - //Add all Groovy files (may contain Java files as well) - - FileCollection union = getProject().files(); - for (SourceSet sourceSet : convention.getSourceSets()) { - GroovySourceSet groovySourceSet = new DslObject(sourceSet).getConvention().getPlugin(GroovySourceSet.class); - if (excludeJava) { - union = union.plus(groovySourceSet.getAllGroovy()); - } else { - union = union.plus(groovySourceSet.getGroovy()); - } - } - target = union; - } + }); } else if (excludeJava) { throw new IllegalArgumentException("'excludeJava' is not supported in combination with a custom 'target'."); } diff --git a/plugin-gradle/src/main/java/com/diffplug/gradle/spotless/JavaExtension.java b/plugin-gradle/src/main/java/com/diffplug/gradle/spotless/JavaExtension.java index f511e9cebd..8634e9b6b3 100644 --- a/plugin-gradle/src/main/java/com/diffplug/gradle/spotless/JavaExtension.java +++ b/plugin-gradle/src/main/java/com/diffplug/gradle/spotless/JavaExtension.java @@ -26,13 +26,8 @@ import javax.inject.Inject; -import org.gradle.api.GradleException; import org.gradle.api.Project; -import org.gradle.api.file.FileCollection; -import org.gradle.api.plugins.JavaPluginConvention; -import org.gradle.api.plugins.JavaPluginExtension; import org.gradle.api.tasks.SourceSet; -import org.gradle.util.GradleVersion; import com.diffplug.spotless.FormatterStep; import com.diffplug.spotless.extra.EquoBasedStepBuilder; @@ -45,7 +40,7 @@ import com.diffplug.spotless.java.PalantirJavaFormatStep; import com.diffplug.spotless.java.RemoveUnusedImportsStep; -public class JavaExtension extends FormatExtension implements HasBuiltinDelimiterForLicense { +public class JavaExtension extends FormatExtension implements HasBuiltinDelimiterForLicense, JvmLang { static final String NAME = "java"; @Inject @@ -368,27 +363,10 @@ private FormatterStep createStep() { @Override protected void setupTask(SpotlessTask task) { if (target == null) { - if (GradleVersion.current().compareTo(GradleVersion.version("7.1")) >= 0) { - JavaPluginExtension javaPluginExtension = getProject().getExtensions().findByType(JavaPluginExtension.class); - if (javaPluginExtension == null) { - throw new GradleException("You must either specify 'target' manually or apply the 'java' plugin."); - } - FileCollection union = getProject().files(); - for (SourceSet sourceSet : javaPluginExtension.getSourceSets()) { - union = union.plus(sourceSet.getAllJava()); - } - target = union; - } else { - JavaPluginConvention javaPlugin = getProject().getConvention().findPlugin(JavaPluginConvention.class); - if (javaPlugin == null) { - throw new GradleException("You must either specify 'target' manually or apply the 'java' plugin."); - } - FileCollection union = getProject().files(); - for (SourceSet sourceSet : javaPlugin.getSourceSets()) { - union = union.plus(sourceSet.getAllJava()); - } - target = union; - } + target = getSources(getProject(), + "You must either specify 'target' manually or apply the 'java' plugin.", + SourceSet::getAllJava, + file -> file.getName().endsWith(".java")); } steps.replaceAll(step -> { diff --git a/plugin-gradle/src/main/java/com/diffplug/gradle/spotless/JvmLang.java b/plugin-gradle/src/main/java/com/diffplug/gradle/spotless/JvmLang.java new file mode 100644 index 0000000000..6e30674c6c --- /dev/null +++ b/plugin-gradle/src/main/java/com/diffplug/gradle/spotless/JvmLang.java @@ -0,0 +1,55 @@ +/* + * Copyright 2023 DiffPlug + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.diffplug.gradle.spotless; + +import java.io.File; +import java.util.function.Function; + +import org.gradle.api.GradleException; +import org.gradle.api.Project; +import org.gradle.api.file.FileCollection; +import org.gradle.api.file.SourceDirectorySet; +import org.gradle.api.plugins.JavaPluginConvention; +import org.gradle.api.plugins.JavaPluginExtension; +import org.gradle.api.specs.Spec; +import org.gradle.api.tasks.SourceSet; +import org.gradle.api.tasks.SourceSetContainer; +import org.gradle.util.GradleVersion; + +interface JvmLang { + + default FileCollection getSources(Project project, String message, Function sourceSetSourceDirectory, Spec filterSpec) { + final SourceSetContainer sourceSets; + FileCollection union = project.files(); + if (GradleVersion.current().compareTo(GradleVersion.version("7.1")) >= 0) { + final JavaPluginExtension javaPluginExtension = project.getExtensions().findByType(JavaPluginExtension.class); + if (javaPluginExtension == null) { + throw new GradleException(message); + } + sourceSets = javaPluginExtension.getSourceSets(); + } else { + final JavaPluginConvention javaPluginConvention = project.getConvention().findPlugin(JavaPluginConvention.class); + if (javaPluginConvention == null) { + throw new GradleException(message); + } + sourceSets = javaPluginConvention.getSourceSets(); + } + for (SourceSet sourceSet : sourceSets) { + union = union.plus(sourceSetSourceDirectory.apply(sourceSet).filter(filterSpec)); + } + return union; + } +} diff --git a/plugin-gradle/src/main/java/com/diffplug/gradle/spotless/KotlinExtension.java b/plugin-gradle/src/main/java/com/diffplug/gradle/spotless/KotlinExtension.java index f6cab3c28b..363a9cac6f 100644 --- a/plugin-gradle/src/main/java/com/diffplug/gradle/spotless/KotlinExtension.java +++ b/plugin-gradle/src/main/java/com/diffplug/gradle/spotless/KotlinExtension.java @@ -27,12 +27,7 @@ import javax.annotation.Nullable; import javax.inject.Inject; -import org.gradle.api.GradleException; -import org.gradle.api.file.FileCollection; -import org.gradle.api.plugins.JavaPluginConvention; -import org.gradle.api.plugins.JavaPluginExtension; import org.gradle.api.tasks.SourceSet; -import org.gradle.util.GradleVersion; import com.diffplug.common.collect.ImmutableSortedMap; import com.diffplug.spotless.FileSignature; @@ -43,7 +38,7 @@ import com.diffplug.spotless.kotlin.KtfmtStep.KtfmtFormattingOptions; import com.diffplug.spotless.kotlin.KtfmtStep.Style; -public class KotlinExtension extends FormatExtension implements HasBuiltinDelimiterForLicense { +public class KotlinExtension extends FormatExtension implements HasBuiltinDelimiterForLicense, JvmLang { static final String NAME = "kotlin"; @Inject @@ -232,33 +227,13 @@ private FormatterStep createStep() { @Override protected void setupTask(SpotlessTask task) { if (target == null) { - if (GradleVersion.current().compareTo(GradleVersion.version("7.1")) >= 0) { - JavaPluginExtension javaPluginExtension = getProject().getExtensions().findByType(JavaPluginExtension.class); - if (javaPluginExtension == null) { - throw new GradleException("You must either specify 'target' manually or apply a kotlin plugin."); - } - FileCollection union = getProject().files(); - for (SourceSet sourceSet : javaPluginExtension.getSourceSets()) { - union = union.plus(sourceSet.getAllSource().filter(file -> { - String name = file.getName(); + target = getSources(getProject(), + "You must either specify 'target' manually or apply a kotlin plugin.", + SourceSet::getAllSource, + file -> { + final String name = file.getName(); return name.endsWith(".kt") || name.endsWith(".kts"); - })); - } - target = union; - } else { - JavaPluginConvention javaPlugin = getProject().getConvention().findPlugin(JavaPluginConvention.class); - if (javaPlugin == null) { - throw new GradleException("You must either specify 'target' manually or apply a kotlin plugin."); - } - FileCollection union = getProject().files(); - for (SourceSet sourceSet : javaPlugin.getSourceSets()) { - union = union.plus(sourceSet.getAllSource().filter(file -> { - String name = file.getName(); - return name.endsWith(".kt") || name.endsWith(".kts"); - })); - } - target = union; - } + }); } super.setupTask(task); } diff --git a/plugin-gradle/src/main/java/com/diffplug/gradle/spotless/ScalaExtension.java b/plugin-gradle/src/main/java/com/diffplug/gradle/spotless/ScalaExtension.java index 9d710a1ba9..1639f3473c 100644 --- a/plugin-gradle/src/main/java/com/diffplug/gradle/spotless/ScalaExtension.java +++ b/plugin-gradle/src/main/java/com/diffplug/gradle/spotless/ScalaExtension.java @@ -21,17 +21,12 @@ import javax.annotation.Nullable; import javax.inject.Inject; -import org.gradle.api.GradleException; -import org.gradle.api.file.FileCollection; -import org.gradle.api.plugins.JavaPluginConvention; -import org.gradle.api.plugins.JavaPluginExtension; import org.gradle.api.tasks.SourceSet; -import org.gradle.util.GradleVersion; import com.diffplug.spotless.FormatterStep; import com.diffplug.spotless.scala.ScalaFmtStep; -public class ScalaExtension extends FormatExtension { +public class ScalaExtension extends FormatExtension implements JvmLang { static final String NAME = "scala"; @Inject @@ -81,33 +76,13 @@ private FormatterStep createStep() { @Override protected void setupTask(SpotlessTask task) { if (target == null) { - if (GradleVersion.current().compareTo(GradleVersion.version("7.1")) >= 0) { - JavaPluginExtension javaPluginExtension = getProject().getExtensions().findByType(JavaPluginExtension.class); - if (javaPluginExtension == null) { - throw new GradleException("You must either specify 'target' manually or apply the 'scala' plugin."); - } - FileCollection union = getProject().files(); - for (SourceSet sourceSet : javaPluginExtension.getSourceSets()) { - union = union.plus(sourceSet.getAllSource().filter(file -> { - String name = file.getName(); + target = getSources(getProject(), + "You must either specify 'target' manually or apply the 'scala' plugin.", + SourceSet::getAllSource, + file -> { + final String name = file.getName(); return name.endsWith(".scala") || name.endsWith(".sc"); - })); - } - target = union; - } else { - JavaPluginConvention javaPlugin = getProject().getConvention().findPlugin(JavaPluginConvention.class); - if (javaPlugin == null) { - throw new GradleException("You must either specify 'target' manually or apply the 'scala' plugin."); - } - FileCollection union = getProject().files(); - for (SourceSet sourceSet : javaPlugin.getSourceSets()) { - union = union.plus(sourceSet.getAllSource().filter(file -> { - String name = file.getName(); - return name.endsWith(".scala") || name.endsWith(".sc"); - })); - } - target = union; - } + }); } super.setupTask(task); } From 1c21d12ebc7e1dabdb6d2001df18fff8d84c1fe4 Mon Sep 17 00:00:00 2001 From: Ned Twigg Date: Mon, 27 Mar 2023 18:37:25 -0700 Subject: [PATCH 3/8] Centralize gradle versions so we can remove version-specific workarounds as soon as possible. --- .../src/main/java/com/diffplug/gradle/spotless/JvmLang.java | 2 +- .../java/com/diffplug/gradle/spotless/SpotlessPlugin.java | 5 +++-- .../diffplug/gradle/spotless/SpotlessPluginRedirect.java | 6 +++--- .../diffplug/gradle/spotless/GradleIntegrationHarness.java | 2 +- 4 files changed, 8 insertions(+), 7 deletions(-) diff --git a/plugin-gradle/src/main/java/com/diffplug/gradle/spotless/JvmLang.java b/plugin-gradle/src/main/java/com/diffplug/gradle/spotless/JvmLang.java index 6e30674c6c..1a9a06b986 100644 --- a/plugin-gradle/src/main/java/com/diffplug/gradle/spotless/JvmLang.java +++ b/plugin-gradle/src/main/java/com/diffplug/gradle/spotless/JvmLang.java @@ -34,7 +34,7 @@ interface JvmLang { default FileCollection getSources(Project project, String message, Function sourceSetSourceDirectory, Spec filterSpec) { final SourceSetContainer sourceSets; FileCollection union = project.files(); - if (GradleVersion.current().compareTo(GradleVersion.version("7.1")) >= 0) { + if (GradleVersion.current().compareTo(GradleVersion.version(SpotlessPlugin.VER_GRADLE_javaPluginExtension)) >= 0) { final JavaPluginExtension javaPluginExtension = project.getExtensions().findByType(JavaPluginExtension.class); if (javaPluginExtension == null) { throw new GradleException(message); diff --git a/plugin-gradle/src/main/java/com/diffplug/gradle/spotless/SpotlessPlugin.java b/plugin-gradle/src/main/java/com/diffplug/gradle/spotless/SpotlessPlugin.java index 91847af0cf..0043e2b274 100644 --- a/plugin-gradle/src/main/java/com/diffplug/gradle/spotless/SpotlessPlugin.java +++ b/plugin-gradle/src/main/java/com/diffplug/gradle/spotless/SpotlessPlugin.java @@ -26,13 +26,14 @@ public class SpotlessPlugin implements Plugin { static final String SPOTLESS_MODERN = "spotlessModern"; - static final String MINIMUM_GRADLE = "6.1.1"; + static final String VER_GRADLE_min = "6.1.1"; + static final String VER_GRADLE_javaPluginExtension = "7.1"; private static final int MINIMUM_JRE = 11; @Override public void apply(Project project) { if (SpotlessPluginRedirect.gradleIsTooOld(project)) { - throw new GradleException("Spotless requires Gradle " + MINIMUM_GRADLE + " or newer, this was " + project.getGradle().getGradleVersion()); + throw new GradleException("Spotless requires Gradle " + VER_GRADLE_min + " or newer, this was " + project.getGradle().getGradleVersion()); } if (Jvm.version() < MINIMUM_JRE) { throw new GradleException("Spotless requires JRE " + MINIMUM_JRE + " or newer, this was " + JavaVersion.current() + ".\n" diff --git a/plugin-gradle/src/main/java/com/diffplug/gradle/spotless/SpotlessPluginRedirect.java b/plugin-gradle/src/main/java/com/diffplug/gradle/spotless/SpotlessPluginRedirect.java index da4d3dcd8b..975ec5576e 100644 --- a/plugin-gradle/src/main/java/com/diffplug/gradle/spotless/SpotlessPluginRedirect.java +++ b/plugin-gradle/src/main/java/com/diffplug/gradle/spotless/SpotlessPluginRedirect.java @@ -1,5 +1,5 @@ /* - * Copyright 2020 DiffPlug + * Copyright 2020-2023 DiffPlug * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -46,7 +46,7 @@ private static int badSemver(int major, int minor) { static boolean gradleIsTooOld(Project project) { if (gradleIsTooOld == null) { - gradleIsTooOld = badSemver(project.getGradle().getGradleVersion()) < badSemver(SpotlessPlugin.MINIMUM_GRADLE); + gradleIsTooOld = badSemver(project.getGradle().getGradleVersion()) < badSemver(SpotlessPlugin.VER_GRADLE_min); } return gradleIsTooOld.booleanValue(); } @@ -73,7 +73,7 @@ public void apply(Project project) { "If you like the idea behind 'ratchetFrom', you should checkout spotless-changelog", "https://github.com/diffplug/spotless-changelog"); if (gradleIsTooOld(project)) { - errorMsg = errorMsg.replace("To migrate:\n", "To migrate:\n- Upgrade gradle to " + SpotlessPlugin.MINIMUM_GRADLE + " or newer (you're on " + project.getGradle().getGradleVersion() + ")\n"); + errorMsg = errorMsg.replace("To migrate:\n", "To migrate:\n- Upgrade gradle to " + SpotlessPlugin.VER_GRADLE_min + " or newer (you're on " + project.getGradle().getGradleVersion() + ")\n"); } throw new GradleException(errorMsg); } diff --git a/plugin-gradle/src/test/java/com/diffplug/gradle/spotless/GradleIntegrationHarness.java b/plugin-gradle/src/test/java/com/diffplug/gradle/spotless/GradleIntegrationHarness.java index 1763fd088f..61d191bab1 100644 --- a/plugin-gradle/src/test/java/com/diffplug/gradle/spotless/GradleIntegrationHarness.java +++ b/plugin-gradle/src/test/java/com/diffplug/gradle/spotless/GradleIntegrationHarness.java @@ -43,7 +43,7 @@ public class GradleIntegrationHarness extends ResourceHarness { public enum GradleVersionSupport { - JRE_11("5.0"), MINIMUM(SpotlessPlugin.MINIMUM_GRADLE), + JRE_11("5.0"), MINIMUM(SpotlessPlugin.VER_GRADLE_min), // technically, this API exists in 6.5, but the flags for it change in 6.6, so we build to that CONFIGURATION_CACHE("6.6"), // https://docs.gradle.org/7.5/userguide/configuration_cache.html#config_cache:stable From 1470666c83588149ba1e0bc2178099343abc39d9 Mon Sep 17 00:00:00 2001 From: Ned Twigg Date: Wed, 5 Apr 2023 14:21:19 -0700 Subject: [PATCH 4/8] More version centralizing. --- .../main/java/com/diffplug/gradle/spotless/GroovyExtension.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugin-gradle/src/main/java/com/diffplug/gradle/spotless/GroovyExtension.java b/plugin-gradle/src/main/java/com/diffplug/gradle/spotless/GroovyExtension.java index 17a57f6301..f20137f047 100644 --- a/plugin-gradle/src/main/java/com/diffplug/gradle/spotless/GroovyExtension.java +++ b/plugin-gradle/src/main/java/com/diffplug/gradle/spotless/GroovyExtension.java @@ -118,7 +118,7 @@ protected void setupTask(SpotlessTask task) { target = getSources(getProject(), message, sourceSet -> { - if (GradleVersion.current().compareTo(GradleVersion.version("7.1")) >= 0) { + if (GradleVersion.current().compareTo(GradleVersion.version(SpotlessPlugin.VER_GRADLE_javaPluginExtension)) >= 0) { return sourceSet.getExtensions().getByType(GroovySourceDirectorySet.class); } else { final GroovySourceSet groovySourceSet = new DslObject(sourceSet).getConvention().getPlugin(GroovySourceSet.class); From 9f490688151ae0d858df59b5c923efbeba8fffe0 Mon Sep 17 00:00:00 2001 From: Ned Twigg Date: Wed, 5 Apr 2023 14:25:02 -0700 Subject: [PATCH 5/8] Improve the GroovyExtension error message when there is no target and no `groovy` plugin. --- .../main/java/com/diffplug/gradle/spotless/GroovyExtension.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugin-gradle/src/main/java/com/diffplug/gradle/spotless/GroovyExtension.java b/plugin-gradle/src/main/java/com/diffplug/gradle/spotless/GroovyExtension.java index f20137f047..a7f3d98ce4 100644 --- a/plugin-gradle/src/main/java/com/diffplug/gradle/spotless/GroovyExtension.java +++ b/plugin-gradle/src/main/java/com/diffplug/gradle/spotless/GroovyExtension.java @@ -111,7 +111,7 @@ public GrEclipseConfig withP2Mirrors(Map mirrors) { @Override protected void setupTask(SpotlessTask task) { if (target == null) { - final String message = "You must apply the groovy plugin before the spotless plugin if you are using the groovy extension."; + final String message = "You must either specify 'target' manually or apply the 'groovy' plugin."; if (!getProject().getPlugins().hasPlugin(GroovyBasePlugin.class)) { throw new GradleException(message); } From 45e078d3540660c97f07319134d524086519a920 Mon Sep 17 00:00:00 2001 From: Ned Twigg Date: Wed, 5 Apr 2023 14:26:34 -0700 Subject: [PATCH 6/8] Update changelog. --- plugin-gradle/CHANGES.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/plugin-gradle/CHANGES.md b/plugin-gradle/CHANGES.md index 0a0cabcca0..831182d900 100644 --- a/plugin-gradle/CHANGES.md +++ b/plugin-gradle/CHANGES.md @@ -17,6 +17,8 @@ We adhere to the [keepachangelog](https://keepachangelog.com/en/1.0.0/) format ( ### Changes * **POTENTIALLY BREAKING** Drop support for `googleJavaFormat` versions < `1.8`. ([#1630](https://github.com/diffplug/spotless/pull/1630)) * Bump default `googleJavaFormat` version `1.15.0` -> `1.16.0`. ([#1630](https://github.com/diffplug/spotless/pull/1630)) +### Fixed +* Stop using deprecated conventions when used in Gradle >= `7.1`. ([#1618](https://github.com/diffplug/spotless/pull/1618)) ## [6.17.0] - 2023-03-13 ### Added From d7ca743c187b868d2ba58d93027d3a61ac8950e0 Mon Sep 17 00:00:00 2001 From: Ned Twigg Date: Wed, 5 Apr 2023 14:44:04 -0700 Subject: [PATCH 7/8] Fix groovy test for new error message. --- .../java/com/diffplug/gradle/spotless/GroovyExtensionTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugin-gradle/src/test/java/com/diffplug/gradle/spotless/GroovyExtensionTest.java b/plugin-gradle/src/test/java/com/diffplug/gradle/spotless/GroovyExtensionTest.java index b9c7d2f66e..8ca432ebf6 100644 --- a/plugin-gradle/src/test/java/com/diffplug/gradle/spotless/GroovyExtensionTest.java +++ b/plugin-gradle/src/test/java/com/diffplug/gradle/spotless/GroovyExtensionTest.java @@ -103,7 +103,7 @@ void groovyPluginMissingCheck() throws IOException { Throwable error = assertThrows(Throwable.class, () -> gradleRunner().withArguments("spotlessApply").build()); - assertThat(error).hasMessageContaining("must apply the groovy plugin before"); + assertThat(error).hasMessageContaining("You must either specify 'target' manually or apply the 'groovy' plugin."); } } From 91439e5c7300e4ee2253e404a72e92963863f7e2 Mon Sep 17 00:00:00 2001 From: Ned Twigg Date: Wed, 5 Apr 2023 14:50:14 -0700 Subject: [PATCH 8/8] spotlessApply --- .../java/com/diffplug/gradle/spotless/GroovyExtensionTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugin-gradle/src/test/java/com/diffplug/gradle/spotless/GroovyExtensionTest.java b/plugin-gradle/src/test/java/com/diffplug/gradle/spotless/GroovyExtensionTest.java index 8ca432ebf6..c38df40d54 100644 --- a/plugin-gradle/src/test/java/com/diffplug/gradle/spotless/GroovyExtensionTest.java +++ b/plugin-gradle/src/test/java/com/diffplug/gradle/spotless/GroovyExtensionTest.java @@ -1,5 +1,5 @@ /* - * Copyright 2016-2021 DiffPlug + * Copyright 2016-2023 DiffPlug * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License.