01 /* Generated By:JJTree: Do not edit this line. ASTLiteral.java */
02
03 package net.sourceforge.pmd.lang.java.ast;
04
05 import java.util.regex.Pattern;
06
07 public class ASTLiteral extends AbstractJavaTypeNode {
08
09 private boolean isInt;
10 private boolean isFloat;
11 private boolean isChar;
12 private boolean isString;
13
14 public ASTLiteral(int id) {
15 super(id);
16 }
17
18 public ASTLiteral(JavaParser p, int id) {
19 super(p, id);
20 }
21
22 /**
23 * Accept the visitor. *
24 */
25 @Override
26 public Object jjtAccept(JavaParserVisitor visitor, Object data) {
27 return visitor.visit(this, data);
28 }
29
30 public void setIntLiteral() {
31 this.isInt = true;
32 }
33
34 public boolean isIntLiteral() {
35 return isInt;
36 }
37
38 public void setFloatLiteral() {
39 this.isFloat = true;
40 }
41
42 public boolean isFloatLiteral() {
43 return isFloat;
44 }
45
46 public void setCharLiteral() {
47 this.isChar = true;
48 }
49
50 public boolean isCharLiteral() {
51 return isChar;
52 }
53
54 public void setStringLiteral() {
55 this.isString = true;
56 }
57
58 public boolean isStringLiteral() {
59 return isString;
60 }
61
62 /**
63 * Returns true if this is a String literal with only one character.
64 * Handles octal and escape characters.
65 *
66 * @return true is this is a String literal with only one character
67 */
68 public boolean isSingleCharacterStringLiteral() {
69 if (isString) {
70 String image = getImage();
71 int length = image.length();
72 if (length == 3) {
73 return true;
74 } else if (image.charAt(1) == '\\') {
75 return SINGLE_CHAR_ESCAPE_PATTERN.matcher(image).matches();
76 }
77 }
78 return false;
79 }
80
81 /**
82 * Pattern used to detect a single escaped character or octal character in a String.
83 */
84 private static final Pattern SINGLE_CHAR_ESCAPE_PATTERN = Pattern
85 .compile("^\"\\\\(([ntbrf\\\\'\\\"])|([0-7][0-7]?)|([0-3][0-7][0-7]))\"");
86
87 }
|