Java的跨类可扩展静态分析工具?

4
我试图编写规则以检测带注释的多线程Java程序中的一些错误。 作为一个玩具示例,我想检测是否调用了未经同步的没有这样注释的方法,其中任何使用@ThreadSafe进行注释的方法。 我正在寻找一种工具,可以让我编写这样的测试。
我已经看过源代码分析器,例如CheckStyle和PMD,它们并没有真正的跨类分析能力。 字节码分析器,例如FindBugs和JLint似乎相当难以扩展。
我会接受甚至更简单的解决方案,但存在相同的困难:编写自定义规则,检查每个重写方法是否带有@Override注释。
4个回答

3

你尝试过FindBugs吗?它实际上支持一组线程安全注释(与Java并发实践中使用的相同)。此外,您可以编写自己的自定义规则。我不确定是否可以进行跨类分析,但我相信是可以的。

Peter Ventjeer有一个并发检查工具(使用ASM)来检测这样的问题。我不确定他是否已经公开发布了它,但他可能能够帮助您。

我相信Coverity的静态/动态分析工具可以进行此类检查。


2
你可以在PMD中进行跨类分析(虽然我从未用过它来实现这个特定的目的)。我认为可以使用他们所记录的这种访问者模式,但具体细节我会留给你自己去处理。

0
一个简单的检查注释的工具是apt(http://java.sun.com/j2se/1.5.0/docs/guide/apt/也是Java 6 api中javax.annotation.processing的一部分),但这只有类型信息(即我找不到使用javax.lang.model api快速获取继承层次结构的方法,但如果您可以加载类,则可以使用反射获取该信息)。

0

尝试使用javap +正则表达式(例如Perl)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接