java - 规则 : Null pointers should not be dereferenced 上的 Sonar 误报

标签 java sonarqube

我在这个调用 minRating.getRatgCaam() 上有一个 Sonar 警报

警报与 Sonar 规则相关:不应取消引用空指针。

例如:

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());
}

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

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

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

我的案例是误报吗?

最佳答案

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

这是我们目前正在大力开发的一项功能,能够关闭此类误报。

关于java - 规则 : Null pointers should not be dereferenced 上的 Sonar 误报,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40047851/

相关文章:

ant - SonarQube 分析需要太多时间

java - 将 switch case 重构为 HashMap : extra memory usage?

java - SuppressWarnings 不适用于 Sonarqube

java - Spring MVC 试图通过 url 传递变量。 @Path变量

ant - 如何增加Sonar java堆大小?

web-services - 如何在 Sonar REST api 中获取特定指标的所有值

gwt - emma/sonar/jacoco 的代码覆盖率

java - 自定义 FTP 应用程序 : representing status and error codes

java - 无法从扩展类获取属性值

java - 除非那些内部类也被声明为静态,否则我们不能在 [public] 内部类中声明静态方法的确切原因是什么?azi