【问题标题】:Using eclipse core/JDT to programmatically analyze Java source code使用eclipse core/JDT编程分析Java源码
【发布时间】:2012-06-01 01:07:29
【问题描述】:

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

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

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

【问题讨论】:

  • 希望有用:Sparse(仅限 C)MELT(GCC 的插件编写工具包)。
  • @sarnold 我忘了说明我对 Java 源代码分析感兴趣。我正在查看 GCC MELT 以检查它是否适合我。非常感谢。

标签: eclipse code-analysis static-code-analysis


【解决方案1】:

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

一、比较轻量级:

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

这些可能有点矫枉过正,但用于 Java 分析的重炮是 Soot from McGill U.WALA from IBM

【讨论】:

  • 非常感谢。 Soot 似乎在 Java 字节码上运行,而不是在源代码级别上运行,这可能不是我想要的。我会检查其余的。谢谢。
  • 对。 findbugs 有同样的问题。但是,PMD 和 WALA 一样具有源代码支持。不过,对于 WALA,我认为他们的源代码支持不如字节码支持成熟。
【解决方案2】:

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

【讨论】:

    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        【解决方案5】:

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-03-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多