25
25
import java .util .regex .Matcher ;
26
26
import java .util .regex .Pattern ;
27
27
28
+ import javax .annotation .Nullable ;
29
+
28
30
import com .diffplug .spotless .FormatterStep ;
29
31
import com .diffplug .spotless .LineEnding ;
30
32
@@ -33,6 +35,7 @@ public final class LicenseHeaderStep implements Serializable {
33
35
private static final long serialVersionUID = 1L ;
34
36
35
37
private static final String NAME = "licenseHeader" ;
38
+ private static final String DEFAULT_YEAR_DELIMITER = "-" ;
36
39
37
40
private final String licenseHeader ;
38
41
private final Pattern delimiterPattern ;
@@ -44,10 +47,15 @@ public final class LicenseHeaderStep implements Serializable {
44
47
45
48
/** Creates a FormatterStep which forces the start of each file to match a license header. */
46
49
public static FormatterStep createFromHeader (String licenseHeader , String delimiter ) {
50
+ return createFromHeader (licenseHeader , delimiter , null );
51
+ }
52
+
53
+ public static FormatterStep createFromHeader (String licenseHeader , String delimiter ,
54
+ @ Nullable String yearSeparator ) {
47
55
Objects .requireNonNull (licenseHeader , "licenseHeader" );
48
56
Objects .requireNonNull (delimiter , "delimiter" );
49
57
return FormatterStep .create (LicenseHeaderStep .NAME ,
50
- new LicenseHeaderStep (licenseHeader , delimiter ),
58
+ new LicenseHeaderStep (licenseHeader , delimiter , yearSeparator ),
51
59
step -> step ::format );
52
60
}
53
61
@@ -56,20 +64,36 @@ public static FormatterStep createFromHeader(String licenseHeader, String delimi
56
64
* contained in the given file.
57
65
*/
58
66
public static FormatterStep createFromFile (File licenseHeaderFile , Charset encoding , String delimiter ) {
67
+ return createFromFile (licenseHeaderFile , encoding , delimiter , null );
68
+ }
69
+
70
+ /**
71
+ * Creates a FormatterStep which forces the start of each file to match the license header
72
+ * contained in the given file.
73
+ */
74
+ public static FormatterStep createFromFile (File licenseHeaderFile , Charset encoding , String delimiter ,
75
+ @ Nullable String yearSeparator ) {
59
76
Objects .requireNonNull (licenseHeaderFile , "licenseHeaderFile" );
60
77
Objects .requireNonNull (encoding , "encoding" );
61
78
Objects .requireNonNull (delimiter , "delimiter" );
62
79
return FormatterStep .createLazy (LicenseHeaderStep .NAME ,
63
- () -> new LicenseHeaderStep (licenseHeaderFile , encoding , delimiter ),
80
+ () -> new LicenseHeaderStep (licenseHeaderFile , encoding , delimiter , yearSeparator ),
64
81
step -> step ::format );
65
82
}
66
83
67
84
public static String name () {
68
85
return NAME ;
69
86
}
70
87
88
+ public static String defaultYearDelimiter () {
89
+ return DEFAULT_YEAR_DELIMITER ;
90
+ }
91
+
71
92
/** The license that we'd like enforced. */
72
- private LicenseHeaderStep (String licenseHeader , String delimiter ) {
93
+ private LicenseHeaderStep (String licenseHeader , String delimiter , @ Nullable String yearSeparator ) {
94
+ if (yearSeparator == null ) {
95
+ yearSeparator = defaultYearDelimiter ();
96
+ }
73
97
if (delimiter .contains ("\n " )) {
74
98
throw new IllegalArgumentException ("The delimiter must not contain any newlines." );
75
99
}
@@ -86,13 +110,13 @@ private LicenseHeaderStep(String licenseHeader, String delimiter) {
86
110
this .licenseHeaderBeforeYearToken = licenseHeader .substring (0 , yearTokenIndex );
87
111
this .licenseHeaderAfterYearToken = licenseHeader .substring (yearTokenIndex + 5 , licenseHeader .length ());
88
112
this .licenseHeaderWithYearTokenReplaced = licenseHeader .replace ("$YEAR" , String .valueOf (YearMonth .now ().getYear ()));
89
- this .yearMatcherPattern = Pattern .compile ("[0-9]{4}(- [0-9]{4})?" );
113
+ this .yearMatcherPattern = Pattern .compile ("[0-9]{4}(" + Pattern . quote ( yearSeparator ) + " [0-9]{4})?" );
90
114
}
91
115
}
92
116
93
117
/** Reads the license file from the given file. */
94
- private LicenseHeaderStep (File licenseFile , Charset encoding , String delimiter ) throws IOException {
95
- this (new String (Files .readAllBytes (licenseFile .toPath ()), encoding ), delimiter );
118
+ private LicenseHeaderStep (File licenseFile , Charset encoding , String delimiter , @ Nullable String yearSeparator ) throws IOException {
119
+ this (new String (Files .readAllBytes (licenseFile .toPath ()), encoding ), delimiter , yearSeparator );
96
120
}
97
121
98
122
/** Formats the given string. */
0 commit comments