110353ed766fc48a0af6bd33d934439e695c03e3Mahmood Alipackage annotator.find;
210353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali
310353ed766fc48a0af6bd33d934439e695c03e3Mahmood Aliimport com.sun.source.tree.Tree;
410353ed766fc48a0af6bd33d934439e695c03e3Mahmood Aliimport com.sun.source.util.TreePath;
510353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali
610353ed766fc48a0af6bd33d934439e695c03e3Mahmood Alipublic class FieldCriterion implements Criterion {
710353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali
80c0bd9d1e50a213629b2031d1c906cdf688af580Werner Dietl  public final String varName;
952dda95b775d6ad255fb35f2582be363ab1ce4d2Dan Brown  public final boolean isDeclaration;
100c0bd9d1e50a213629b2031d1c906cdf688af580Werner Dietl  public final Criterion varCriterion;
110c0bd9d1e50a213629b2031d1c906cdf688af580Werner Dietl  public final Criterion notInMethodCriterion;
1210353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali
1310353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali  public FieldCriterion(String varName) {
1452dda95b775d6ad255fb35f2582be363ab1ce4d2Dan Brown    this(varName, false);
1552dda95b775d6ad255fb35f2582be363ab1ce4d2Dan Brown  }
1652dda95b775d6ad255fb35f2582be363ab1ce4d2Dan Brown
1752dda95b775d6ad255fb35f2582be363ab1ce4d2Dan Brown  public FieldCriterion(String varName, boolean isDeclaration) {
1810353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali    this.varName = varName;
1952dda95b775d6ad255fb35f2582be363ab1ce4d2Dan Brown    this.isDeclaration = isDeclaration;
2010353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali    this.varCriterion = Criteria.is(Tree.Kind.VARIABLE, varName);
2110353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali    this.notInMethodCriterion = Criteria.notInMethod();
2210353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali  }
2310353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali
244735bdd95fe3025e721476ae821d0aca6127f80aMichael Ernst  /** {@inheritDoc} */
254735bdd95fe3025e721476ae821d0aca6127f80aMichael Ernst  @Override
264735bdd95fe3025e721476ae821d0aca6127f80aMichael Ernst  public boolean isSatisfiedBy(TreePath path, Tree leaf) {
274735bdd95fe3025e721476ae821d0aca6127f80aMichael Ernst    assert path == null || path.getLeaf() == leaf;
284735bdd95fe3025e721476ae821d0aca6127f80aMichael Ernst    return isSatisfiedBy(path);
294735bdd95fe3025e721476ae821d0aca6127f80aMichael Ernst  }
304735bdd95fe3025e721476ae821d0aca6127f80aMichael Ernst
314735bdd95fe3025e721476ae821d0aca6127f80aMichael Ernst  /** {@inheritDoc} */
324735bdd95fe3025e721476ae821d0aca6127f80aMichael Ernst  @Override
3310353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali  public boolean isSatisfiedBy(TreePath path) {
3452dda95b775d6ad255fb35f2582be363ab1ce4d2Dan Brown    if (path == null || (isDeclaration
3552dda95b775d6ad255fb35f2582be363ab1ce4d2Dan Brown            && path.getLeaf().getKind() != Tree.Kind.VARIABLE)) {
3610353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali      return false;
3710353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali    }
3810353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali
3910353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali    if (varCriterion.isSatisfiedBy(path) &&
4010353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali        notInMethodCriterion.isSatisfiedBy(path)) {
4110353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali      return true;
4210353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali    } else {
4310353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali      return this.isSatisfiedBy(path.getParentPath());
4410353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali    }
4510353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali  }
4610353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali
470c0bd9d1e50a213629b2031d1c906cdf688af580Werner Dietl  @Override
4810353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali  public Kind getKind() {
4910353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali    return Kind.FIELD;
5010353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali  }
5110353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali
520c0bd9d1e50a213629b2031d1c906cdf688af580Werner Dietl  @Override
5310353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali  public String toString() {
5410353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali    return "FieldCriterion: " + varName;
5510353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali  }
5610353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali}
57