4

我正在尝试编写规则来检测带注释的多线程 Java 程序中的一些错误。作为一个玩具示例,我想检测是否有任何用 @ThreadSafe 注释的方法调用了没有这种注释的方法,没有同步。我正在寻找一种工具,可以让我编写这样的测试。

我看过源分析器,例如 CheckStyle 和 PMD,它们并没有真正的跨类分析功能。字节码分析器,如 FindBugs 和 JLint 似乎很难扩展。

我愿意为更简单的事情找到一个解决方案,但也带来了同样的困难:编写一个自定义规则来检查每个被覆盖的方法是否使用@Override 进行注释。

4

4 回答 4

3

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

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

而且我相信Coverity 的线程安全静态/动态分析工具会像这样进行检查。

于 2008-11-20T12:33:04.793 回答
2

您可以在 PMD 中进行跨类分析(尽管我从未将它用于此特定目的)。我认为可以使用他们记录的这种访问者模式,但我会将细节留给您。

于 2008-11-14T10:26:47.157 回答
0

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

于 2008-11-10T15:45:58.767 回答
0

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

于 2008-11-10T16:01:56.973 回答