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.Iterator;
    7   import java.util.Map;
    8
    9   public abstract class AbstractScope implements Scope {
    10
    11      private Scope parent;
    12
    13      public Map getClassDeclarations() {
    14          throw new RuntimeException("AbstractScope.getClassDeclarations() was invoked.  That shouldn't happen... bug.");
    15      }
    16
    17      public MethodScope getEnclosingMethodScope() {
    18          return parent.getEnclosingMethodScope();
    19      }
    20
    21      public ClassScope getEnclosingClassScope() {
    22          return parent.getEnclosingClassScope();
    23      }
    24
    25      public SourceFileScope getEnclosingSourceFileScope() {
    26          return parent.getEnclosingSourceFileScope();
    27      }
    28
    29      public void setParent(Scope parent) {
    30          this.parent = parent;
    31      }
    32
    33      public Scope getParent() {
    34          return parent;
    35      }
    36
    37      public void addDeclaration(MethodNameDeclaration methodDecl) {
    38          parent.addDeclaration(methodDecl);
    39      }
    40
    41      public void addDeclaration(ClassNameDeclaration classDecl) {
    42          parent.addDeclaration(classDecl);
    43      }
    44
    45      public boolean contains(NameOccurrence occurrence) {
    46          return findVariableHere(occurrence) != null;
    47      }
    48
    49      protected abstract NameDeclaration findVariableHere(NameOccurrence occurrence);
    50
    51      protected String glomNames(Iterator i) {
    52          StringBuffer result = new StringBuffer();
    53          while (i.hasNext()) {
    54              result.append(i.next().toString());
    55              result.append(',');
    56          }
    57          return result.length() == 0 ? "" : result.toString().substring(0, result.length() - 1);
    58      }
    59
    60  }