Java方法调用解析器?
发布时间:2020-12-15 08:35:59 所属栏目:Java 来源:网络整理
导读:我需要解析某些方法调用调用,包括一些 Java类中的整个签名,例如: public class MyClass { public void myMthod() { // ... some code here result = someInstance.someOtherMethod(param1,param2); // ... some other code here }} 结果我想得到类似的东西
我需要解析某些方法调用调用,包括一些
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 实现这一目标的最快方法是什么? a) result = someInstance.someOtherMethod(getSomething(),param); b) result = getSomeInstance().someOtherMethod(param); c) result = getSomeInstance() .someOtherMethod( getSomethingElse(),null,param); 任何帮助将非常感激!谢谢! 解决方法
不要使用正则表达式!使用了解java的工具.
使用: >源代码解析器(例如javaparser) 在源解析器和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); } 这里的问题是你只有对象名,而不是对象类型,因此你还必须保持一个本地的变量/字段Map来键入,这就是事情变得混乱的地方.毕竟,ASM可能是更容易的选择. 对于ASM:请阅读this tutorial page以开始使用 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |