AvoidUsingOctalValuesRule.java
01 package net.sourceforge.pmd.lang.java.rule.basic;
02 
03 import java.util.regex.Pattern;
04 
05 import net.sourceforge.pmd.lang.java.ast.ASTLiteral;
06 import net.sourceforge.pmd.lang.java.rule.AbstractJavaRule;
07 import net.sourceforge.pmd.lang.rule.properties.BooleanProperty;
08 
09 public class AvoidUsingOctalValuesRule extends AbstractJavaRule {
10 
11     public static final Pattern OCTAL_PATTERN = Pattern.compile("0[0-7]{2,}[lL]?");
12 
13     public static final Pattern STRICT_OCTAL_PATTERN = Pattern.compile("0[0-7]+[lL]?");
14 
15     private static final BooleanProperty STRICT_METHODS_DESCRIPTOR = new BooleanProperty(
16             "strict""Detect violations between 00 and 07", false, 1.0f
17             );
18 
19     public AvoidUsingOctalValuesRule() {
20   definePropertyDescriptor(STRICT_METHODS_DESCRIPTOR);
21     }
22 
23     public Object visit(ASTLiteral node, Object data) {
24         boolean strict = getProperty(STRICT_METHODS_DESCRIPTOR);
25         Pattern p = strict ? STRICT_OCTAL_PATTERN : OCTAL_PATTERN;
26 
27         String img = node.getImage();
28         if (img != null && p.matcher(img).matches()) {
29             addViolation(data, node);
30         }
31 
32         return data;
33     }
34 }