我的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