View Javadoc

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.SimpleNode;
7   
8   import java.util.HashSet;
9   import java.util.Iterator;
10  import java.util.Set;
11  import java.util.Stack;
12  
13  public class BasicScopeFactory implements ScopeFactory {
14  
15      private Set scopeEvaluators = new HashSet();
16  
17      public BasicScopeFactory() {
18          scopeEvaluators.add(new GlobalScopeEvaluator());
19          scopeEvaluators.add(new ClassScopeEvaluator());
20          scopeEvaluators.add(new MethodScopeEvaluator());
21          scopeEvaluators.add(new LocalScopeEvaluator());
22      }
23  
24      public void openScope(Stack scopes, SimpleNode node) {
25          for (Iterator i = scopeEvaluators.iterator(); i.hasNext();) {
26              ScopeEvaluator ev = (ScopeEvaluator)i.next();
27              if  (ev.isScopeCreatedBy(node)) {
28                  Scope scope = ev.getScopeFor(node);
29                  if (!(scope instanceof GlobalScope)) {
30                      scope.setParent((Scope) scopes.peek());
31                  }
32                  scopes.add(scope);
33                  node.setScope((Scope)scopes.peek());
34                  break;
35              }
36          }
37      }
38  
39  }