01: /**
02: * BSD-style license; for more info see http://pmd.sourceforge.net/license.html
03: */package net.sourceforge.pmd.symboltable;
04:
05: import java.util.List;
06: import java.util.Map;
07:
08: /**
09: * 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<VariableNameDeclaration, List<NameOccurrence>> getVariableDeclarations();
20:
21: /**
22: * Returns a Map (VariableNameDeclaration->List(NameOccurrence,NameOccurrence)) of declarations that
23: * exist at this scope
24: */
25: Map<ClassNameDeclaration, List<NameOccurrence>> 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 this search is just for this scope - it doesn't go diving into any
45: * child 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:
72: /**
73: * Goes searching up the tree for this scope's enclosing SourceFileScope
74: * This is handy if you're buried down in a LocalScope and need to
75: * hop up to the SourceFileScope to find a class name.
76: */
77: SourceFileScope getEnclosingSourceFileScope();
78:
79: /**
80: * Goes searching up the tree for this scope's enclosing MethodScope
81: * This is handy if you're buried down in a LocalScope and need to
82: * hop up to the MethodScope to find a method parameter.
83: */
84: MethodScope getEnclosingMethodScope();
85: }
|