1 package org.apache.maven.plugins.checkstyle;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 import java.util.ArrayList;
23 import java.util.List;
24
25 import org.codehaus.plexus.util.StringUtils;
26
27 import com.puppycrawl.tools.checkstyle.api.AuditEvent;
28
29
30
31
32
33
34
35 public final class RuleUtil
36 {
37 private RuleUtil()
38 {
39
40 }
41
42 private static final String CHECKSTYLE_PACKAGE = "com.puppycrawl.tools.checkstyle.checks";
43
44
45
46
47
48
49
50 public static String getName( AuditEvent event )
51 {
52 return getName( event.getSourceName() );
53 }
54
55
56
57
58
59
60 public static String getName( String eventSrcName )
61 {
62 if ( eventSrcName == null )
63 {
64 return null;
65 }
66
67 if ( eventSrcName.endsWith( "Check" ) )
68 {
69 eventSrcName = eventSrcName.substring( 0, eventSrcName.length() - 5 );
70 }
71
72 return eventSrcName.substring( eventSrcName.lastIndexOf( '.' ) + 1 );
73 }
74
75
76
77
78
79
80
81 public static String getCategory( AuditEvent event )
82 {
83 return getCategory( event.getSourceName() );
84 }
85
86
87
88
89
90
91
92 public static String getCategory( String eventSrcName )
93 {
94 if ( eventSrcName == null )
95 {
96 return null;
97 }
98
99 int end = eventSrcName.lastIndexOf( '.' );
100 eventSrcName = end == -1 ? eventSrcName : eventSrcName.substring( 0, end );
101
102 if ( CHECKSTYLE_PACKAGE.equals( eventSrcName ) )
103 {
104 return "misc";
105 }
106 else if ( !eventSrcName.startsWith( CHECKSTYLE_PACKAGE ) )
107 {
108 return "extension";
109 }
110
111 return eventSrcName.substring( eventSrcName.lastIndexOf( '.' ) + 1 );
112 }
113
114 public static List<Matcher> parseMatchers( String[] specs )
115 {
116 List<Matcher> matchers = new ArrayList<>();
117 for ( String spec : specs )
118 {
119 if ( StringUtils.isBlank( spec ) )
120 {
121 continue;
122 }
123 spec = spec.trim();
124 Matcher matcher;
125 if ( Character.isUpperCase( spec.charAt( 0 ) ) )
126 {
127
128 matcher = new RuleMatcher( spec );
129 }
130 else if ( "misc".equals( spec ) )
131 {
132
133 matcher = new PackageMatcher( CHECKSTYLE_PACKAGE );
134 }
135 else if ( "extension".equals( spec ) )
136 {
137
138 matcher = new ExtensionMatcher();
139 }
140 else if ( !spec.contains( "." ) )
141 {
142 matcher = new PackageMatcher( CHECKSTYLE_PACKAGE + '.' + spec );
143 }
144 else
145 {
146
147 matcher = new PackageMatcher( spec );
148 }
149 matchers.add( matcher );
150 }
151 return matchers;
152 }
153
154
155
156
157 public interface Matcher
158 {
159
160
161
162
163
164 boolean match( String eventSrcName );
165 }
166
167 private static class RuleMatcher
168 implements Matcher
169 {
170 private final String rule;
171
172 RuleMatcher( String rule )
173 {
174 this.rule = rule;
175 }
176
177 public boolean match( String eventSrcName )
178 {
179 return rule.equals( getName( eventSrcName ) );
180 }
181 }
182
183 private static class PackageMatcher
184 implements Matcher
185 {
186 private final String packageName;
187
188 PackageMatcher( String packageName )
189 {
190 this.packageName = packageName;
191 }
192
193 public boolean match( String eventSrcName )
194 {
195 return eventSrcName.startsWith( packageName )
196 && !eventSrcName.substring( packageName.length() + 1 ).contains( "." );
197 }
198 }
199
200
201
202
203 private static class ExtensionMatcher
204 implements Matcher
205 {
206 public boolean match( String eventSrcName )
207 {
208 return !eventSrcName.startsWith( CHECKSTYLE_PACKAGE );
209 }
210 }
211 }