Анализатор обнаружил потенциальную ошибку, которая может привести к использованию нулевого объекта.
Анализатор заметил в коде следующую ситуацию. Вначале объект используется. А уже затем этот объект проверяется на значение 'null'. Это может означать одно из двух:
1) Возникнет ошибка, если объект будет равен 'null'.
2) Программа всегда работает корректно, так как объект всегда не равен null. Проверка является лишней.
Рассмотрим фрагмент кода, на котором анализатор выдаст предупреждение:
boolean isSomething(String str)
{
String prepareStr = prepare(str);
if (prepareStr.contains("*?*"))
{
...
}
...
return prepareStr == null ? false : prepareStr.contains("?*?");
}
Итак, в вышеприведенном примере потенциальная ошибка или лишнее сравнение? Сначала с переменной 'prepareStr' идут какие-то вычисления, а в конце она проверяется на null. Здесь имеет место быть возможен как первый, так и второй случай. Если все же метод 'prepare' может вернуть null, то необходимо внести изменения в код:
boolean isSomething(String str)
{
String prepareStr = prepare(str);
if (prepareStr == null) {
return false;
}
if (prepareStr.contains("*?*"))
{
//...
}
//...
return prepareStr.contains("?*?");
}
Если же 'prepare' не возвращает 'null', то просто можно убрать сравнение с null, чтобы не путать ваших коллег-разработчиков.
Данная диагностика классифицируется как:
Взгляните на примеры ошибок, обнаруженных с помощью диагностики V6060. |