package annotator.find; import com.sun.source.tree.Tree; import com.sun.source.util.TreePath; public class FieldCriterion implements Criterion { public final String varName; public final boolean isDeclaration; public final Criterion varCriterion; public final Criterion notInMethodCriterion; public FieldCriterion(String varName) { this(varName, false); } public FieldCriterion(String varName, boolean isDeclaration) { this.varName = varName; this.isDeclaration = isDeclaration; this.varCriterion = Criteria.is(Tree.Kind.VARIABLE, varName); this.notInMethodCriterion = Criteria.notInMethod(); } /** {@inheritDoc} */ @Override public boolean isSatisfiedBy(TreePath path, Tree leaf) { assert path == null || path.getLeaf() == leaf; return isSatisfiedBy(path); } /** {@inheritDoc} */ @Override public boolean isSatisfiedBy(TreePath path) { if (path == null || (isDeclaration && path.getLeaf().getKind() != Tree.Kind.VARIABLE)) { return false; } if (varCriterion.isSatisfiedBy(path) && notInMethodCriterion.isSatisfiedBy(path)) { return true; } else { return this.isSatisfiedBy(path.getParentPath()); } } @Override public Kind getKind() { return Kind.FIELD; } @Override public String toString() { return "FieldCriterion: " + varName; } }