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.site;
21
22 import java.net.URLEncoder;
23 import java.nio.charset.StandardCharsets;
24 import java.util.Set;
25
26 import org.apache.maven.doxia.macro.AbstractMacro;
27 import org.apache.maven.doxia.macro.Macro;
28 import org.apache.maven.doxia.macro.MacroExecutionException;
29 import org.apache.maven.doxia.macro.MacroRequest;
30 import org.apache.maven.doxia.module.xdoc.XdocSink;
31 import org.apache.maven.doxia.sink.Sink;
32 import org.codehaus.plexus.component.annotations.Component;
33
34
35
36
37 @Component(role = Macro.class, hint = "violation-messages")
38 public class ViolationMessagesMacro extends AbstractMacro {
39 @Override
40 public void execute(Sink sink, MacroRequest request) throws MacroExecutionException {
41
42 if (!(sink instanceof XdocSink xdocSink)) {
43 throw new MacroExecutionException("Expected Sink to be an XdocSink.");
44 }
45 final String checkName = (String) request.getParameter("checkName");
46 final Object instance = SiteUtil.getModuleInstance(checkName);
47 final Class<?> clss = instance.getClass();
48 final Set<String> messageKeys = SiteUtil.getMessageKeys(clss);
49 createListOfMessages(xdocSink, clss, messageKeys);
50 }
51
52
53
54
55
56
57
58
59 private static void createListOfMessages(
60 XdocSink sink, Class<?> clss, Set<String> messageKeys) {
61 final String indentLevel8 = SiteUtil.getNewlineAndIndentSpaces(8);
62
63
64
65
66 sink.setInsertNewline(false);
67 sink.list();
68 sink.setInsertNewline(true);
69
70 for (String messageKey : messageKeys) {
71 createListItem(sink, clss, messageKey);
72 }
73 sink.rawText(indentLevel8);
74 sink.list_();
75 }
76
77
78
79
80
81
82
83
84 private static void createListItem(XdocSink sink, Class<?> clss, String messageKey) {
85 final String messageKeyUrl = constructMessageKeyUrl(clss, messageKey);
86 final String indentLevel10 = SiteUtil.getNewlineAndIndentSpaces(10);
87 final String indentLevel12 = SiteUtil.getNewlineAndIndentSpaces(12);
88 final String indentLevel14 = SiteUtil.getNewlineAndIndentSpaces(14);
89
90 sink.rawText(indentLevel10);
91
92
93
94 sink.setInsertNewline(false);
95 sink.listItem();
96 sink.setInsertNewline(true);
97
98
99 sink.rawText(indentLevel12);
100 sink.link(messageKeyUrl);
101
102 sink.rawText(indentLevel14);
103 sink.rawText(messageKey);
104
105
106 sink.rawText(indentLevel12);
107 sink.link_();
108 sink.rawText(indentLevel10);
109 sink.listItem_();
110 }
111
112
113
114
115
116
117
118
119 private static String constructMessageKeyUrl(Class<?> clss, String messageKey) {
120 final String query = "path:src/main/resources/"
121 + clss.getPackage().getName().replace('.', '/')
122 + " path:**/messages*.properties repo:checkstyle/checkstyle \""
123 + messageKey + "\"";
124
125 return "https://github.com/search?q="
126 + URLEncoder.encode(query, StandardCharsets.UTF_8);
127 }
128 }