我正在尝试编写一个程序来分析Java源代码,例如,检查所有调用者是否使用某种方法。由于eclipse IDE提供了这种强大而令人印象深刻的功能,我想知道它们是否提供了一些API,所以我也可以在我的程序中使用这些功能。
我在网上查了一些资料。但是我发现的几乎所有文档都与eclipse插件开发有关,这不是我想要的。我想在一个独立的程序中使用它们(可能作为编译链的一部分来进行自定义样式检查)。这可能吗?如果是这样,任何链接作为我开始研究的入口点将非常感激。如果没有,有什么替代方案我可以试试吗? (我曾经考虑使用ANTLR,但它只是一个解析器,距离源代码分析器只有几步之遥)
答案 0 :(得分:1)
我不了解Eclipse本身,但这里有一些替代方案:
首先,相对轻量级:
这些可能有些过分,但Java分析的重枪是Soot from McGill U.和WALA from IBM。
答案 1 :(得分:1)
如果您认为自己喜欢JDT,那么开发一个Eclipse RCP应用程序并不是非常困难,该应用程序只使用JDT的基本Eclipse内容并充当标准命令行应用程序。有关Eclipse RCP的一些教程和论文。
答案 2 :(得分:0)
作为Eclipse / ANTLR的替代方案,请参阅我们的DMS Software Reengineering Toolkit及其Java Front End。 DMS提供通用解析/树构建/模式匹配/源重写功能;前端定制DMS以了解语法细节,例如语法,符号表和流分析(对于Java,目前仅限于方法)。
答案 3 :(得分:0)
如果您想进行“真正的”静态分析,我建议您选择其中一个现有框架,例如Soot或Chord。您需要的分析很可能已在那里实现(尽管这些工具通常更喜欢字节代码)。另一方面,特别是“查找所有调用者” - 分析已经存在于Eclipse中;你可以从CallHierarchyViewPart
开始寻找。
答案 4 :(得分:0)
如果您想创建一个简单的独立程序来进行静态代码分析,那么您似乎正使用ANTLR。
Checkstyle还使用ANTLR进行静态代码分析。 ANTLR将帮助您创建抽象语法树(AST)。但是随后您将不得不编写代码来执行所需的不同类型的检查。您可以使用ANTLR准备的AST的“行走”模式来访问所有令牌,然后执行逻辑并存储或打印结果。首先,这里是一个very simple standalone example,用于对抽象类进行类名检查以确保其以'Abstract'开头。