1 package annotator.find; 2 3 import annotator.scanner.CommonScanner; 4 5 import com.sun.source.tree.Tree; 6 import com.sun.source.util.TreePath; 7 8 /** 9 * Criterion for being within a specific field initializer. 10 */ 11 public class InFieldInitCriterion implements Criterion { 12 13 public final String varName; 14 public final Criterion varCriterion; 15 16 public InFieldInitCriterion(String varName) { 17 this.varName = varName; 18 this.varCriterion = Criteria.is(Tree.Kind.VARIABLE, varName); 19 } 20 21 /** {@inheritDoc} */ 22 @Override 23 public boolean isSatisfiedBy(TreePath path, Tree leaf) { 24 assert path == null || path.getLeaf() == leaf; 25 return isSatisfiedBy(path); 26 } 27 28 /** {@inheritDoc} */ 29 @Override 30 public boolean isSatisfiedBy(TreePath path) { 31 while (path != null) { 32 if (CommonScanner.isFieldInit(path)) { 33 return varCriterion.isSatisfiedBy(path); 34 } 35 path = path.getParentPath(); 36 } 37 return false; 38 } 39 40 @Override 41 public Kind getKind() { 42 return Kind.IN_FIELD_INIT; 43 } 44 45 @Override 46 public String toString() { 47 return "In field initializer for field '" + varName + "'"; 48 } 49 } 50