View Javadoc
1 package net.sourceforge.pmd.symboltable; 2 3 import net.sourceforge.pmd.util.Applier; 4 5 import java.util.ArrayList; 6 import java.util.HashMap; 7 import java.util.Iterator; 8 import java.util.List; 9 import java.util.Map; 10 11 /*** 12 * Provides behavior common to all Scopes 13 */ 14 public abstract class AbstractScope implements Scope { 15 16 private Scope parent; 17 protected Map variableNames = new HashMap(); 18 protected Map methodNames = new HashMap(); 19 20 public ClassScope getEnclosingClassScope() { 21 return parent.getEnclosingClassScope(); 22 } 23 24 public void setParent(Scope parent) { 25 this.parent = parent; 26 } 27 28 public Scope getParent() { 29 return parent; 30 } 31 32 public void addDeclaration(VariableNameDeclaration variableDecl) { 33 if (variableNames.containsKey(variableDecl)) { 34 throw new RuntimeException("Variable " + variableDecl + " is already in the symbol table"); 35 } 36 variableNames.put(variableDecl, new ArrayList()); 37 } 38 39 public void addDeclaration(MethodNameDeclaration methodDecl) { 40 parent.addDeclaration(methodDecl); 41 } 42 43 public boolean contains(NameOccurrence occurrence) { 44 return findVariableHere(occurrence) != null; 45 } 46 47 public Map getVariableDeclarations(boolean lookingForUsed) { 48 VariableUsageFinderFunction f = new VariableUsageFinderFunction(variableNames, lookingForUsed); 49 Applier.apply(f, variableNames.keySet().iterator()); 50 return f.getUsed(); 51 } 52 53 public NameDeclaration addVariableNameOccurrence(NameOccurrence occurrence) { 54 NameDeclaration decl = findVariableHere(occurrence); 55 if (decl != null && !occurrence.isThisOrSuper()) { 56 List nameOccurrences = (List) variableNames.get(decl); 57 nameOccurrences.add(occurrence); 58 } 59 return decl; 60 } 61 62 protected abstract NameDeclaration findVariableHere(NameOccurrence occurrence); 63 64 protected String glomNames() { 65 String result = ""; 66 for (Iterator i = variableNames.keySet().iterator(); i.hasNext();) { 67 result += i.next().toString() + ","; 68 } 69 return result; 70 } 71 72 }

This page was automatically generated by Maven