| 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"; |
| } |
| |
| } |