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.ASTFormalParameters;
8 import net.sourceforge.pmd.ast.ASTMethodDeclarator;
9 import net.sourceforge.pmd.ast.ASTPrimitiveType;
10 import net.sourceforge.pmd.ast.ASTType;
11 import net.sourceforge.pmd.ast.SimpleNode;
12
13 public class MethodNameDeclaration extends AbstractNameDeclaration {
14
15 public MethodNameDeclaration(ASTMethodDeclarator node) {
16 super(node);
17 }
18
19 public int getParameterCount() {
20 return ((ASTMethodDeclarator) node).getParameterCount();
21 }
22
23 public ASTMethodDeclarator getMethodNameDeclaratorNode() {
24 return (ASTMethodDeclarator) node;
25 }
26
27 public String getParameterDisplaySignature() {
28 StringBuffer sb = new StringBuffer("(");
29 ASTFormalParameters params = (ASTFormalParameters) node.jjtGetChild(0);
30 for (int i = 0; i < ((ASTMethodDeclarator) node).getParameterCount(); i++) {
31 ASTFormalParameter p = (ASTFormalParameter) params.jjtGetChild(i);
32 sb.append(((ASTType) p.getFirstChildOfType(ASTType.class)).getTypeImage());
33 sb.append(",");
34 }
35 if (sb.charAt(sb.length() - 1) == ',') {
36 sb.deleteCharAt(sb.length() - 1);
37 }
38 return sb.toString() + ")";
39 }
40
41 public boolean equals(Object o) {
42 MethodNameDeclaration other = (MethodNameDeclaration) o;
43
44
45 if (!other.node.getImage().equals(node.getImage())) {
46 return false;
47 }
48
49
50 if (((ASTMethodDeclarator) (other.node)).getParameterCount() != ((ASTMethodDeclarator) node).getParameterCount()) {
51 return false;
52 }
53
54
55 ASTFormalParameters myParams = (ASTFormalParameters) node.jjtGetChild(0);
56 ASTFormalParameters otherParams = (ASTFormalParameters) other.node.jjtGetChild(0);
57 for (int i = 0; i < ((ASTMethodDeclarator) node).getParameterCount(); i++) {
58 ASTFormalParameter myParam = (ASTFormalParameter) myParams.jjtGetChild(i);
59 ASTFormalParameter otherParam = (ASTFormalParameter) otherParams.jjtGetChild(i);
60
61 SimpleNode myTypeNode = (SimpleNode) myParam.jjtGetChild(0).jjtGetChild(0);
62 SimpleNode otherTypeNode = (SimpleNode) otherParam.jjtGetChild(0).jjtGetChild(0);
63
64
65 if (myTypeNode.getClass() != otherTypeNode.getClass()) {
66 return false;
67 }
68
69
70
71
72
73 String myTypeImg;
74 String otherTypeImg;
75 if (myTypeNode instanceof ASTPrimitiveType) {
76 myTypeImg = myTypeNode.getImage();
77 otherTypeImg = otherTypeNode.getImage();
78 } else {
79 myTypeImg = ((SimpleNode) (myTypeNode.jjtGetChild(0))).getImage();
80 otherTypeImg = ((SimpleNode) (otherTypeNode.jjtGetChild(0))).getImage();
81 }
82
83 if (!myTypeImg.equals(otherTypeImg)) {
84 return false;
85 }
86
87
88 }
89 return true;
90 }
91
92 public int hashCode() {
93 return node.getImage().hashCode() + ((ASTMethodDeclarator) node).getParameterCount();
94 }
95
96 public String toString() {
97 return "Method " + node.getImage() + ", line " + node.getBeginLine() + ", params = " + ((ASTMethodDeclarator) node).getParameterCount();
98 }
99 }