package annotator.find; import com.sun.source.util.TreePath; import com.sun.source.tree.Tree; /** * A criterion for locating a program element in an AST. A Criterion does * not actually give a location. Given a location, the isSatisfiedBy * method indicates whether that location is a desired one. */ public interface Criterion { /** * Types of criterion. */ public static enum Kind { IN_METHOD, /* * Used for classes, interfaces, enums, annotation types. * What would be a better name? * Also see Criteria.isClassEquiv */ IN_CLASS, ENCLOSED_BY, HAS_KIND, NOT_IN_METHOD, TYPE_PARAM, GENERIC_ARRAY_LOCATION, RECEIVER, RETURN_TYPE, SIG_METHOD, PARAM, CAST, LOCAL_VARIABLE, FIELD, NEW, INSTANCE_OF, TYPE_ARGUMENT, METHOD_CALL, METHOD_REFERENCE, LAMBDA_EXPRESSION, BOUND_LOCATION, EXTIMPLS_LOCATION, INTERSECT_LOCATION, METHOD_BOUND, CLASS_BOUND, IN_PACKAGE, AST_PATH, IN_STATIC_INIT, IN_INSTANCE_INIT, IN_FIELD_INIT, /* * This constant is never used. What is the difference to IN_CLASS? * Is one for anywhere within a class and this one only for the * class declaration itself? */ CLASS, PACKAGE; } /** * Determines if the given tree path is satisfied by this criterion. * * @param path the tree path to check against * @return true if this criterion is satisfied by the given path, * false otherwise */ public boolean isSatisfiedBy(TreePath path, Tree tree); /** * Determines if the given tree path is satisfied by this criterion. * * @param path the tree path to check against * @return true if this criterion is satisfied by the given path, * false otherwise */ public boolean isSatisfiedBy(TreePath path); /** * Gets the type of this criterion. * * @return this criterion's kind */ public Kind getKind(); }