1 4 package net.sourceforge.pmd.symboltable; 5 6 public class Search { 7 private static final boolean TRACE = false; 8 9 private NameOccurrence occ; 10 private NameDeclaration decl; 11 12 public Search(NameOccurrence occ) { 13 if (TRACE) System.out.println("new search for " + (occ.isMethodOrConstructorInvocation() ? "method" : "variable") + " " + occ); 14 this.occ = occ; 15 } 16 17 public void execute() { 18 decl = searchUpward(occ, occ.getLocation().getScope()); 19 if (TRACE) System.out.println("found " + decl); 20 } 21 22 public void execute(Scope startingScope) { 23 decl = searchUpward(occ, startingScope); 24 if (TRACE) System.out.println("found " + decl); 25 } 26 27 public NameDeclaration getResult() { 28 return decl; 29 } 30 31 private NameDeclaration searchUpward(NameOccurrence nameOccurrence, Scope scope) { 32 if (TRACE) System.out.println("checking scope " + scope + " for name occurrence " + nameOccurrence); 33 if (!scope.contains(nameOccurrence) && scope.getParent() != null) { 34 if (TRACE) System.out.println("moving up fm " + scope + " to " + scope.getParent()); 35 return searchUpward(nameOccurrence, scope.getParent()); 36 } 37 if (scope.contains(nameOccurrence)) { 38 if (TRACE) System.out.println("found it!"); 39 return scope.addVariableNameOccurrence(nameOccurrence); 40 } 41 return null; 42 } 43 } 44 | Popular Tags |