01 package net.sourceforge.pmd.lang.java.symboltable;
02
03 import net.sourceforge.pmd.util.Applier;
04
05 import java.util.ArrayList;
06 import java.util.List;
07 import java.util.HashMap;
08 import java.util.Map;
09
10 public class SourceFileScope extends AbstractScope {
11
12 protected Map<ClassNameDeclaration, List<NameOccurrence>> classNames = new HashMap<ClassNameDeclaration, List<NameOccurrence>>();
13 private String packageImage;
14
15 public SourceFileScope() {
16 this("");
17 }
18
19 public SourceFileScope(String image) {
20 this.packageImage = image;
21 }
22
23 public ClassScope getEnclosingClassScope() {
24 throw new RuntimeException("getEnclosingClassScope() called on SourceFileScope");
25 }
26
27 public MethodScope getEnclosingMethodScope() {
28 throw new RuntimeException("getEnclosingMethodScope() called on SourceFileScope");
29 }
30
31 public String getPackageName() {
32 return packageImage;
33 }
34
35 public SourceFileScope getEnclosingSourceFileScope() {
36 return this;
37 }
38
39 public void addDeclaration(ClassNameDeclaration classDecl) {
40 classNames.put(classDecl, new ArrayList<NameOccurrence>());
41 }
42
43 public void addDeclaration(MethodNameDeclaration decl) {
44 throw new RuntimeException("SourceFileScope.addDeclaration(MethodNameDeclaration decl) called");
45 }
46
47 public void addDeclaration(VariableNameDeclaration decl) {
48 throw new RuntimeException("SourceFileScope.addDeclaration(VariableNameDeclaration decl) called");
49 }
50
51 public Map<ClassNameDeclaration, List<NameOccurrence>> getClassDeclarations() {
52 return classNames;
53 }
54
55 public Map<VariableNameDeclaration, List<NameOccurrence>> getVariableDeclarations() {
56 throw new RuntimeException("PackageScope.getVariableDeclarations() called");
57 }
58
59 public NameDeclaration addVariableNameOccurrence(NameOccurrence occ) {
60 return null;
61 }
62
63 public String toString() {
64 return "SourceFileScope: " + glomNames(classNames.keySet());
65 }
66
67 protected NameDeclaration findVariableHere(NameOccurrence occ) {
68 ImageFinderFunction finder = new ImageFinderFunction(occ.getImage());
69 Applier.apply(finder, classNames.keySet().iterator());
70 return finder.getDecl();
71 }
72
73 }
|