| package annotator.find; |
| |
| import annotator.scanner.CommonScanner; |
| |
| import com.sun.source.tree.Tree; |
| import com.sun.source.util.TreePath; |
| |
| /** |
| * Criterion for being within a specific field initializer. |
| */ |
| public class InFieldInitCriterion implements Criterion { |
| |
| public final String varName; |
| public final Criterion varCriterion; |
| |
| public InFieldInitCriterion(String varName) { |
| this.varName = varName; |
| this.varCriterion = Criteria.is(Tree.Kind.VARIABLE, varName); |
| } |
| |
| /** {@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) { |
| while (path != null) { |
| if (CommonScanner.isFieldInit(path)) { |
| return varCriterion.isSatisfiedBy(path); |
| } |
| path = path.getParentPath(); |
| } |
| return false; |
| } |
| |
| @Override |
| public Kind getKind() { |
| return Kind.IN_FIELD_INIT; |
| } |
| |
| @Override |
| public String toString() { |
| return "In field initializer for field '" + varName + "'"; |
| } |
| } |