/**
* BSD-style license; for more info see http://pmd.sourceforge.net/license.html
*/
package net.sourceforge.pmd.symboltable;
import java.util.Map;
/**
* Provides methods which all scopes must implement
*
* See JLS 6.3 for a description of scopes
*/
public interface Scope {
/**
* Returns a Map (VariableNameDeclaration->List(NameOccurrence,NameOccurrence)) of declarations that
* exist and are either used or not used at this scope
*/
Map getVariableDeclarations(boolean lookingForUsed);
/**
* Add a variable declaration to this scope
*/
void addDeclaration(VariableNameDeclaration decl);
/**
* Add a method declaration to this scope
*/
void addDeclaration(MethodNameDeclaration decl);
/**
* Tests whether or not a NameOccurrence is directly contained in the scope
* Note that if this search is just in this scope - it doesn't go diving into any
* contained scopes.
*/
boolean contains(NameOccurrence occ);
/**
* Adds a NameOccurrence to this scope - only call this after getting
* a true back from contains()
*/
NameDeclaration addVariableNameOccurrence(NameOccurrence occ);
/**
* Points this scope to its parent
*/
void setParent(Scope parent);
/**
* Retrieves this scope's parent
*/
Scope getParent();
/**
* Goes searching up the tree for this scope's enclosing ClassScope
* This is handy if you're buried down in a LocalScope and need to
* hop up to the ClassScope to find a method name.
*/
ClassScope getEnclosingClassScope();
}