我想从JavaParser或另一个Java代码解析器中获取类型化的AST。这意味着我将能够获取特定变量或参数的类型+返回方法的类型。我搜索了很多关于JavaParser的这个特性,但是没有找到任何东西,我认为这是因为JavaParser制作了无类型的AST。所以,告诉我如何才能得到这个。但请不要说要解析所有代码并制作我自己的类型,我试过这很难,我认为这比制作我自己的AST解析器更难。
答案 0 :(得分:0)
我是JavaParser的贡献者,我只是在Clojure中,在JavaParser之上。我在一篇文章How to build a symbol solver for Java, in Clojure
中解释了如何实现它JavaParser或任何其他解析器只是构建代码的抽象语法树(AST),然后您必须解析符号以了解哪些引用与哪些声明相关联。
假设您的代码中包含以下内容:
a = 1;
现在,要了解你应该在哪里声明它的类型。它可以是对参数,局部变量,当前类中声明的字段或继承的字段的引用。如果它是一个继承的字段,你应该找到父类的代码(或字节码),然后在那里寻找a的声明。解析器不会这样做,解析只需要一个字符串(或文件)并构建一个AST。
构建符号解析器不是火箭科学,但它需要一些工作。我在上面链接的帖子中描述的解决方案可以在GitHub上找到,如果你愿意,我很乐意帮你使用它(即使它是用Clojure编写的,你可以很容易地用Java调用它)