1
2
3
4 package net.sourceforge.pmd.lang.java.rule;
5
6 import java.util.regex.Pattern;
7
8 import net.sourceforge.pmd.lang.java.ast.ASTLiteral;
9 import net.sourceforge.pmd.lang.java.rule.regex.RegexHelper;
10 import net.sourceforge.pmd.lang.rule.properties.StringProperty;
11
12
13
14
15
16
17
18
19
20 public class GenericLiteralCheckerRule extends AbstractJavaRule {
21
22 private Pattern pattern;
23
24 private static final String PROPERTY_NAME = "regexPattern";
25
26 private static final StringProperty REGEX_PROPERTY = new StringProperty(PROPERTY_NAME,"Regular expression","", 1.0f);
27
28 public GenericLiteralCheckerRule() {
29 definePropertyDescriptor(REGEX_PROPERTY);
30 }
31
32 private void init() {
33 if (pattern == null) {
34
35 String stringPattern = super.getProperty(REGEX_PROPERTY);
36
37 if ( stringPattern != null && stringPattern.length() > 0 ) {
38 pattern = Pattern.compile(stringPattern);
39 } else {
40 throw new IllegalArgumentException("Must provide a value for the '" + PROPERTY_NAME + "' property.");
41 }
42 }
43 }
44
45
46
47
48 @Override
49 public Object visit(ASTLiteral node, Object data) {
50 init();
51 String image = node.getImage();
52 if ( image != null && image.length() > 0 && RegexHelper.isMatch(this.pattern,image) ) {
53 addViolation(data, node);
54 }
55 return data;
56 }
57 }