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

我查看了源分析器,比如CheckStyle和PMD,他们并没有真正的跨类分析功能。像FindBugs和JLint这样的字节码分析器似乎很难扩展。

我决定寻求更简单的解决方案,但也会遇到同样的困难:编写一个自定义规则来检查每个覆盖方法是否都使用@Override进行注释。

有帮助吗?

解决方案

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

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

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

其他提示

你可以在PMD中跨班分析(虽然我从来没有用于此特定目的)。我认为可以使用他们记录的访客模式,但我会将具体内容留给您。

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

尝试javap + regexes(例如Perl)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top