如何解析 java 方法体?
How to parse java method body?
我想解析 java 个源文件 (.java) 以识别 class 中包含对特定方法的调用的方法。
在下面的示例中,我需要知道哪些方法包含对 xyz() 的调用。因此,解析器应该 return 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
}
}
我尝试使用 java 解析器 (com.github.javaparser)。我创建了一个访问者并通过覆盖
public void visit(MethodDeclaration n, Void arg)
我能够“访问”class 中的所有方法。
但我不知道如何解析访问方法的主体。我不愿意使用 n.getBody().toString().contains(“xyz()”)
通过检查 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"
我想解析 java 个源文件 (.java) 以识别 class 中包含对特定方法的调用的方法。
在下面的示例中,我需要知道哪些方法包含对 xyz() 的调用。因此,解析器应该 return 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
}
}
我尝试使用 java 解析器 (com.github.javaparser)。我创建了一个访问者并通过覆盖
public void visit(MethodDeclaration n, Void arg)
我能够“访问”class 中的所有方法。
但我不知道如何解析访问方法的主体。我不愿意使用 n.getBody().toString().contains(“xyz()”)
通过检查 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"