KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > net > sourceforge > pmd > symboltable > LocalScope


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 net.sourceforge.pmd.ast.ASTName;
7 import net.sourceforge.pmd.ast.SimpleNode;
8 import net.sourceforge.pmd.util.Applier;
9
10 import java.util.ArrayList JavaDoc;
11 import java.util.HashMap JavaDoc;
12 import java.util.List JavaDoc;
13 import java.util.Map JavaDoc;
14
15 public class LocalScope extends AbstractScope {
16
17     protected Map JavaDoc variableNames = new HashMap JavaDoc();
18
19     public NameDeclaration addVariableNameOccurrence(NameOccurrence occurrence) {
20         NameDeclaration decl = findVariableHere(occurrence);
21         if (decl != null && !occurrence.isThisOrSuper()) {
22             List JavaDoc nameOccurrences = (List JavaDoc) variableNames.get(decl);
23             nameOccurrences.add(occurrence);
24             SimpleNode n = occurrence.getLocation();
25             if (n instanceof ASTName) {
26                 ((ASTName) n).setNameDeclaration(decl);
27             } // TODO what to do with PrimarySuffix case?
28
}
29         return decl;
30     }
31
32     public Map JavaDoc getVariableDeclarations() {
33         VariableUsageFinderFunction f = new VariableUsageFinderFunction(variableNames);
34         Applier.apply(f, variableNames.keySet().iterator());
35         return f.getUsed();
36     }
37
38     public void addDeclaration(VariableNameDeclaration nameDecl) {
39         if (variableNames.containsKey(nameDecl)) {
40             throw new RuntimeException JavaDoc("Variable " + nameDecl + " is already in the symbol table");
41         }
42         variableNames.put(nameDecl, new ArrayList JavaDoc());
43     }
44
45     public NameDeclaration findVariableHere(NameOccurrence occurrence) {
46         if (occurrence.isThisOrSuper() || occurrence.isMethodOrConstructorInvocation()) {
47             return null;
48         }
49         ImageFinderFunction finder = new ImageFinderFunction(occurrence.getImage());
50         Applier.apply(finder, variableNames.keySet().iterator());
51         return finder.getDecl();
52     }
53
54     public String JavaDoc toString() {
55         return "LocalScope:" + glomNames(variableNames.keySet().iterator());
56     }
57 }
58
Popular Tags