使用 eclipse core/JDT 以编程方式分析 Java 源代码



我正在尝试编写一个程序来分析Java源代码,例如,检查某个特定方法的所有调用者。由于 eclipse IDE 提供了这种功能,功能强大且令人印象深刻,我想知道他们是否提供了一些 API,以便我也可以在我的程序中使用这些功能。

我在网上查了一些资料。但是我能找到的几乎所有文档都与 eclipse 插件开发有关,这不是我想要的。我想在独立程序中使用它们(也许作为编译链的一部分来进行自定义样式检查)。

这可能吗?如果是这样,任何链接作为我开始研究的切入点将不胜感激。如果没有,我有什么可以尝试的替代方案吗?(我曾经考虑过使用ANTLR,但它只是一个解析器,距离源代码分析器只有几步之遥)

我不知道

Eclipse 本身,但这里有一些替代方案:

一、比较轻量级的:

  • 查找错误。如果你是一个体面的Java程序员,编写自己的分析相对简单。
  • PMD。 我自己没有用过它,但看起来很简单,可以写一个 Java 分析加上 - 额外的好处 - 它们支持 XPath 风格的源代码 AST。

这些可能有点矫枉过正,但Java分析的重枪是来自McGill U的Soot。 和 IBM 的 WALA。

如果你决定喜欢JDT,那么开发一个Eclipse RCP应用程序并不困难,它只会使用基本的Eclipse和JDT,并作为标准的命令行应用程序。有许多关于 Eclipse RCP 的教程和论文。

作为 Eclipse/ANTLR 的替代品,请参阅我们的 DMS 软件再造工具包及其 Java 前端。 DMS提供通用解析/树构建/模式匹配/源重写功能;前端自定义 DMS 以了解语言详细信息,例如语法、符号表和流分析(对于 Java,目前仅限于方法)。

如果你想

做"真正的"静态分析,我建议你选择现有的框架之一,如Soot或Chord。您需要的分析很可能已经在那里实现(尽管这些工具通常更喜欢字节码)。另一方面,特别是"查找所有呼叫者"分析已经存在于 Eclipse 中;你可以从CallHierarchyViewPart开始看.

如果你想创建一个简单的独立程序来进行静态代码分析,那么你似乎走在使用ANTLR的正确道路上。

Checkstyle 还使用 ANTLR 来执行静态代码分析。ANTLR将帮助您创建抽象语法树(AST)。但是,您将不得不编写代码来执行所需的不同类型的检查。您可以使用ANTLR准备的AST的"步行"模式来访问所有令牌,然后有一个逻辑来执行它并存储或打印结果。首先,这里有一个非常简单的独立示例,用于对抽象类执行类名检查,以确保它以"抽象"开头。

最新更新