声纳对规则的误报:不应取消引用空指针

Jes*_*rce 5 java sonarqube

我在这次通话中收到了声纳警报minRating.getRatgCaam()

该警报与声纳规则有关:不应取消引用空指针。

前任:

AgencyRating minRating = null;
.......
if (!getRatingUtilities().isNR(minRating)) {
    return minRating.getRatgCaam(); //Sonar: Null pointers should not be dereferenced
}
Run Code Online (Sandbox Code Playgroud)

该方法isNR(minRating)是一个辅助方法,用于验证对象 minRating 是否为 null

public boolean isNR(AgencyRating rating) {
    return rating == null || isNR(rating.getRatgCaam());
}
Run Code Online (Sandbox Code Playgroud)

当我按照声纳建议添加非空验证时。声纳没问题。

if (minRating !=null  && !getRatingUtilities().isNR(minRating)) {
    return minRating.getRatgCaam(); // no more alert
}
Run Code Online (Sandbox Code Playgroud)

Sonar 无法确定辅助方法是否进行了 null 验证。我不需要再次进行此验证。

我的病例是误报吗?

ben*_*ico 3

这确实是一个误报,因为在撰写本文时,sonarqube java 分析器(撰写本文时的版本为 4.2.1)不支持跨过程分析,因此它无法确定条件是否为真,minRating 的值必须非空。

我们目前正在大力开发这一功能,以消除此类误报。