AbstractScope.java
01 /**
02  * BSD-style license; for more info see http://pmd.sourceforge.net/license.html
03  */
04 package net.sourceforge.pmd.lang.java.symboltable;
05 
06 import java.util.List;
07 import java.util.Map;
08 import java.util.Set;
09 
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() == "" : result.toString().substring(0, result.length() 1);
59     }
60 
61 }