110353ed766fc48a0af6bd33d934439e695c03e3Mahmood Alipackage annotator.find;
210353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali
310353ed766fc48a0af6bd33d934439e695c03e3Mahmood Aliimport annotations.el.BoundLocation;
410353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali
510353ed766fc48a0af6bd33d934439e695c03e3Mahmood Aliimport com.sun.source.util.TreePath;
64735bdd95fe3025e721476ae821d0aca6127f80aMichael Ernstimport com.sun.source.tree.Tree;
710353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali
810353ed766fc48a0af6bd33d934439e695c03e3Mahmood Alipublic class ClassBoundCriterion implements Criterion {
910353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali
100c0bd9d1e50a213629b2031d1c906cdf688af580Werner Dietl  private final String className;
110c0bd9d1e50a213629b2031d1c906cdf688af580Werner Dietl  public final BoundLocation boundLoc;
120c0bd9d1e50a213629b2031d1c906cdf688af580Werner Dietl  private final Criterion notInMethodCriterion;
130c0bd9d1e50a213629b2031d1c906cdf688af580Werner Dietl  private final Criterion boundLocCriterion;
1410353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali
1510353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali  public ClassBoundCriterion(String className, BoundLocation boundLoc) {
1610353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali    this.className = className;
1710353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali    this.boundLoc = boundLoc;
1810353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali    this.notInMethodCriterion = Criteria.notInMethod();
1910353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali    this.boundLocCriterion = Criteria.atBoundLocation(boundLoc);
2010353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali  }
2110353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali
224735bdd95fe3025e721476ae821d0aca6127f80aMichael Ernst  /** {@inheritDoc} */
234735bdd95fe3025e721476ae821d0aca6127f80aMichael Ernst  @Override
244735bdd95fe3025e721476ae821d0aca6127f80aMichael Ernst  public boolean isSatisfiedBy(TreePath path, Tree leaf) {
254735bdd95fe3025e721476ae821d0aca6127f80aMichael Ernst    assert path == null || path.getLeaf() == leaf;
264735bdd95fe3025e721476ae821d0aca6127f80aMichael Ernst    return isSatisfiedBy(path);
274735bdd95fe3025e721476ae821d0aca6127f80aMichael Ernst  }
284735bdd95fe3025e721476ae821d0aca6127f80aMichael Ernst
294735bdd95fe3025e721476ae821d0aca6127f80aMichael Ernst  /** {@inheritDoc} */
304735bdd95fe3025e721476ae821d0aca6127f80aMichael Ernst  @Override
3110353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali  public boolean isSatisfiedBy(TreePath path) {
3210353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali    if (path == null) {
3310353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali      return false;
3410353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali    }
3510353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali
3610353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali    return boundLocCriterion.isSatisfiedBy(path) &&
3710353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali      notInMethodCriterion.isSatisfiedBy(path);
3810353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali  }
3910353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali
400c0bd9d1e50a213629b2031d1c906cdf688af580Werner Dietl  @Override
4110353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali  public Kind getKind() {
4210353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali    return Kind.CLASS_BOUND;
4310353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali  }
4410353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali
450c0bd9d1e50a213629b2031d1c906cdf688af580Werner Dietl  @Override
4610353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali  public String toString() {
4710353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali    return "ClassBoundCriterion: for " + className + " at " + boundLoc;
4810353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali  }
4910353ed766fc48a0af6bd33d934439e695c03e3Mahmood Ali}
50