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 }
|