【问题标题】:Extracting source code metadata from compiler从编译器中提取源代码元数据
【发布时间】:2013-01-14 22:45:39
【问题描述】:

我正在尝试用 Java 编写一个简单的代码分析器/元数据提取器。一开始,我要做的就是提取和区分实例和局部变量、方法及其签名,并将局部变量与它们所属的方法相关联,这与 Eclipse 在其大纲视图中显示它们的方式大致相同。当然,这可以通过简单的文本解析来完成,但这显然是一种极其繁琐和乏味的方法,肯定是在重新发明轮子。由于编译器已经解析了源代码,我想利用它的功能以一种干净、简单、优雅的方式提取元数据。

知道使用哪个 API 来完成此任务吗?任何人都可以在 Eclipse 中指出我可以用来执行此操作的 API(我确信它存在)吗?

谢谢

【问题讨论】:

  • 您可能需要考虑使用JavaCompiler 以编程方式编译源代码,这样您就可以访问虚拟机将拥有的所有数据。请参阅this answer 获取指针,这是很棒的东西。

标签: java compiler-construction metadata javac


【解决方案1】:

试试看: http://www.steike.com/code/java-reverse-engineering/

可以使用反射,有点棘手

User user = new User();
Field[] fields = user.getClass().getDeclaredFields();

【讨论】:

    【解决方案2】:

    Eclipse ASTParser 似乎是一个不错的起点。

    【讨论】:

      【解决方案3】:

      如果您使用 javac,您应该能够通过编译器 API、编译器树 API 和语言模型 API 的组合来完成所有您想做的事情。 见http://docs.oracle.com/javase/7/docs/technotes/guides/javac/

      使用编译器 API 调用 javac。 使用 Compiler Tree API 检查 AST 使用语言模型 API 查看树的语义。

      【讨论】:

        猜你喜欢
        • 2023-02-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-01-19
        相关资源
        最近更新 更多