我需要以编程方式检测给定方法是否可能返回 null。
检查器框架似乎能够做到这一点,但仅限于带注释的源代码。我需要它的字节码。具体来说,我需要验证以下声明:
Method x.y.Z#foo() cannot return null.
我只有 xyZ 类的字节码
你知道有什么工具可以支持吗?
在一般情况下这甚至可能吗?据我所知,它不等同于停机问题,因为不需要找出程序的确切路径。例如在
Foo bar() {
if (cond) { return null; } else { return new Foo(); }
}
分析工具不需要关心cond
,只要注意至少在所有可能的路径中,null
返回一个就足够了,因此可以拒绝 bar 不能返回 null 的说法。
注意:我会接受误报,例如,cond
可能是公正false
的,分析工具仍然可以声称 bar() 可以返回 null(这相当于说我们不能在一般情况下证明cond
必须为真)。