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 if this search is just in this scope - it doesn't go diving into any 45 * contained 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 }