Skip to content

Commit 21201c6

Browse files
committed
Reuse getSources logic for Jvm languages
1 parent dc205f5 commit 21201c6

File tree

5 files changed

+92
-128
lines changed

5 files changed

+92
-128
lines changed

plugin-gradle/src/main/java/com/diffplug/gradle/spotless/GroovyExtension.java

Lines changed: 18 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -23,22 +23,18 @@
2323

2424
import org.gradle.api.GradleException;
2525
import org.gradle.api.Project;
26-
import org.gradle.api.file.FileCollection;
2726
import org.gradle.api.internal.plugins.DslObject;
2827
import org.gradle.api.plugins.GroovyBasePlugin;
29-
import org.gradle.api.plugins.JavaPluginConvention;
30-
import org.gradle.api.plugins.JavaPluginExtension;
3128
import org.gradle.api.tasks.GroovySourceDirectorySet;
3229
import org.gradle.api.tasks.GroovySourceSet;
33-
import org.gradle.api.tasks.SourceSet;
3430
import org.gradle.util.GradleVersion;
3531

3632
import com.diffplug.spotless.extra.EquoBasedStepBuilder;
3733
import com.diffplug.spotless.extra.groovy.GrEclipseFormatterStep;
3834
import com.diffplug.spotless.generic.LicenseHeaderStep;
3935
import com.diffplug.spotless.java.ImportOrderStep;
4036

41-
public class GroovyExtension extends FormatExtension implements HasBuiltinDelimiterForLicense {
37+
public class GroovyExtension extends FormatExtension implements HasBuiltinDelimiterForLicense, JvmLang {
4238
static final String NAME = "groovy";
4339

4440
@Inject
@@ -108,43 +104,28 @@ public void configFile(Object... configFiles) {
108104
@Override
109105
protected void setupTask(SpotlessTask task) {
110106
if (target == null) {
111-
if (GradleVersion.current().compareTo(GradleVersion.version("7.1")) >= 0) {
112-
JavaPluginExtension javaPluginExtension = getProject().getExtensions().findByType(JavaPluginExtension.class);
113-
if (javaPluginExtension == null || !getProject().getPlugins().hasPlugin(GroovyBasePlugin.class)) {
114-
throw new GradleException("You must apply the groovy plugin before the spotless plugin if you are using the groovy extension.");
115-
}
116-
//Add all Groovy files (may contain Java files as well)
117-
118-
FileCollection union = getProject().files();
119-
for (SourceSet sourceSet : javaPluginExtension.getSourceSets()) {
120-
union = union.plus(sourceSet.getExtensions().getByType(GroovySourceDirectorySet.class).filter(file -> {
121-
String name = file.getName();
107+
final String message = "You must apply the groovy plugin before the spotless plugin if you are using the groovy extension.";
108+
if (!getProject().getPlugins().hasPlugin(GroovyBasePlugin.class)) {
109+
throw new GradleException(message);
110+
}
111+
target = getSources(getProject(),
112+
message,
113+
sourceSet -> {
114+
if (GradleVersion.current().compareTo(GradleVersion.version("7.1")) >= 0) {
115+
return sourceSet.getExtensions().getByType(GroovySourceDirectorySet.class);
116+
} else {
117+
final GroovySourceSet groovySourceSet = new DslObject(sourceSet).getConvention().getPlugin(GroovySourceSet.class);
118+
return groovySourceSet.getGroovy();
119+
}
120+
},
121+
file -> {
122+
final String name = file.getName();
122123
if (excludeJava) {
123124
return name.endsWith(".groovy");
124125
} else {
125126
return name.endsWith(".groovy") || name.endsWith(".java");
126127
}
127-
}));
128-
}
129-
target = union;
130-
} else {
131-
JavaPluginConvention convention = getProject().getConvention().getPlugin(JavaPluginConvention.class);
132-
if (convention == null || !getProject().getPlugins().hasPlugin(GroovyBasePlugin.class)) {
133-
throw new GradleException("You must apply the groovy plugin before the spotless plugin if you are using the groovy extension.");
134-
}
135-
//Add all Groovy files (may contain Java files as well)
136-
137-
FileCollection union = getProject().files();
138-
for (SourceSet sourceSet : convention.getSourceSets()) {
139-
GroovySourceSet groovySourceSet = new DslObject(sourceSet).getConvention().getPlugin(GroovySourceSet.class);
140-
if (excludeJava) {
141-
union = union.plus(groovySourceSet.getAllGroovy());
142-
} else {
143-
union = union.plus(groovySourceSet.getGroovy());
144-
}
145-
}
146-
target = union;
147-
}
128+
});
148129
} else if (excludeJava) {
149130
throw new IllegalArgumentException("'excludeJava' is not supported in combination with a custom 'target'.");
150131
}

plugin-gradle/src/main/java/com/diffplug/gradle/spotless/JavaExtension.java

Lines changed: 5 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -25,13 +25,8 @@
2525

2626
import javax.inject.Inject;
2727

28-
import org.gradle.api.GradleException;
2928
import org.gradle.api.Project;
30-
import org.gradle.api.file.FileCollection;
31-
import org.gradle.api.plugins.JavaPluginConvention;
32-
import org.gradle.api.plugins.JavaPluginExtension;
3329
import org.gradle.api.tasks.SourceSet;
34-
import org.gradle.util.GradleVersion;
3530

3631
import com.diffplug.spotless.FormatterStep;
3732
import com.diffplug.spotless.extra.EquoBasedStepBuilder;
@@ -44,7 +39,7 @@
4439
import com.diffplug.spotless.java.PalantirJavaFormatStep;
4540
import com.diffplug.spotless.java.RemoveUnusedImportsStep;
4641

47-
public class JavaExtension extends FormatExtension implements HasBuiltinDelimiterForLicense {
42+
public class JavaExtension extends FormatExtension implements HasBuiltinDelimiterForLicense, JvmLang {
4843
static final String NAME = "java";
4944

5045
@Inject
@@ -361,27 +356,10 @@ private FormatterStep createStep() {
361356
@Override
362357
protected void setupTask(SpotlessTask task) {
363358
if (target == null) {
364-
if (GradleVersion.current().compareTo(GradleVersion.version("7.1")) >= 0) {
365-
JavaPluginExtension javaPluginExtension = getProject().getExtensions().findByType(JavaPluginExtension.class);
366-
if (javaPluginExtension == null) {
367-
throw new GradleException("You must either specify 'target' manually or apply the 'java' plugin.");
368-
}
369-
FileCollection union = getProject().files();
370-
for (SourceSet sourceSet : javaPluginExtension.getSourceSets()) {
371-
union = union.plus(sourceSet.getAllJava());
372-
}
373-
target = union;
374-
} else {
375-
JavaPluginConvention javaPlugin = getProject().getConvention().findPlugin(JavaPluginConvention.class);
376-
if (javaPlugin == null) {
377-
throw new GradleException("You must either specify 'target' manually or apply the 'java' plugin.");
378-
}
379-
FileCollection union = getProject().files();
380-
for (SourceSet sourceSet : javaPlugin.getSourceSets()) {
381-
union = union.plus(sourceSet.getAllJava());
382-
}
383-
target = union;
384-
}
359+
target = getSources(getProject(),
360+
"You must either specify 'target' manually or apply the 'java' plugin.",
361+
SourceSet::getAllJava,
362+
file -> file.getName().endsWith(".java"));
385363
}
386364

387365
steps.replaceAll(step -> {
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
/*
2+
* Copyright 2023 DiffPlug
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* http://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
package com.diffplug.gradle.spotless;
17+
18+
import java.io.File;
19+
import java.util.function.Function;
20+
21+
import org.gradle.api.GradleException;
22+
import org.gradle.api.Project;
23+
import org.gradle.api.file.FileCollection;
24+
import org.gradle.api.file.SourceDirectorySet;
25+
import org.gradle.api.plugins.JavaPluginConvention;
26+
import org.gradle.api.plugins.JavaPluginExtension;
27+
import org.gradle.api.specs.Spec;
28+
import org.gradle.api.tasks.SourceSet;
29+
import org.gradle.api.tasks.SourceSetContainer;
30+
import org.gradle.util.GradleVersion;
31+
32+
interface JvmLang {
33+
34+
default FileCollection getSources(Project project, String message, Function<SourceSet, SourceDirectorySet> sourceSetSourceDirectory, Spec<? super File> filterSpec) {
35+
final SourceSetContainer sourceSets;
36+
FileCollection union = project.files();
37+
if (GradleVersion.current().compareTo(GradleVersion.version("7.1")) >= 0) {
38+
final JavaPluginExtension javaPluginExtension = project.getExtensions().findByType(JavaPluginExtension.class);
39+
if (javaPluginExtension == null) {
40+
throw new GradleException(message);
41+
}
42+
sourceSets = javaPluginExtension.getSourceSets();
43+
} else {
44+
final JavaPluginConvention javaPluginConvention = project.getConvention().findPlugin(JavaPluginConvention.class);
45+
if (javaPluginConvention == null) {
46+
throw new GradleException(message);
47+
}
48+
sourceSets = javaPluginConvention.getSourceSets();
49+
}
50+
for (SourceSet sourceSet : sourceSets) {
51+
union = union.plus(sourceSetSourceDirectory.apply(sourceSet).filter(filterSpec));
52+
}
53+
return union;
54+
}
55+
}

plugin-gradle/src/main/java/com/diffplug/gradle/spotless/KotlinExtension.java

Lines changed: 7 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -27,12 +27,7 @@
2727
import javax.annotation.Nullable;
2828
import javax.inject.Inject;
2929

30-
import org.gradle.api.GradleException;
31-
import org.gradle.api.file.FileCollection;
32-
import org.gradle.api.plugins.JavaPluginConvention;
33-
import org.gradle.api.plugins.JavaPluginExtension;
3430
import org.gradle.api.tasks.SourceSet;
35-
import org.gradle.util.GradleVersion;
3631

3732
import com.diffplug.common.collect.ImmutableSortedMap;
3833
import com.diffplug.spotless.FileSignature;
@@ -43,7 +38,7 @@
4338
import com.diffplug.spotless.kotlin.KtfmtStep.KtfmtFormattingOptions;
4439
import com.diffplug.spotless.kotlin.KtfmtStep.Style;
4540

46-
public class KotlinExtension extends FormatExtension implements HasBuiltinDelimiterForLicense {
41+
public class KotlinExtension extends FormatExtension implements HasBuiltinDelimiterForLicense, JvmLang {
4742
static final String NAME = "kotlin";
4843

4944
@Inject
@@ -232,33 +227,13 @@ private FormatterStep createStep() {
232227
@Override
233228
protected void setupTask(SpotlessTask task) {
234229
if (target == null) {
235-
if (GradleVersion.current().compareTo(GradleVersion.version("7.1")) >= 0) {
236-
JavaPluginExtension javaPluginExtension = getProject().getExtensions().findByType(JavaPluginExtension.class);
237-
if (javaPluginExtension == null) {
238-
throw new GradleException("You must either specify 'target' manually or apply a kotlin plugin.");
239-
}
240-
FileCollection union = getProject().files();
241-
for (SourceSet sourceSet : javaPluginExtension.getSourceSets()) {
242-
union = union.plus(sourceSet.getAllSource().filter(file -> {
243-
String name = file.getName();
230+
target = getSources(getProject(),
231+
"You must either specify 'target' manually or apply a kotlin plugin.",
232+
SourceSet::getAllSource,
233+
file -> {
234+
final String name = file.getName();
244235
return name.endsWith(".kt") || name.endsWith(".kts");
245-
}));
246-
}
247-
target = union;
248-
} else {
249-
JavaPluginConvention javaPlugin = getProject().getConvention().findPlugin(JavaPluginConvention.class);
250-
if (javaPlugin == null) {
251-
throw new GradleException("You must either specify 'target' manually or apply a kotlin plugin.");
252-
}
253-
FileCollection union = getProject().files();
254-
for (SourceSet sourceSet : javaPlugin.getSourceSets()) {
255-
union = union.plus(sourceSet.getAllSource().filter(file -> {
256-
String name = file.getName();
257-
return name.endsWith(".kt") || name.endsWith(".kts");
258-
}));
259-
}
260-
target = union;
261-
}
236+
});
262237
}
263238
super.setupTask(task);
264239
}

plugin-gradle/src/main/java/com/diffplug/gradle/spotless/ScalaExtension.java

Lines changed: 7 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -21,17 +21,12 @@
2121
import javax.annotation.Nullable;
2222
import javax.inject.Inject;
2323

24-
import org.gradle.api.GradleException;
25-
import org.gradle.api.file.FileCollection;
26-
import org.gradle.api.plugins.JavaPluginConvention;
27-
import org.gradle.api.plugins.JavaPluginExtension;
2824
import org.gradle.api.tasks.SourceSet;
29-
import org.gradle.util.GradleVersion;
3025

3126
import com.diffplug.spotless.FormatterStep;
3227
import com.diffplug.spotless.scala.ScalaFmtStep;
3328

34-
public class ScalaExtension extends FormatExtension {
29+
public class ScalaExtension extends FormatExtension implements JvmLang {
3530
static final String NAME = "scala";
3631

3732
@Inject
@@ -81,33 +76,13 @@ private FormatterStep createStep() {
8176
@Override
8277
protected void setupTask(SpotlessTask task) {
8378
if (target == null) {
84-
if (GradleVersion.current().compareTo(GradleVersion.version("7.1")) >= 0) {
85-
JavaPluginExtension javaPluginExtension = getProject().getExtensions().findByType(JavaPluginExtension.class);
86-
if (javaPluginExtension == null) {
87-
throw new GradleException("You must either specify 'target' manually or apply the 'scala' plugin.");
88-
}
89-
FileCollection union = getProject().files();
90-
for (SourceSet sourceSet : javaPluginExtension.getSourceSets()) {
91-
union = union.plus(sourceSet.getAllSource().filter(file -> {
92-
String name = file.getName();
79+
target = getSources(getProject(),
80+
"You must either specify 'target' manually or apply the 'scala' plugin.",
81+
SourceSet::getAllSource,
82+
file -> {
83+
final String name = file.getName();
9384
return name.endsWith(".scala") || name.endsWith(".sc");
94-
}));
95-
}
96-
target = union;
97-
} else {
98-
JavaPluginConvention javaPlugin = getProject().getConvention().findPlugin(JavaPluginConvention.class);
99-
if (javaPlugin == null) {
100-
throw new GradleException("You must either specify 'target' manually or apply the 'scala' plugin.");
101-
}
102-
FileCollection union = getProject().files();
103-
for (SourceSet sourceSet : javaPlugin.getSourceSets()) {
104-
union = union.plus(sourceSet.getAllSource().filter(file -> {
105-
String name = file.getName();
106-
return name.endsWith(".scala") || name.endsWith(".sc");
107-
}));
108-
}
109-
target = union;
110-
}
85+
});
11186
}
11287
super.setupTask(task);
11388
}

0 commit comments

Comments
 (0)