package annotator.find; import com.sun.source.tree.Tree; import com.sun.source.util.TreePath; /** * Represents the criterion that a program element is enclosed (directly or * indirect) by a program element of a certain type. */ final class EnclosedByCriterion implements Criterion { private final Tree.Kind kind; EnclosedByCriterion(Tree.Kind kind) { this.kind = kind; } /** {@inheritDoc} */ @Override public Kind getKind() { return Kind.ENCLOSED_BY; } /** {@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) { return false; } for (Tree tree : path) { if (tree.getKind() == kind) { return true; } } return false; } /** * {@inheritDoc} */ @Override public String toString() { return "enclosed by '" + kind + "'"; } }