Scope.java
01 /**
02  * BSD-style license; for more info see http://pmd.sourceforge.net/license.html
03  */
04 package net.sourceforge.pmd.lang.java.symboltable;
05 
06 import java.util.List;
07 import java.util.Map;
08 
09 /**
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 }