gpt4 book ai didi

java - 使用 JavaParser 获取 main 方法中调用的方法

转载 作者:行者123 更新时间:2023-12-02 11:05:16 25 4
gpt4 key购买 nike

我正在使用 JavaParser 库来解析 java 代码并访问 java 代码标记。

以下是我的代码

import java.util.Vector;
import com.github.javaparser.JavaParser;
import com.github.javaparser.ast.CompilationUnit;
import com.github.javaparser.ast.body.MethodDeclaration;
import com.github.javaparser.ast.expr.VariableDeclarationExpr;
import com.github.javaparser.ast.stmt.BlockStmt;
import com.github.javaparser.ast.type.ClassOrInterfaceType;
import com.github.javaparser.ast.visitor.VoidVisitorAdapter;
import java.io.FileInputStream;


public class MethodParser {
public static void main(String[] args) throws Exception {
// creates an input stream for the file to be parsed

FileInputStream in = new FileInputStream("F:\\Projects\\Parse.java");

CompilationUnit cu;
try {
// parse the file
cu = JavaParser.parse(in);
} finally {
in.close();
}
cu.accept(new MethodVisitor(), null);
}
private static class MethodVisitor extends VoidVisitorAdapter<Void> {
@Override

public void visit(MethodDeclaration n, Void arg) {
/* here you can access the attributes of the method.
this method will be called for all methods in this
CompilationUnit, including inner class methods */

String x =String.valueOf(n.getBody() );

n.ifAssertStmt(n);

System.out.println(x);
super.visit(n, arg);
}
public void visitVariables(MethodDeclaration n, Void arg) {


String x =String.valueOf(n.getBody());
System.out.println(x);
super.visit(n, arg);
}

}

}

以下是JavaParser读取java文件的代码(Parse.java)

public class Parse{

public void printFirstName(){
System.out.println("My First name is John");
}

public void printLastName(){
System.out.println("My Last name is John");
}


public static void main(String[] args){

Parse A = new Parse();
A.printFirstName();

}
}

输出打印parse.java类中所有方法体的内容。但我想获取主方法中调用的方法(即本场景中的 printFirstName)我该怎么做?

最佳答案

我会使用访客并且:1)在visitMethodDeclaration中设置一个标志,检查您正在访问的方法是否是main(名称,静态标志,参数类型)2) 在访问方法调用表达式方法中,仅当设置了第 1 点处的标志时,我才会打印调用

关于java - 使用 JavaParser 获取 main 方法中调用的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51018985/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com