获取某个节点的变量,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