我在这个电话上有一个声纳警报minRating.getRatgCaam()
警报与声纳规则有关:不应取消引用空指针.
例如:
AgencyRating minRating = null;
.......
if (!getRatingUtilities().isNR(minRating)) {
return minRating.getRatgCaam(); //Sonar: Null pointers should not be dereferenced
}
方法isNR(minRating)是一个辅助方法,如果对象minRating为null,则验证其他方面
public boolean isNR(AgencyRating rating) {
return rating == null || isNR(rating.getRatgCaam());
}
当我添加非空验证作为声纳建议.声纳没问题.
if (minRating !=null && !getRatingUtilities().isNR(minRating)) {
return minRating.getRatgCaam(); // no more alert
}
声纳无法确定辅助方法是否进行了空验证.我不需要再次进行此验证.
我的案子是假阳性吗?
解决方法:
这确实是一个误报,因为在撰写本文时,sonarqube java分析器(编写时的4.2.1版本)不支持跨程序分析,因此无法确定条件是否为真,minRating的值必须为非null.
这是我们目前正在努力解决此类误报的一项功能.