1 package net.sourceforge.pmd.rules.basic;
2
3 import java.util.regex.Pattern;
4
5 import net.sourceforge.pmd.AbstractRule;
6 import net.sourceforge.pmd.PropertyDescriptor;
7 import net.sourceforge.pmd.ast.ASTLiteral;
8 import net.sourceforge.pmd.properties.BooleanProperty;
9
10 public class AvoidUsingOctalValues extends AbstractRule {
11
12 public static final Pattern OCTAL_PATTERN = Pattern.compile("0[0-7]{2,}[lL]?");
13
14 public static final Pattern STRICT_OCTAL_PATTERN = Pattern.compile("0[0-7]+[lL]?");
15
16 private static final PropertyDescriptor strictMethodsDescriptor = new BooleanProperty(
17 "strict", "Detect violations for 00 to 07.", false, 1.0f
18 );
19
20 public Object visit(ASTLiteral node, Object data) {
21 boolean strict = getBooleanProperty(strictMethodsDescriptor);
22 Pattern p = strict?STRICT_OCTAL_PATTERN:OCTAL_PATTERN;
23
24 String img = node.getImage();
25 if (img != null && p.matcher(img).matches()) {
26 addViolation(data, node);
27 }
28
29 return data;
30 }
31
32 }