/** * BSD-style license; for more info see http://pmd.sourceforge.net/license.html */ package net.sourceforge.pmd.lang.java.symboltable; import net.sourceforge.pmd.lang.symboltable.NameDeclaration; import net.sourceforge.pmd.lang.symboltable.NameOccurrence; import net.sourceforge.pmd.util.SearchFunction; public class DeclarationFinderFunction implements SearchFunction<NameDeclaration> { private NameOccurrence occurrence; private NameDeclaration decl; public DeclarationFinderFunction(NameOccurrence occurrence) { this.occurrence = occurrence; } @Override public boolean applyTo(NameDeclaration nameDeclaration) { if (isDeclaredBefore(nameDeclaration) && isSameName(nameDeclaration)) { decl = nameDeclaration; return false; } return true; } private boolean isDeclaredBefore(NameDeclaration nameDeclaration) { if (nameDeclaration.getNode() != null && occurrence.getLocation() != null) { return nameDeclaration.getNode().getBeginLine() <= occurrence.getLocation().getBeginLine(); } return true; } private boolean isSameName(NameDeclaration nameDeclaration) { return occurrence.getImage().equals(nameDeclaration.getName()); } public NameDeclaration getDecl() { return this.decl; } }