2828import java .util .Set ;
2929import java .util .stream .Collectors ;
3030
31+ import org .checkstyle .autofix .parser .CheckConfiguration ;
3132import org .checkstyle .autofix .parser .CheckstyleViolation ;
3233import org .openrewrite .ExecutionContext ;
3334import org .openrewrite .Recipe ;
3839import org .openrewrite .java .tree .JavaSourceFile ;
3940import org .openrewrite .java .tree .Space ;
4041
41- import com .puppycrawl .tools .checkstyle .api .CheckstyleException ;
42- import com .puppycrawl .tools .checkstyle .api .Configuration ;
43-
4442public class Header extends Recipe {
4543 private static final String HEADER_PROPERTY = "header" ;
4644 private static final String HEADER_FILE_PROPERTY = "headerFile" ;
4745 private static final String IGNORE_LINES_PROPERTY = "ignoreLines" ;
4846 private static final String CHARSET_PROPERTY = "charset" ;
4947
5048 private final List <CheckstyleViolation > violations ;
51- private final Configuration config ;
52- private final Charset charset ;
49+ private final CheckConfiguration config ;
5350
54- public Header (List <CheckstyleViolation > violations , Configuration config , Charset charset ) {
51+ public Header (List <CheckstyleViolation > violations , CheckConfiguration config ) {
5552 this .violations = violations ;
5653 this .config = config ;
57- this .charset = charset ;
5854 }
5955
6056 @ Override
@@ -69,60 +65,44 @@ public String getDescription() {
6965
7066 @ Override
7167 public TreeVisitor <?, ExecutionContext > getVisitor () {
72- final String licenseHeader = extractLicenseHeader (config , charset );
68+ final String licenseHeader = extractLicenseHeader (config );
7369 final List <Integer > ignoreLines = extractIgnoreLines (config );
7470 return new HeaderVisitor (violations , licenseHeader , ignoreLines );
7571 }
7672
77- private static String extractLicenseHeader (Configuration config , Charset charset ) {
73+ private static String extractLicenseHeader (CheckConfiguration config ) {
7874 final String header ;
79- try {
80- if (hasProperty (config , HEADER_PROPERTY )) {
81- header = config .getProperty (HEADER_PROPERTY );
82- }
83- else {
84- final Charset charsetToUse ;
85- if (hasProperty (config , CHARSET_PROPERTY )) {
86- charsetToUse = Charset .forName (config .getProperty (CHARSET_PROPERTY ));
87- }
88- else {
89- charsetToUse = charset ;
90- }
91- final String headerFilePath = config .getProperty (HEADER_FILE_PROPERTY );
75+ if (config .hasProperty (HEADER_PROPERTY )) {
76+ header = config .getProperty (HEADER_PROPERTY );
77+ }
78+ else {
79+ final Charset charsetToUse = Charset .forName (config
80+ .getPropertyOrDefault (CHARSET_PROPERTY , Charset .defaultCharset ().name ()));
81+ final String headerFilePath = config .getProperty (HEADER_FILE_PROPERTY );
82+ try {
9283 header = Files .readString (Path .of (headerFilePath ), charsetToUse );
9384 }
94- }
95- catch (CheckstyleException | IOException exception ) {
96- throw new IllegalArgumentException ("Failed to extract header from config" , exception );
85+ catch (IOException exception ) {
86+ throw new IllegalArgumentException ("Failed to extract header from config" ,
87+ exception );
88+ }
9789 }
9890 return header ;
9991 }
10092
101- private static List <Integer > extractIgnoreLines (Configuration config ) {
93+ private static List <Integer > extractIgnoreLines (CheckConfiguration config ) {
10294 final List <Integer > ignoreLinesList ;
103- try {
104- if (!hasProperty (config , IGNORE_LINES_PROPERTY )) {
105- ignoreLinesList = new ArrayList <>();
106- }
107- else {
108- final String ignoreLines = config .getProperty (IGNORE_LINES_PROPERTY );
109- ignoreLinesList = Arrays .stream (ignoreLines .split ("," ))
110- .map (String ::trim )
111- .map (Integer ::parseInt )
112- .collect (Collectors .toList ());
113- }
95+ if (config .hasProperty (IGNORE_LINES_PROPERTY )) {
96+ ignoreLinesList = Arrays .stream (config .getIntArray (IGNORE_LINES_PROPERTY ))
97+ .boxed ()
98+ .toList ();
11499 }
115- catch (CheckstyleException exception ) {
116- throw new IllegalArgumentException (
117- "Failed to extract ignore lines from config" , exception );
100+ else {
101+ ignoreLinesList = new ArrayList <>();
118102 }
119103 return ignoreLinesList ;
120104 }
121105
122- private static boolean hasProperty (Configuration config , String propertyName ) {
123- return Arrays .asList (config .getPropertyNames ()).contains (propertyName );
124- }
125-
126106 private static class HeaderVisitor extends JavaIsoVisitor <ExecutionContext > {
127107 private final List <CheckstyleViolation > violations ;
128108 private final String licenseHeader ;
@@ -146,7 +126,7 @@ public J visit(Tree tree, ExecutionContext ctx) {
146126 if (hasViolation (filePath )) {
147127 final String currentHeader = extractCurrentHeader (sourceFile );
148128 final String fixedHeader = fixHeaderLines (licenseHeader ,
149- currentHeader , ignoreLines );
129+ currentHeader , ignoreLines );
150130
151131 sourceFile = sourceFile .withPrefix (
152132 Space .format (fixedHeader + System .lineSeparator ()));
0 commit comments