Skip to content

Commit bd38e49

Browse files
Using a config object instead of extension
1 parent 1d2a827 commit bd38e49

File tree

7 files changed

+46
-129
lines changed

7 files changed

+46
-129
lines changed

plugin-gradle/README.md

+4-11
Original file line numberDiff line numberDiff line change
@@ -70,10 +70,7 @@ spotless {
7070
7171
// Everything before the first #include or #pragma will
7272
// be replaced with whatever is in `spotless.license.cpp`
73-
licenseHeader {
74-
headerFile 'spotless.license.cpp'
75-
delimiter '#'
76-
}
73+
licenseHeaderFile 'spotless.license.cpp', '#'
7774
}
7875
}
7976
```
@@ -314,18 +311,14 @@ The `licenseHeader` and `licenseHeaderFile` steps will generate license headers
314311
`/* Licensed under Apache-2.0 1990-2003. */`
315312
* the `$YEAR` token is otherwise missing
316313

317-
The separator for the year range defaults to the hyphen character, e.g `1990-2003`, but can be customized with the `yearSeparator` property using the block configuration syntax.
314+
The separator for the year range defaults to the hyphen character, e.g `1990-2003`, but can be customized with the `yearSeparator` property.
315+
318316
For instance, the following configuration treats `1990, 2003` as a valid year range.
319317

320318
```gradle
321319
spotless {
322320
format java {
323-
licenseHeader {
324-
header 'Licensed under Apache-2.0 $YEAR'
325-
headerFile 'path-to-file' // header and headerFile are exclusive
326-
yearSeparator ', '
327-
delimiter // Defaults to 'package' for Java, but can be customized here
328-
}
321+
licenseHeader(''Licensed under Apache-2.0 $YEAR').yearSeparator(', ')
329322
}
330323
}
331324
```

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

+13-68
Original file line numberDiff line numberDiff line change
@@ -31,11 +31,9 @@
3131

3232
import javax.annotation.Nullable;
3333

34-
import org.gradle.api.Action;
3534
import org.gradle.api.GradleException;
3635
import org.gradle.api.Project;
3736
import org.gradle.api.file.FileCollection;
38-
import org.gradle.util.ConfigureUtil;
3937

4038
import com.diffplug.spotless.FormatExceptionPolicyStrict;
4139
import com.diffplug.spotless.FormatterFunc;
@@ -347,93 +345,40 @@ public void indentWithTabs() {
347345
indentWithTabs(4);
348346
}
349347

350-
LicenseHeaderExtension licenseHeaderExtension;
348+
LicenseHeaderConfig licenseHeaderConfig;
351349

352350
/**
353-
* Syntactic sugar which allows
354-
*
355-
* <code>
356-
* licenseHeader {
357-
* header 'header-string'
358-
* delimiter 'package'
359-
* }
360-
* </code>
361-
*
362-
* to be written as
363-
* <code>
364-
* licenseHeader 'header-string', 'package'
365-
* </code>
366-
*
367-
* Moreover language specific extensions can overload this method to pre-define the delimiter,
368-
* allowing the even simpler
369-
*
370-
* <code>
371-
* licenseHeader 'header-string'
372-
* </code>
373-
*
374351
* @param licenseHeader
375352
* Content that should be at the top of every file.
376353
* @param delimiter
377354
* Spotless will look for a line that starts with this to know what the "top" is.
378355
*/
379-
public void licenseHeader(String licenseHeader, String delimiter) {
380-
licenseHeader(extension -> extension.header(licenseHeader), delimiter);
356+
public LicenseHeaderConfig licenseHeader(String licenseHeader, String delimiter) {
357+
return getOrCreateLicenseHeader(delimiter).header(licenseHeader);
381358
}
382359

383360
/**
384-
* Syntactic sugar which allows
385-
*
386-
* <code>
387-
* licenseHeaderFile {
388-
* headerFile 'path-to-file'
389-
* delimiter 'package'
390-
* }
391-
* </code>
392-
*
393-
* to be written as
394-
*
395-
* <code>
396-
* licenseHeaderFile 'path-to-file', 'package'
397-
* </code>
398-
*
399-
* Moreover language specific extensions can overload this method to pre-define the delimiter,
400-
* allowing the even simpler
401-
*
402-
* <code>
403-
* licenseHeaderFile 'path-to-file'
404-
* </code>
405-
*
406361
* @param licenseHeaderFile
407362
* Content that should be at the top of every file.
408363
* @param delimiter
409364
* Spotless will look for a line that starts with this to know what the "top" is.
410365
*/
411-
public void licenseHeaderFile(Object licenseHeaderFile, String delimiter) {
412-
licenseHeader(extension -> extension.headerFile(licenseHeaderFile), delimiter);
413-
}
414-
415-
/**
416-
* Configures the license header extension.
417-
*
418-
* @param delimiter
419-
* Spotless will look for a line that starts with this to know what the "top" is.
420-
*/
421-
public void licenseHeader(Closure closure, String delimiter) {
422-
licenseHeader(ConfigureUtil.configureUsing(closure), delimiter);
366+
public LicenseHeaderConfig licenseHeaderFile(Object licenseHeaderFile, String delimiter) {
367+
return getOrCreateLicenseHeader(delimiter).headerFile(licenseHeaderFile);
423368
}
424369

425370
/**
426-
* Configures the license header extension.
371+
* Get or create the license header configuration.
427372
*
428373
* @param delimiter
429374
* Spotless will look for a line that starts with this to know what the "top" is.
430375
*/
431-
public void licenseHeader(Action<LicenseHeaderExtension> closure, String delimiter) {
432-
requireNonNull(closure);
433-
if (licenseHeaderExtension == null) {
434-
licenseHeaderExtension = new LicenseHeaderExtension(this, delimiter);
376+
private LicenseHeaderConfig getOrCreateLicenseHeader(String delimiter) {
377+
requireNonNull(delimiter);
378+
if (licenseHeaderConfig == null) {
379+
licenseHeaderConfig = new LicenseHeaderConfig(delimiter);
435380
}
436-
closure.execute(licenseHeaderExtension);
381+
return licenseHeaderConfig;
437382
}
438383

439384
/** Sets up a format task according to the values in this extension. */
@@ -443,8 +388,8 @@ protected void setupTask(SpotlessTask task) {
443388
task.setExceptionPolicy(exceptionPolicy);
444389
task.setTarget(target);
445390
task.setSteps(steps);
446-
if (licenseHeaderExtension != null) {
447-
licenseHeaderExtension.setupTask(task);
391+
if (licenseHeaderConfig != null) {
392+
licenseHeaderConfig.setupTask(this, task);
448393
}
449394
task.setLineEndingsPolicy(getLineEndings().createPolicy(getProject().getProjectDir(), () -> task.target));
450395
}

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

+4-10
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,6 @@
3636
import com.diffplug.spotless.generic.LicenseHeaderStep;
3737
import com.diffplug.spotless.java.ImportOrderStep;
3838

39-
import groovy.lang.Closure;
40-
4139
public class GroovyExtension extends FormatExtension {
4240
static final String NAME = "groovy";
4341

@@ -57,16 +55,12 @@ public void excludeJava(boolean excludeJava) {
5755
this.excludeJava = excludeJava;
5856
}
5957

60-
public void licenseHeader(String licenseHeader) {
61-
licenseHeader(licenseHeader, JavaExtension.LICENSE_HEADER_DELIMITER);
62-
}
63-
64-
public void licenseHeaderFile(Object licenseHeaderFile) {
65-
licenseHeaderFile(licenseHeaderFile, JavaExtension.LICENSE_HEADER_DELIMITER);
58+
public LicenseHeaderConfig licenseHeader(String licenseHeader) {
59+
return licenseHeader(licenseHeader, JavaExtension.LICENSE_HEADER_DELIMITER);
6660
}
6761

68-
public void licenseHeader(Closure closure) {
69-
licenseHeader(closure, JavaExtension.LICENSE_HEADER_DELIMITER);
62+
public LicenseHeaderConfig licenseHeaderFile(Object licenseHeaderFile) {
63+
return licenseHeaderFile(licenseHeaderFile, JavaExtension.LICENSE_HEADER_DELIMITER);
7064
}
7165

7266
/** Method interface has been changed to

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

+4-10
Original file line numberDiff line numberDiff line change
@@ -35,8 +35,6 @@
3535
import com.diffplug.spotless.java.ImportOrderStep;
3636
import com.diffplug.spotless.java.RemoveUnusedImportsStep;
3737

38-
import groovy.lang.Closure;
39-
4038
public class JavaExtension extends FormatExtension {
4139
static final String NAME = "java";
4240

@@ -48,16 +46,12 @@ public JavaExtension(SpotlessExtension rootExtension) {
4846
// testlib/src/test/java/com/diffplug/spotless/generic/LicenseHeaderStepTest.java as well
4947
static final String LICENSE_HEADER_DELIMITER = "package ";
5048

51-
public void licenseHeader(String licenseHeader) {
52-
licenseHeader(licenseHeader, LICENSE_HEADER_DELIMITER);
53-
}
54-
55-
public void licenseHeaderFile(Object licenseHeaderFile) {
56-
licenseHeaderFile(licenseHeaderFile, LICENSE_HEADER_DELIMITER);
49+
public LicenseHeaderConfig licenseHeader(String licenseHeader) {
50+
return licenseHeader(licenseHeader, LICENSE_HEADER_DELIMITER);
5751
}
5852

59-
public void licenseHeader(Closure closure) {
60-
licenseHeader(closure, LICENSE_HEADER_DELIMITER);
53+
public LicenseHeaderConfig licenseHeaderFile(Object licenseHeaderFile) {
54+
return licenseHeaderFile(licenseHeaderFile, LICENSE_HEADER_DELIMITER);
6155
}
6256

6357
/** Method interface has been changed to

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

+4-10
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,6 @@
2424

2525
import com.diffplug.spotless.kotlin.KtLintStep;
2626

27-
import groovy.lang.Closure;
28-
2927
public class KotlinExtension extends FormatExtension {
3028
// '^' is prepended to the regex in LICENSE_HEADER_DELIMITER later in FormatExtension.licenseHeader(String, String)
3129
private static final String LICENSE_HEADER_DELIMITER = "(package |@file)";
@@ -35,16 +33,12 @@ public KotlinExtension(SpotlessExtension rootExtension) {
3533
super(rootExtension);
3634
}
3735

38-
public void licenseHeader(String licenseHeader) {
39-
licenseHeader(licenseHeader, LICENSE_HEADER_DELIMITER);
40-
}
41-
42-
public void licenseHeaderFile(Object licenseHeaderFile) {
43-
licenseHeaderFile(licenseHeaderFile, LICENSE_HEADER_DELIMITER);
36+
public LicenseHeaderConfig licenseHeader(String licenseHeader) {
37+
return licenseHeader(licenseHeader, LICENSE_HEADER_DELIMITER);
4438
}
4539

46-
public void licenseHeader(Closure closure) {
47-
licenseHeader(closure, LICENSE_HEADER_DELIMITER);
40+
public LicenseHeaderConfig licenseHeaderFile(Object licenseHeaderFile) {
41+
return licenseHeaderFile(licenseHeaderFile, LICENSE_HEADER_DELIMITER);
4842
}
4943

5044
/** Adds the specified version of [ktlint](https://github.com/shyiko/ktlint). */

plugin-gradle/src/main/java/com/diffplug/gradle/spotless/LicenseHeaderExtension.java plugin-gradle/src/main/java/com/diffplug/gradle/spotless/LicenseHeaderConfig.java

+15-14
Original file line numberDiff line numberDiff line change
@@ -21,66 +21,67 @@
2121

2222
import com.diffplug.spotless.generic.LicenseHeaderStep;
2323

24-
public class LicenseHeaderExtension {
25-
26-
final FormatExtension parent;
24+
public class LicenseHeaderConfig {
2725

2826
String header;
2927
Object headerFile;
3028
String delimiter;
3129

3230
static final String DEFAULT_LICENSE_YEAR_DELIMITER = "-";
33-
String licenceyearSeparator = DEFAULT_LICENSE_YEAR_DELIMITER;
31+
String yearSeparator = DEFAULT_LICENSE_YEAR_DELIMITER;
3432

35-
public LicenseHeaderExtension(FormatExtension parent, String delimiter) {
36-
this.parent = Objects.requireNonNull(parent);
33+
public LicenseHeaderConfig(String delimiter) {
3734
this.delimiter = Objects.requireNonNull(delimiter, "delimiter");
3835
}
3936

4037
/**
4138
* @param header
4239
* Content that should be at the top of every file.
4340
*/
44-
public void header(String header) {
41+
public LicenseHeaderConfig header(String header) {
4542
if (headerFile != null) {
4643
throw new GradleException("cannot set both licenseHeader and licenseHeaderFile");
4744
}
4845
this.header = header;
46+
return this;
4947
}
5048

5149
/**
5250
* @param headerFile
5351
* Content that should be at the top of every file.
5452
*/
55-
public void headerFile(Object headerFile) {
53+
public LicenseHeaderConfig headerFile(Object headerFile) {
5654
if (header != null) {
5755
throw new GradleException("cannot set both header and headerFile");
5856
}
5957
this.headerFile = Objects.requireNonNull(headerFile, "headerFile");
58+
return this;
6059
}
6160

6261
/**
6362
* @param delimiter
6463
* Spotless will look for a line that starts with this to know what the "top" is.
6564
*/
66-
public void delimiter(String delimiter) {
65+
public LicenseHeaderConfig delimiter(String delimiter) {
6766
this.delimiter = Objects.requireNonNull(delimiter, "delimiter");
67+
return this;
6868
}
6969

7070
/**
7171
* @param yearSeparator
7272
* The characters used to separate the first and last years in multi years patterns.
7373
*/
74-
public void yearSeparator(String yearSeparator) {
75-
this.licenceyearSeparator = Objects.requireNonNull(yearSeparator, "yearSeparator");
74+
public LicenseHeaderConfig yearSeparator(String yearSeparator) {
75+
this.yearSeparator = Objects.requireNonNull(yearSeparator, "yearSeparator");
76+
return this;
7677
}
7778

78-
public void setupTask(SpotlessTask task) {
79+
void setupTask(FormatExtension parent, SpotlessTask task) {
7980
if (headerFile != null) {
8081
parent.addStep(LicenseHeaderStep.createFromFile(parent.getProject().file(headerFile), parent.getEncoding(), delimiter,
81-
licenceyearSeparator));
82+
yearSeparator));
8283
} else if (header != null) {
83-
parent.addStep(LicenseHeaderStep.createFromHeader(header, delimiter, licenceyearSeparator));
84+
parent.addStep(LicenseHeaderStep.createFromHeader(header, delimiter, yearSeparator));
8485
}
8586
}
8687
}

plugin-gradle/src/test/java/com/diffplug/gradle/spotless/KotlinExtensionTest.java

+2-6
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,7 @@ public void testWithCustomHeaderSeparator() throws IOException {
102102
}
103103

104104
@Test
105-
public void testWithHeaderExtension() throws IOException {
105+
public void testWithYearSeparator() throws IOException {
106106
write("build.gradle",
107107
"plugins {",
108108
" id 'nebula.kotlin' version '1.0.6'",
@@ -111,11 +111,7 @@ public void testWithHeaderExtension() throws IOException {
111111
"repositories { mavenCentral() }",
112112
"spotless {",
113113
" kotlin {",
114-
" licenseHeader {",
115-
" licenseHeader('" + HEADER + "')",
116-
" delimiter('@file')",
117-
" yearSeparator('-')",
118-
" }",
114+
" licenseHeader('" + HEADER + "').yearSeparator('-')",
119115
" ktlint()",
120116
" }",
121117
"}");

0 commit comments

Comments
 (0)