1 package net.sourceforge.pmd.symboltable;
2
3 import net.sourceforge.pmd.ast.ASTBlock;
4 import net.sourceforge.pmd.ast.ASTCompilationUnit;
5 import net.sourceforge.pmd.ast.ASTConstructorDeclaration;
6 import net.sourceforge.pmd.ast.ASTForStatement;
7 import net.sourceforge.pmd.ast.ASTIfStatement;
8 import net.sourceforge.pmd.ast.ASTMethodDeclaration;
9 import net.sourceforge.pmd.ast.ASTSwitchStatement;
10 import net.sourceforge.pmd.ast.ASTTryStatement;
11 import net.sourceforge.pmd.ast.ASTUnmodifiedClassDeclaration;
12 import net.sourceforge.pmd.ast.ASTUnmodifiedInterfaceDeclaration;
13 import net.sourceforge.pmd.ast.JavaParserVisitorAdapter;
14 import net.sourceforge.pmd.ast.SimpleNode;
15
16 import java.util.Stack;
17
18 public class ScopeCreator extends JavaParserVisitorAdapter {
19
20 private ScopeFactory sf = new ScopeFactory();
21 private Stack scopes = new Stack();
22
23 public Object visit(ASTCompilationUnit node, Object data) {
24 openScope(node);
25 return data;
26 }
27
28 public Object visit(ASTUnmodifiedClassDeclaration node, Object data) {
29 openScope(node);
30 return data;
31 }
32
33 public Object visit(ASTUnmodifiedInterfaceDeclaration node, Object data) {
34 openScope(node);
35 return data;
36 }
37
38 public Object visit(ASTBlock node, Object data) {
39 openScope(node);
40 return data;
41 }
42
43 public Object visit(ASTConstructorDeclaration node, Object data) {
44 openScope(node);
45 return data;
46 }
47
48 public Object visit(ASTMethodDeclaration node, Object data) {
49 openScope(node);
50 return data;
51 }
52
53 public Object visit(ASTTryStatement node, Object data) {
54 openScope(node);
55 return data;
56 }
57
58 public Object visit(ASTForStatement node, Object data) {
59 openScope(node);
60 return data;
61 }
62
63 public Object visit(ASTIfStatement node, Object data) {
64 openScope(node);
65 return data;
66 }
67
68 public Object visit(ASTSwitchStatement node, Object data) {
69 openScope(node);
70 return data;
71 }
72
73 private void push(Scope scope) {
74 if (scopes.empty()) {
75 if (!(scope instanceof GlobalScope)) {
76 throw new RuntimeException("First scope should be a GlobalScope");
77 }
78 } else {
79 scope.setParent((Scope) scopes.peek());
80 }
81 scopes.add(scope);
82 }
83
84 private void openScope(SimpleNode node) {
85 Scope scope = sf.createScope(node);
86 push(scope);
87 node.setScope((Scope) scopes.peek());
88 super.visit(node, null);
89 scopes.pop();
90 }
91 }
This page was automatically generated by Maven