首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于JavaParser的解析方法

基于JavaParser的解析方法
EN

Stack Overflow用户
提问于 2022-05-31 13:15:44
回答 1查看 125关注 0票数 -1

我想使用java解析器解析check()方法。使用getStatements()方法在MethodDeclaration中可以得到该方法。但是我想遍历方法中的代码。有没有办法这么做。我需要计算这个方法中返回语句的数量。

代码语言:javascript
复制
final JavaParser javaParser = new JavaParser();
final CompilationUnit compilationUnit = pr.getResult().get();
final TypeDeclaration resourceClass = compilationUnit.getTypes().get(0);

MethodDeclaration md =  (MethodDeclaration) resourceClass.getMethodsByName("check");

md.getBody().get().getStatements();

private int check(){
    if(x=y)
        return 10;
    else
        return 5;
}
EN

回答 1

Stack Overflow用户

发布于 2022-07-30 23:10:34

您需要定义一个计算ReturnStmt实例的访问者。这样做的一种方法是:

代码语言:javascript
复制
class ReturnStmtCounter extends GenericVisitorWithDefaults<Integer, Void> {
    public int countReturnStmts(Node n) {
        return n.accept(this, null);
    }

    public Integer defaultAction(NodeList<?> n, Void arg) {
        return sumReturnStmts(n, arg);
    }

    public Integer defaultAction(Node n, Void arg) {
        return sumReturnStmts(n.getChildNodes(), arg);
    }

    @Override
    public Integer visit(ReturnStmt returnStmt, Void arg) {
        return 1;
    }

    private int sumReturnStmts(Collection<? extends Node> nodes, Void arg) {
        return nodes.stream().mapToInt(n -> n.accept(this, null)).sum();
    }
}

备注

  1. countReturnStmts接受可能位于AST
  2. 中的任何类型的节点--算法是递归的;首先使用深度优先搜索计算每个子节点下面的返回语句,然后将它们和
  3. 相加,如果访问ReturnStmt实例,则停止并返回1.

G 211

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72448491

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档