View Javadoc
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