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   *
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 and are either used or not used at this scope
18       */
19      Map getVariableDeclarations(boolean lookingForUsed);
20  
21      /***
22       * Add a variable declaration to this scope
23       */
24      void addDeclaration(VariableNameDeclaration decl);
25  
26      /***
27       * Add a method declaration to this scope
28       */
29      void addDeclaration(MethodNameDeclaration decl);
30  
31      /***
32       * Tests whether or not a NameOccurrence is directly contained in the scope
33       * Note that if this search is just in this scope - it doesn't go diving into any
34       * contained scopes.
35       */
36      boolean contains(NameOccurrence occ);
37  
38      /***
39       * Adds a NameOccurrence to this scope - only call this after getting
40       * a true back from contains()
41       */
42      NameDeclaration addVariableNameOccurrence(NameOccurrence occ);
43  
44      /***
45       * Points this scope to its parent
46       */
47      void setParent(Scope parent);
48  
49      /***
50       * Retrieves this scope's parent
51       */
52      Scope getParent();
53  
54      /***
55       * Goes searching up the tree for this scope's enclosing ClassScope
56       * This is handy if you're buried down in a LocalScope and need to
57       * hop up to the ClassScope to find a method name.
58       */
59      ClassScope getEnclosingClassScope();
60  }