gpt4 book ai didi

Java 方法调用解析器?

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:34:58 26 4
gpt4 key购买 nike

我需要从某些 Java 类中解析某些方法调用,包括整个签名,例如

public class MyClass {
public void myMthod() {
// ... some code here
result = someInstance.someOtherMethod(param1, param2);
// ... some other code here
}
}

因此我想得到类似的东西:

serviceName = someInstance
methodName = someOtherMethod
arguments = {
argument = java.lang.String,
argument = boolean
}
result = java.lang.Long

实现此目标的最快方法是什么?我正在考虑使用 RegEx 解析器。问题在于有几种发生模式,例如

a)
result = someInstance.someOtherMethod(getSomething(), param);

b)
result =
getSomeInstance().someOtherMethod(param);

c)
result = getSomeInstance()
.someOtherMethod(
getSomethingElse(), null, param);

任何帮助将不胜感激!谢谢!

最佳答案

不要使用正则表达式!使用了解 Java 的工具。

使用其中之一:

在源解析器和 ASM 中,您将编写一个扫描方法调用的访问者。


对于 javaparser:阅读 this page , 扩展 VoidVisitorAdapter并覆盖

public void visit(MethodCallExpr n, A arg)

示例代码:

public static void main(final String[] args) throws Exception{
parseCompilationUnit(new File("src/main/java/foo/bar/Phleem.java"));
}

public static void parseCompilationUnit(final File sourceFile)
throws ParseException, IOException{
final CompilationUnit cu = JavaParser.parse(sourceFile);
cu.accept(new VoidVisitorAdapter<Void>(){

@Override
public void visit(final MethodCallExpr n, final Void arg){
System.out.println(n);
super.visit(n, arg);
}
}, null);
}

这里的问题是你只有对象名称,没有对象类型,所以你还必须保留一个本地变量/字段映射来键入,这就是事情变得困惑的地方。也许 ASM 是更容易的选择,毕竟。


对于 ASM:阅读 this tutorial page开始

关于Java 方法调用解析器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4033675/

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