特定のメソッドが null を返すかどうかをプログラムで検出する必要があります。
チェッカー フレームワークはこれを実行できるようですが、注釈付きのソース コードでのみ可能です。バイトコードで必要です。具体的には、次のような主張を検証する必要があります。
Method x.y.Z#foo() cannot return null.
クラス xyZ のバイトコードしかない場所
それをサポートするツールを知っていますか?
これは一般的なケースでも可能ですか?私が見る限り、プログラムの正確なパスを把握する必要がないため、これは停止問題と同等ではありません。たとえば、
Foo bar() {
if (cond) { return null; } else { return new Foo(); }
}
分析ツールは を気にする必要はありませんcond
。考えられるすべてのパスの少なくとも 1 つでnull
が返されることに注意するだけで十分です。
cond
注: 誤検知を受け入れます。たとえば、false
分析ツールは、bar() が null を返す可能性があると主張する可能性があります (これは、真でなければならない一般的なケースで証明できないと言っているのと同じcond
です)。