Java Sonar误报规则:不应取消对空指针的引用
我接到了一个关于这个呼叫的声纳警报Java Sonar误报规则:不应取消对空指针的引用,java,sonarqube,Java,Sonarqube,我接到了一个关于这个呼叫的声纳警报minRating.getRatgCaam() 警报与声纳规则相关:不应取消对空指针的引用。 例: 方法isNR(minRating)是一个辅助方法,如果对象minRating为null,则该方法除其他外可以进行验证 public boolean isNR(AgencyRating rating) { return rating == null || isNR(rating.getRatgCaam()); } 当我按照sonar的建议添加NOTNULL
minRating.getRatgCaam()
警报与声纳规则相关:不应取消对空指针的引用。
例:
方法isNR(minRating)
是一个辅助方法,如果对象minRating为null,则该方法除其他外可以进行验证
public boolean isNR(AgencyRating rating) {
return rating == null || isNR(rating.getRatgCaam());
}
当我按照sonar的建议添加NOTNULL验证时。声纳没问题
if (minRating !=null && !getRatingUtilities().isNR(minRating)) {
return minRating.getRatgCaam(); // no more alert
}
Sonar无法确定辅助方法是否进行了空验证。我不需要再次进行验证
我的病例是假阳性吗 这确实是一个误报,因为在编写本文时,sonarqube java analyzer(在编写本文时为4.2.1版)不支持跨过程分析,因此它无法确定要使条件为真,minRating的值必须为非null
这是我们目前正在大力开发的一项功能,以便能够关闭此类误报。现在(sonarqube java analyzer版本4.3.0.7717)它得到了支持,并且工作正常这是一个误报,但无论如何,最好不要执行
null
检入isNR
。rating.getRatgCaam()版本做什么?
if (minRating !=null && !getRatingUtilities().isNR(minRating)) {
return minRating.getRatgCaam(); // no more alert
}