1 package net.sourceforge.pmd.symboltable;
2
3 import net.sourceforge.pmd.ast.ASTBlock;
4 import net.sourceforge.pmd.ast.ASTClassBodyDeclaration;
5 import net.sourceforge.pmd.ast.ASTCompilationUnit;
6 import net.sourceforge.pmd.ast.ASTConstructorDeclaration;
7 import net.sourceforge.pmd.ast.ASTForStatement;
8 import net.sourceforge.pmd.ast.ASTIfStatement;
9 import net.sourceforge.pmd.ast.ASTMethodDeclaration;
10 import net.sourceforge.pmd.ast.ASTSwitchStatement;
11 import net.sourceforge.pmd.ast.ASTTryStatement;
12 import net.sourceforge.pmd.ast.ASTUnmodifiedClassDeclaration;
13 import net.sourceforge.pmd.ast.ASTUnmodifiedInterfaceDeclaration;
14 import net.sourceforge.pmd.ast.JavaParserVisitorAdapter;
15 import net.sourceforge.pmd.ast.SimpleNode;
16
17 import java.util.Stack;
18
19 /***
20 * Serves as a sort of adaptor between the AST nodes and the symbol table scopes
21 */
22 public class BasicScopeCreationVisitor extends JavaParserVisitorAdapter {
23
24 private ScopeFactory sf;
25 private Stack scopes = new Stack();
26
27 public BasicScopeCreationVisitor(ScopeFactory sf) {
28 this.sf = sf;
29 }
30
31 public Object visit(ASTCompilationUnit node, Object data) {
32 sf.openScope(scopes, node);
33 cont(node);
34 return data;
35 }
36
37 public Object visit(ASTUnmodifiedClassDeclaration node, Object data) {
38 sf.openScope(scopes, node);
39 cont(node);
40 return data;
41 }
42
43 public Object visit(ASTClassBodyDeclaration node, Object data) {
44 if (node.isAnonymousInnerClass()) {
45 sf.openScope(scopes, node);
46 cont(node);
47 } else {
48 super.visit(node, data);
49 }
50 return data;
51 }
52
53 public Object visit(ASTUnmodifiedInterfaceDeclaration node, Object data) {
54 sf.openScope(scopes, node);
55 cont(node);
56 return data;
57 }
58
59 public Object visit(ASTBlock node, Object data) {
60 sf.openScope(scopes, node);
61 cont(node);
62 return data;
63 }
64
65 public Object visit(ASTConstructorDeclaration node, Object data) {
66 sf.openScope(scopes, node);
67 cont(node);
68 return data;
69 }
70
71 public Object visit(ASTMethodDeclaration node, Object data) {
72 sf.openScope(scopes, node);
73 cont(node);
74 return data;
75 }
76
77 public Object visit(ASTTryStatement node, Object data) {
78 sf.openScope(scopes, node);
79 cont(node);
80 return data;
81 }
82
83 public Object visit(ASTForStatement node, Object data) {
84 sf.openScope(scopes, node);
85 cont(node);
86 return data;
87 }
88
89 public Object visit(ASTIfStatement node, Object data) {
90 sf.openScope(scopes, node);
91 cont(node);
92 return data;
93 }
94
95 public Object visit(ASTSwitchStatement node, Object data) {
96 sf.openScope(scopes, node);
97 cont(node);
98 return data;
99 }
100
101 private void cont(SimpleNode node) {
102 super.visit(node, null);
103 scopes.pop();
104 }
105 }
This page was automatically generated by Maven