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.List;
    7   import java.util.Map;
    8
    9   /**
    10   * Provides methods which all scopes must implement
    11   * <p/>
    12   * See JLS 6.3 for a description of scopes
    13   */
    14  public interface Scope {
    15
    16      /**
    17       * Returns a Map (VariableNameDeclaration->List(NameOccurrence,NameOccurrence)) of declarations that
    18       * exist at this scope
    19       */
    20      Map<VariableNameDeclaration, List<NameOccurrence>> getVariableDeclarations();
    21
    22      /**
    23       * Returns a Map (VariableNameDeclaration->List(NameOccurrence,NameOccurrence)) of declarations that
    24       * exist at this scope
    25       */
    26      Map<ClassNameDeclaration, List<NameOccurrence>> getClassDeclarations();
    27
    28      /**
    29       * Add a class declaration to this scope
    30       */
    31      void addDeclaration(ClassNameDeclaration decl);
    32
    33      /**
    34       * Add a variable declaration to this scope
    35       */
    36      void addDeclaration(VariableNameDeclaration decl);
    37
    38      /**
    39       * Add a method declaration to this scope
    40       */
    41      void addDeclaration(MethodNameDeclaration decl);
    42
    43      /**
    44       * Tests whether or not a NameOccurrence is directly contained in the scope
    45       * Note that this search is just for this scope - it doesn't go diving into any
    46       * child scopes.
    47       */
    48      boolean contains(NameOccurrence occ);
    49
    50      /**
    51       * Adds a NameOccurrence to this scope - only call this after getting
    52       * a true back from contains()
    53       */
    54      NameDeclaration addVariableNameOccurrence(NameOccurrence occ);
    55
    56      /**
    57       * Points this scope to its parent
    58       */
    59      void setParent(Scope parent);
    60
    61      /**
    62       * Retrieves this scope's parent
    63       */
    64      Scope getParent();
    65
    66      /**
    67       * Goes searching up the tree for this scope's enclosing ClassScope
    68       * This is handy if you're buried down in a LocalScope and need to
    69       * hop up to the ClassScope to find a method name.
    70       */
    71      ClassScope getEnclosingClassScope();
    72
    73      /**
    74       * Goes searching up the tree for this scope's enclosing SourceFileScope
    75       * This is handy if you're buried down in a LocalScope and need to
    76       * hop up to the SourceFileScope to find a class name.
    77       */
    78      SourceFileScope getEnclosingSourceFileScope();
    79
    80      /**
    81       * Goes searching up the tree for this scope's enclosing MethodScope
    82       * This is handy if you're buried down in a LocalScope and need to
    83       * hop up to the MethodScope to find a method parameter.
    84       */
    85      MethodScope getEnclosingMethodScope();
    86  }