VariableNameDeclaration xref
1 /**
2 * BSD-style license; for more info see http://pmd.sourceforge.net/license.html
3 */
4 package net.sourceforge.pmd.symboltable;
5
6 import net.sourceforge.pmd.ast.ASTFormalParameter;
7 import net.sourceforge.pmd.ast.ASTPrimitiveType;
8 import net.sourceforge.pmd.ast.ASTReferenceType;
9 import net.sourceforge.pmd.ast.ASTType;
10 import net.sourceforge.pmd.ast.ASTVariableDeclaratorId;
11 import net.sourceforge.pmd.ast.AccessNode;
12 import net.sourceforge.pmd.ast.Dimensionable;
13 import net.sourceforge.pmd.ast.SimpleNode;
14 import net.sourceforge.pmd.ast.TypeNode;
15
16 public class VariableNameDeclaration extends AbstractNameDeclaration {
17
18 public VariableNameDeclaration(ASTVariableDeclaratorId node) {
19 super(node);
20 }
21
22 public Scope getScope() {
23 return node.getScope().getEnclosingClassScope();
24 }
25
26 public boolean isArray() {
27 ASTVariableDeclaratorId astVariableDeclaratorId = (ASTVariableDeclaratorId) node;
28 ASTType typeNode = astVariableDeclaratorId.getTypeNode();
29 return ((Dimensionable) (typeNode.jjtGetParent())).isArray();
30 }
31
32 public boolean isExceptionBlockParameter() {
33 return ((ASTVariableDeclaratorId) node).isExceptionBlockParameter();
34 }
35
36 public boolean isPrimitiveType() {
37 return getAccessNodeParent().jjtGetChild(0).jjtGetChild(0) instanceof ASTPrimitiveType;
38 }
39
40 public String getTypeImage() {
41 if (isPrimitiveType()) {
42 return ((SimpleNode) (getAccessNodeParent().jjtGetChild(0).jjtGetChild(0))).getImage();
43 }
44 return ((SimpleNode) getAccessNodeParent().jjtGetChild(0).jjtGetChild(0).jjtGetChild(0)).getImage();
45 }
46
47 /**
48 * Note that an array of primitive types (int[]) is a reference type.
49 */
50 public boolean isReferenceType() {
51 return getAccessNodeParent().jjtGetChild(0).jjtGetChild(0) instanceof ASTReferenceType;
52 }
53
54 public AccessNode getAccessNodeParent() {
55 if (node.jjtGetParent() instanceof ASTFormalParameter) {
56 return (AccessNode) node.jjtGetParent();
57 }
58 return (AccessNode) node.jjtGetParent().jjtGetParent();
59 }
60
61 public ASTVariableDeclaratorId getDeclaratorId() {
62 return (ASTVariableDeclaratorId) node;
63 }
64
65 public Class getType() {
66 return ((TypeNode) node).getType();
67 }
68
69 public boolean equals(Object o) {
70 if (!(o instanceof VariableNameDeclaration)) {
71 return false;
72 }
73 VariableNameDeclaration n = (VariableNameDeclaration) o;
74 return n.node.getImage().equals(node.getImage());
75 }
76
77 public int hashCode() {
78 return node.getImage().hashCode();
79 }
80
81 public String toString() {
82 return "Variable: image = '" + node.getImage() + "', line = " + node.getBeginLine();
83 }
84 }