package annotator.find;
import annotator.Main;
import com.sun.source.tree.*;
import com.sun.source.util.TreePath;
/**
* Represents the criterion that a program element is in a method with a
* certain name.
*/
final class PackageCriterion implements Criterion {
private final String name;
PackageCriterion(String name) {
this.name = name;
}
/** {@inheritDoc} */
@Override
public Kind getKind() {
return Kind.PACKAGE;
}
/** {@inheritDoc} */
@Override
public boolean isSatisfiedBy(TreePath path, Tree tree) {
assert path == null || path.getLeaf() == tree;
return isSatisfiedBy(path);
}
/** {@inheritDoc} */
@Override
public boolean isSatisfiedBy(TreePath path) {
Tree tree = path.getLeaf();
Criteria.dbug.debug("PackageCriterion.isSatisfiedBy(%s, %s); this=%s%n",
Main.pathToString(path), tree, this.toString());
if (tree.getKind() == Tree.Kind.COMPILATION_UNIT) {
CompilationUnitTree cu = (CompilationUnitTree)tree;
if (cu.getSourceFile().getName().endsWith("package-info.java")) {
ExpressionTree pn = cu.getPackageName();
assert ((pn instanceof IdentifierTree)
|| (pn instanceof MemberSelectTree));
if (this.name.equals(pn.toString())) {
return true;
}
}
}
Criteria.dbug.debug("PackageCriterion.isSatisfiedBy => false%n");
return false;
}
/**
* {@inheritDoc}
*/
@Override
public String toString() {
return "package '" + name + "'";
}
}