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