package annotator.find; import annotations.io.ASTPath; import com.sun.source.tree.*; import com.sun.source.util.TreePath; /** * Represents the criterion that a program element is not enclosed by any * method (i.e. it's a field, class type parameter, etc.). */ final class NotInMethodCriterion implements Criterion { /** * {@inheritDoc} */ @Override public Kind getKind() { return Kind.NOT_IN_METHOD; } /** {@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) { do { Tree.Kind kind = path.getLeaf().getKind(); if (kind == Tree.Kind.METHOD) { return false; } if (ASTPath.isClassEquiv(kind)) { return true; } path = path.getParentPath(); } while (path != null && path.getLeaf() != null); return true; } /** * {@inheritDoc} */ @Override public String toString() { return "not in method"; } }