Статический анализ ловит возможный нулевой указатель, возвращаемый из вызова метода

Используя статический анализ, можно ли предупредить о следующем коде?

public class IntegerConversion {
    static int value; // Notice this is an int and not Integer
    public static Integer strToInt(String s) {
        Integer k;
        try {
            k= Integer.parseInt(s);
        } catch (NumberFormatException e) {
            k = null;
        }
        return k;
    }

    public static void main(String[] args) {
        // possible null pointer here as strToInt can return null
        value = strToInt("abc"); 
    }
}

Я использую Spotbugs (преемник findbugs), и он корректно предупреждает о коде, если назначение выполняется в том же методе, как показано ниже.

public class IntegerConversion {
    static int value;
    public static void strToInt(String s) {
        Integer k;
        try {
            k= Integer.parseInt(s);
        } catch (NumberFormatException e) {
            k = null;
        }
        value = k; // spot bugs alert on this line
    }

    public static void main(String[] args) {
        strToInt("abc");
    }
}

Является ли недостающее предупреждение в первом фрагменте кода выбором дизайна или техническим ограничением? Существуют ли другие инструменты статического анализа для Java, которые могут поймать эту ошибку?

0 ответов

Другие вопросы по тегам