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