獲取某個(gè)節(jié)點(diǎn)的變量,tree.arguments(),返回Arguments, public interface Arguments extends ListTree<ExpressionTree> ,所以每個(gè)變量對(duì)應(yīng)一個(gè)ExprssionTree,根據(jù)不同的類型解析表達(dá)式即可。
sonar中將語(yǔ)法樹重新解析為 public interface Tree,枚舉出enum Kind implements GrammarRuleKey(目前)119中不同的Kind。
原則上,針對(duì)不同的類型(可以作為變量的Kind),做不同的處理即可。
例如,基礎(chǔ)類型可以直接轉(zhuǎn)換為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