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