Home | History | Annotate | Download | only in find
      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