View Javadoc

    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  }