【问题标题】:Cross-class-capable extendable static analysis tool for java?java的跨类可扩展静态分析工具?
【发布时间】:2008-11-09 21:08:35
【问题描述】:

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

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

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

【问题讨论】:

    标签: java multithreading annotations static-analysis


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

      您可以使用cross-class analysis in PMD(尽管我从未将它用于此特定目的)。我认为可以使用他们记录的这种访问者模式,但我会将具体细节留给您。

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          【解决方案4】:

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

          【讨论】:

            猜你喜欢
            • 2010-11-05
            • 1970-01-01
            • 2015-07-05
            • 2010-09-10
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2010-11-19
            • 2011-12-01
            相关资源
            最近更新 更多