获取某个节点的变量,tree.arguments(),返回Arguments, public interface Arguments extends ListTree<ExpressionTree> ,所以每个变量对应一个ExprssionTree,根据不同的类型解析表达式即可。
sonar中将语法树重新解析为 public interface Tree,枚举出enum Kind implements GrammarRuleKey(目前)119中不同的Kind。
原则上,针对不同的类型(可以作为变量的Kind),做不同的处理即可。
例如,基础类型可以直接转换为LiteralTree, 获取value方法的值即可。
How to get the value of the arguments of the sonar tree relative
Custom Rule for Sonar Java similar
public class YourRule extends IssuableSubscriptionVisitor {
@Override
public List<Tree.Kind> nodesToVisit() {
// Register to the kind of nodes you want to be called upon visit.
return ImmutableList.of(
Tree.Kind.MEMBER_SELECT,
Tree.Kind.METHOD_INVOCATION);
}
@Override
public void visitNode(Tree tree) {
if (tree.is(Tree.Kind.MEMBER_SELECT)) {
MemberSelectExpressionTree mset = (MemberSelectExpressionTree) tree;
System.out.println(mset);
} else if (tree.is(Tree.Kind.METHOD_INVOCATION)) {
MethodInvocationTree mit = (MethodInvocationTree) tree;
System.out.println(mit);
}
}
}
Get parent of method invocation - Java similar scenario
How to get value of a variable in SonarQube (custom-rules )? not relative
Writing a new custom Java Rule to find a method invocation no result