| package annotator.find; |
| |
| import java.util.List; |
| |
| import com.sun.source.tree.LambdaExpressionTree; |
| import com.sun.source.tree.MethodTree; |
| import com.sun.source.tree.Tree; |
| import com.sun.source.tree.VariableTree; |
| import com.sun.source.util.TreePath; |
| |
| public class ParamCriterion implements Criterion { |
| |
| private final String methodName; |
| private final Integer paramPos; |
| |
| public ParamCriterion(String methodName, Integer pos) { |
| this.methodName = methodName.substring(0, methodName.indexOf(")") + 1); |
| this.paramPos = pos; |
| } |
| |
| /** {@inheritDoc} */ |
| @Override |
| public boolean isSatisfiedBy(TreePath path, Tree leaf) { |
| assert path == null || path.getLeaf() == leaf; |
| return isSatisfiedBy(path); |
| } |
| |
| /** {@inheritDoc} */ |
| @Override |
| public boolean isSatisfiedBy(TreePath path) { |
| |
| if (path == null) { |
| return false; |
| } |
| |
| // no inner type location, want to annotate outermost type |
| // i.e. @Nullable List list; |
| // @Nullable List<String> list; |
| Tree leaf = path.getLeaf(); |
| if (leaf instanceof VariableTree) { |
| Tree parent = path.getParentPath().getLeaf(); |
| List<? extends VariableTree> params; |
| switch (parent.getKind()) { |
| case METHOD: |
| params = ((MethodTree) parent).getParameters(); |
| break; |
| case LAMBDA_EXPRESSION: |
| params = ((LambdaExpressionTree) parent).getParameters(); |
| break; |
| default: |
| params = null; |
| break; |
| } |
| return params != null && params.size() > paramPos |
| && params.get(paramPos).equals(leaf); |
| } |
| |
| return this.isSatisfiedBy(path.getParentPath()); |
| } |
| |
| @Override |
| public Kind getKind() { |
| return Kind.PARAM; |
| } |
| |
| @Override |
| public String toString() { |
| return "ParamCriterion for method: " + methodName + " at position: " + |
| paramPos; |
| } |
| } |