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