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 }