View Javadoc

    1   package net.sourceforge.pmd.symboltable;
    2
    3   import net.sourceforge.pmd.ast.ASTPrimaryExpression;
    4   import net.sourceforge.pmd.ast.JavaParserVisitorAdapter;
    5
    6   import java.util.Iterator;
    7   import java.util.List;
    8
    9   public class OccurrenceFinder extends JavaParserVisitorAdapter {
    10
    11      public Object visit(ASTPrimaryExpression node, Object data) {
    12          NameFinder nameFinder = new NameFinder(node);
    13
    14          // Maybe do some sort of State pattern thingy for when NameDeclaration
    15          // is null/not null?
    16          NameDeclaration decl = null;
    17
    18          List names = nameFinder.getNames();
    19          for (Iterator i = names.iterator(); i.hasNext();) {
    20              NameOccurrence occ = (NameOccurrence) i.next();
    21              Search search = new Search(occ);
    22              if (decl == null) {
    23                  // doing the first name lookup
    24                  search.execute();
    25                  decl = search.getResult();
    26                  if (decl == null) {
    27                      // we can't find it, so just give up
    28                      // when we decide to do full symbol resolution
    29                      // force this to either find a symbol or throw a SymbolNotFoundException
    30                      break;
    31                  }
    32              } else {
    33                  // now we've got a scope we're starting with, so work from there
    34                  search.execute(decl.getScope());
    35                  decl = search.getResult();
    36              }
    37          }
    38          return super.visit(node, data);
    39      }
    40
    41  }