3

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

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

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

4

5 回答 5

1

如果您决定喜欢 JDT,那么开发一个 Eclipse RCP 应用程序就不会(非常)困难,该应用程序仅使用带有 JDT 的基本 Eclipse 内容并用作标准命令行应用程序。有许多关于 Eclipse RCP 的教程和论文。

于 2012-06-01T03:19:12.623 回答
1

我不了解 Eclipse 本身,但这里有一些替代方案:

一、相对轻量级:

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

这些可能是矫枉过正,但 Java 分析的重炮是来自 McGill U. 的 Soot来自 IBM 的 WALA

于 2012-06-01T01:51:42.337 回答
0

如果您想做“真正的”静态分析,我建议您使用现有的框架之一,例如SootChord。您需要的分析很可能已经在那里实现(尽管这些工具通常更喜欢字节码)。另一方面,尤其是“查找所有调用者”分析已经存在于 Eclipse 中;你可以从CallHierarchyViewPart.

于 2012-06-06T09:28:08.403 回答
0

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

于 2012-06-06T08:20:36.273 回答
0

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

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

于 2019-08-11T00:22:10.923 回答