1

我想解析 java 源文件 (.java) 以识别类中包含对特定方法的调用的方法。

在下面的示例中,我需要知道哪些方法包含对 xyz() 的调用。所以,解析器应该返回 method01 和 method03

public class A{
    private void method01(){
        //some statements
        xyz();
        //more statements
    }

    private void method02(){
        //some statements
        xyz123();
        //more statements
    }

    private void method03(){
        //some statements
        xyz();
        //more statements
    }
}

我尝试使用 javaparser (com.github.javaparser)。我创建了一个访问者并通过覆盖

public void visit(MethodDeclaration n, Void arg) 

我能够“访问”类中的所有方法。

但我不知道如何解析visted 方法的主体。我不愿意使用 n.getBody().toString().contains(“xyz()”)

4

1 回答 1

2

通过检查Javadoc,看起来您可以执行以下操作:

private MethodDeclaration currentMethod = null;

@Override
public void visit(MethodDeclaration n, Void arg) {
    currentMethod = n;
    super.visit(n, arg);
    currentMethod = null;
}

@Override
public void visit(MethodCallExpr n, Void arg) {
    super.visit(n, arg);
    if (currentMethod != null && n.getName().asString().equals("xyz") {
        // Found an invocation of xyz in method this.currentMethod
    }
}

上面的代码跟踪当前方法,并在访问与名称“xyz”匹配的方法调用时查找

于 2017-06-07T02:48:00.863 回答