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 }