blob: fea902298d6a3d3534804dcd9e9b9c3d13cd3948 [file] [log] [blame]
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;
}
}