1 |
| |
2 |
| |
3 |
| |
4 |
| package net.sourceforge.pmd.symboltable; |
5 |
| |
6 |
| import net.sourceforge.pmd.ast.ASTArguments; |
7 |
| import net.sourceforge.pmd.ast.ASTName; |
8 |
| import net.sourceforge.pmd.ast.ASTPrimaryExpression; |
9 |
| import net.sourceforge.pmd.ast.ASTPrimaryPrefix; |
10 |
| import net.sourceforge.pmd.ast.ASTPrimarySuffix; |
11 |
| import net.sourceforge.pmd.ast.SimpleNode; |
12 |
| |
13 |
| import java.util.Iterator; |
14 |
| import java.util.LinkedList; |
15 |
| import java.util.List; |
16 |
| import java.util.StringTokenizer; |
17 |
| |
18 |
| public class NameFinder { |
19 |
| |
20 |
| private LinkedList names = new LinkedList(); |
21 |
| |
22 |
2945
| public NameFinder(ASTPrimaryExpression node) {
|
23 |
2945
| ASTPrimaryPrefix prefix = (ASTPrimaryPrefix) node.jjtGetChild(0);
|
24 |
2945
| if (prefix.usesSuperModifier()) {
|
25 |
25
| add(new NameOccurrence(prefix, "super"));
|
26 |
2920
| } else if (prefix.usesThisModifier()) {
|
27 |
32
| add(new NameOccurrence(prefix, "this"));
|
28 |
| } |
29 |
2945
| for (int i = 0; i < node.jjtGetNumChildren(); i++) {
|
30 |
3806
| checkForNameChild((SimpleNode) node.jjtGetChild(i));
|
31 |
| } |
32 |
| } |
33 |
| |
34 |
2951
| public List getNames() {
|
35 |
2951
| return names;
|
36 |
| } |
37 |
| |
38 |
3806
| private void checkForNameChild(SimpleNode node) {
|
39 |
3806
| if (node.getImage() != null) {
|
40 |
114
| add(new NameOccurrence(node, node.getImage()));
|
41 |
| } |
42 |
3806
| if (node.jjtGetNumChildren() > 0 && node.jjtGetChild(0) instanceof ASTName) {
|
43 |
1388
| ASTName grandchild = (ASTName) node.jjtGetChild(0);
|
44 |
1388
| for (StringTokenizer st = new StringTokenizer(grandchild.getImage(), "."); st.hasMoreTokens();) {
|
45 |
1920
| add(new NameOccurrence(grandchild, st.nextToken()));
|
46 |
| } |
47 |
| } |
48 |
3806
| if (node instanceof ASTPrimarySuffix && ((ASTPrimarySuffix) node).isArguments()) {
|
49 |
737
| NameOccurrence occurrence = (NameOccurrence) names.getLast();
|
50 |
737
| occurrence.setIsMethodOrConstructorInvocation();
|
51 |
737
| ASTArguments args = (ASTArguments) ((ASTPrimarySuffix) node).jjtGetChild(0);
|
52 |
737
| occurrence.setArgumentCount(args.getArgumentCount());
|
53 |
| |
54 |
| } |
55 |
| } |
56 |
| |
57 |
2091
| private void add(NameOccurrence name) {
|
58 |
2091
| names.add(name);
|
59 |
2091
| if (names.size() > 1) {
|
60 |
624
| NameOccurrence qualifiedName = (NameOccurrence) names.get(names.size() - 2);
|
61 |
624
| qualifiedName.setNameWhichThisQualifies(name);
|
62 |
| } |
63 |
| } |
64 |
| |
65 |
| |
66 |
0
| public String toString() {
|
67 |
0
| StringBuffer result = new StringBuffer();
|
68 |
0
| for (Iterator i = names.iterator(); i.hasNext();) {
|
69 |
0
| NameOccurrence occ = (NameOccurrence) i.next();
|
70 |
0
| result.append(occ.getImage());
|
71 |
| } |
72 |
0
| return result.toString();
|
73 |
| } |
74 |
| } |