JavaParser - 获取键入的AST

时间:2015-05-05 06:14:41

标签: java abstract-syntax-tree javaparser

我想从JavaParser或另一个Java代码解析器中获取类型化的AST。这意味着我将能够获取特定变量或参数的类型+返回方法的类型。我搜索了很多关于JavaParser的这个特性,但是没有找到任何东西,我认为这是因为JavaParser制作了无类型的AST。所以,告诉我如何才能得到这个。但请不要说要解析所有代码并制作我自己的类型,我试过这很难,我认为这比制作我自己的AST解析器更难。

1 个答案:

答案 0 :(得分:0)

我是JavaParser的贡献者,我只是在Clojure中,在JavaParser之上。我在一篇文章How to build a symbol solver for Java, in Clojure

中解释了如何实现它

JavaParser或任何其他解析器只是构建代码的抽象语法树(AST),然后您必须解析符号以了解哪些引用与哪些声明相关联。

假设您的代码中包含以下内容:

a = 1;

现在,要了解你应该在哪里声明它的类型。它可以是对参数,局部变量,当前类中声明的字段或继承的字段的引用。如果它是一个继承的字段,你应该找到父类的代码(或字节码),然后在那里寻找a的声明。解析器不会这样做,解析只需要一个字符串(或文件)并构建一个AST。

构建符号解析器不是火箭科学,但它需要一些工作。我在上面链接的帖子中描述的解决方案可以在GitHub上找到,如果你愿意,我很乐意帮你使用它(即使它是用Clojure编写的,你可以很容易地用Java调用它)