View Javadoc

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