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 java.util.List;
7   import java.util.Map;
8   
9   /**
10   * Provides methods which all scopes must implement
11   * <p/>
12   * See JLS 6.3 for a description of scopes
13   */
14  public interface Scope {
15  
16      /**
17       * Returns a Map (VariableNameDeclaration->List(NameOccurrence,NameOccurrence)) of declarations that
18       * exist at this scope
19       */
20      Map<VariableNameDeclaration, List<NameOccurrence>> getVariableDeclarations();
21  
22      /**
23       * Returns a Map (VariableNameDeclaration->List(NameOccurrence,NameOccurrence)) of declarations that
24       * exist at this scope
25       */
26      Map<ClassNameDeclaration, List<NameOccurrence>> getClassDeclarations();
27  
28      /**
29       * Add a class declaration to this scope
30       */
31      void addDeclaration(ClassNameDeclaration decl);
32  
33      /**
34       * Add a variable declaration to this scope
35       */
36      void addDeclaration(VariableNameDeclaration decl);
37  
38      /**
39       * Add a method declaration to this scope
40       */
41      void addDeclaration(MethodNameDeclaration decl);
42  
43      /**
44       * Tests whether or not a NameOccurrence is directly contained in the scope
45       * Note that this search is just for this scope - it doesn't go diving into any
46       * child scopes.
47       */
48      boolean contains(NameOccurrence occ);
49  
50      /**
51       * Adds a NameOccurrence to this scope - only call this after getting
52       * a true back from contains()
53       */
54      NameDeclaration addVariableNameOccurrence(NameOccurrence occ);
55  
56      /**
57       * Points this scope to its parent
58       */
59      void setParent(Scope parent);
60  
61      /**
62       * Retrieves this scope's parent
63       */
64      Scope getParent();
65  
66      /**
67       * Goes searching up the tree for this scope's enclosing ClassScope
68       * This is handy if you're buried down in a LocalScope and need to
69       * hop up to the ClassScope to find a method name.
70       */
71      ClassScope getEnclosingClassScope();
72  
73      /**
74       * Goes searching up the tree for this scope's enclosing SourceFileScope
75       * This is handy if you're buried down in a LocalScope and need to
76       * hop up to the SourceFileScope to find a class name.
77       */
78      SourceFileScope getEnclosingSourceFileScope();
79  
80      /**
81       * Goes searching up the tree for this scope's enclosing MethodScope
82       * This is handy if you're buried down in a LocalScope and need to
83       * hop up to the MethodScope to find a method parameter.
84       */
85      MethodScope getEnclosingMethodScope();
86  }