我想要从JavaParser或其他Java代码解析器中获取类型化的AST。这意味着我将能够获得特定变量的类型或方法的parameters+returning类型。我在谷歌上搜索了很多关于JavaParser的这个特性,但没有找到任何东西,我想这是因为JavaParser生成了非类型化的。所以,请告诉我如何才能得到它。但请不要说解析所有的代码并创建我自己的类型集,我试过了,这非常困难,我认为这比创建我自己的AST解析器更难。
发布于 2015-05-21 04:44:07
我是一名JavaParser贡献者,我刚刚在JavaParser上用Clojure做到了这一点。我在一篇How to build a symbol solver for Java, in Clojure文章中解释了如何实现这一点
JavaParser或任何其他解析器只需构建代码的抽象语法树,然后您必须解析符号以了解哪些引用与哪些声明相关联。
假设您的代码中包含如下内容:
a = 1;现在,为了理解a的类型,您应该找到它被声明的位置。它可以是对参数的引用、对局部变量的引用、对当前类中声明的字段的引用或对继承字段的引用。如果它是一个继承的字段,你应该找到父类的代码(或字节码),并在那里查找a的声明。解析器不会这样做,解析器只接受一个字符串(或文件)并构建一个AST。
构建一个符号解析器不是火箭科学,但它需要一些工作。我在上面链接的文章中描述的解决方案可以在GitHub上找到,如果你愿意的话,我很乐意帮助你使用它(即使它是用Clojure编写的,你也可以很容易地从Java中调用它)
https://stackoverflow.com/questions/30045482
复制相似问题