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() == 0 ? "" : result.toString().substring(0, result.length() - 1);
59 }
60
61 }
|