# V6060. The reference was used before it was verified against null.

Анализатор обнаружил потенциальную ошибку, которая может привести к использованию нулевого объекта.

Анализатор заметил в коде следующую ситуацию. Вначале объект используется. А уже затем этот объект проверяется на значение '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, чтобы не путать ваших коллег-разработчиков.

Данная диагностика классифицируется как:

CWE-476

Взгляните на примеры ошибок, обнаруженных с помощью диагностики V6060.