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.util.List;
25 import java.util.Locale;
26 import java.util.regex.Matcher;
27 import java.util.regex.Pattern;
28 import java.util.stream.Collectors;
29
30 import com.puppycrawl.tools.checkstyle.api.CheckstyleException;
31 import com.puppycrawl.tools.checkstyle.api.DetailAST;
32 import com.puppycrawl.tools.checkstyle.api.FileText;
33 import com.puppycrawl.tools.checkstyle.xpath.XpathQueryGenerator;
34
35
36
37
38
39 public final class SuppressionsStringPrinter {
40
41
42 private static final Pattern VALID_SUPPRESSION_LINE_COLUMN_NUMBER_REGEX =
43 Pattern.compile("^(\\d+):(\\d+)$");
44
45
46 private static final String LINE_SEPARATOR = System.getProperty("line.separator");
47
48
49 private SuppressionsStringPrinter() {
50
51 }
52
53
54
55
56
57
58
59
60
61
62
63
64 public static String printSuppressions(File file, String suppressionLineColumnNumber,
65 int tabWidth) throws IOException, CheckstyleException {
66 final Matcher matcher =
67 VALID_SUPPRESSION_LINE_COLUMN_NUMBER_REGEX.matcher(suppressionLineColumnNumber);
68 if (!matcher.matches()) {
69 final String exceptionMsg = String.format(Locale.ROOT,
70 "%s does not match valid format 'line:column'.",
71 suppressionLineColumnNumber);
72 throw new IllegalStateException(exceptionMsg);
73 }
74
75 final FileText fileText = new FileText(file, System.getProperty("file.encoding"));
76 final DetailAST detailAST =
77 JavaParser.parseFileText(fileText, JavaParser.Options.WITH_COMMENTS);
78 final int lineNumber = Integer.parseInt(matcher.group(1));
79 final int columnNumber = Integer.parseInt(matcher.group(2));
80 return generate(fileText, detailAST, lineNumber, columnNumber, tabWidth);
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 }