如何获取sonar tree的变量值

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

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容