1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 package com.puppycrawl.tools.checkstyle;
21
22 import java.io.File;
23 import java.io.IOException;
24 import java.nio.charset.StandardCharsets;
25 import java.util.List;
26 import java.util.Locale;
27 import java.util.regex.Matcher;
28 import java.util.regex.Pattern;
29 import java.util.stream.Collectors;
30
31 import com.puppycrawl.tools.checkstyle.api.CheckstyleException;
32 import com.puppycrawl.tools.checkstyle.api.DetailAST;
33 import com.puppycrawl.tools.checkstyle.api.FileText;
34 import com.puppycrawl.tools.checkstyle.xpath.XpathQueryGenerator;
35
36
37
38
39
40 public final class SuppressionsStringPrinter {
41
42
43 private static final Pattern VALID_SUPPRESSION_LINE_COLUMN_NUMBER_REGEX =
44 Pattern.compile("^([0-9]+):([0-9]+)$");
45
46
47 private static final String LINE_SEPARATOR = System.getProperty("line.separator");
48
49
50 private SuppressionsStringPrinter() {
51
52 }
53
54
55
56
57
58
59
60
61
62
63 public static String printSuppressions(File file, String suppressionLineColumnNumber,
64 int tabWidth) throws IOException, CheckstyleException {
65 final Matcher matcher =
66 VALID_SUPPRESSION_LINE_COLUMN_NUMBER_REGEX.matcher(suppressionLineColumnNumber);
67 if (matcher.matches()) {
68 final FileText fileText = new FileText(file.getAbsoluteFile(),
69 System.getProperty("file.encoding", StandardCharsets.UTF_8.name()));
70 final DetailAST detailAST =
71 JavaParser.parseFileText(fileText, JavaParser.Options.WITH_COMMENTS);
72 final int lineNumber = Integer.parseInt(matcher.group(1));
73 final int columnNumber = Integer.parseInt(matcher.group(2));
74 return generate(fileText, detailAST, lineNumber, columnNumber, tabWidth);
75 }
76 else {
77 final String exceptionMsg = String.format(Locale.ROOT,
78 "%s does not match valid format 'line:column'.",
79 suppressionLineColumnNumber);
80 throw new IllegalStateException(exceptionMsg);
81 }
82 }
83
84
85
86
87
88
89
90
91
92
93 private static String generate(FileText fileText, DetailAST detailAST, int lineNumber,
94 int columnNumber, int tabWidth) {
95 final XpathQueryGenerator queryGenerator =
96 new XpathQueryGenerator(detailAST, lineNumber, columnNumber, fileText,
97 tabWidth);
98 final List<String> suppressions = queryGenerator.generate();
99 return suppressions.stream().collect(Collectors.joining(LINE_SEPARATOR,
100 "", LINE_SEPARATOR));
101 }
102 }