我的Sonar 6.7.1 LTS实例在以下代码中无法识别NullPointerException:

public static boolean getBooleanFromMap() {
    final Map<String, Boolean> map = new HashMap<>();
    map.put("a", false);
    return map.get("b"); // line 118
}

public static void main(final String[] args) {
    System.out.println(getBooleanFromMap());
}


在方法“ getBooleanFromMap()”中,从HashMap检索一个空布尔值,然后将该空值拆箱并作为布尔值返回(在我的示例中为第118行)。
取消装箱会导致NullPointerException,例如,在运行“ main”方法时。

Sonar(具有内置的Java分析器5.1(内部版本13090))对此没有抱怨。为什么?

另外,当我没有HashMap而是具有“ org.apache.sling.api.resource.ValueMap”的更复杂的方法时,其中的“ get”方法甚至用@CheckForNull进行了注释,Sonar也看不到任何东西。
有什么办法可以使声纳抱怨吗?

最佳答案

当前不支持对空值拆箱的检测。

您可以按照此票证https://jira.sonarsource.com/browse/SONARJAVA-2126

10-07 23:56