# V6114. The 'A' class containing Closeable members does not release the resources that the field is holding.

Анализатор обнаружил в классе поля, реализующие интерфейс 'Closeable' (или 'AutoCloseable'), но ни в одном методе анализируемого класса для них не был вызван метод 'close'. Такой код говорит о том, что ресурс может быть не закрыт.

    class A {
      private FileWriter resource;
      public A(String name) throws IOException {
        resource = new FileWriter(name);
      }
      ....
    }

В данном примере поле 'resource' было инициализировано, но внутри класса 'A' для него не было вызова метода 'close'. Отсутствие вызова метода закрытия приводит к тому, что ресурс не будет освобождён, даже когда ссылка на объект класса 'A' будет утеряна. Из-за этого может произойти нарушение логики работы программы. Например, если ресурс не будет освобождён, то из-за этого будет невозможно получить доступ к нему из другой части кода.

Исправить подобную ситуацию можно несколькими способами. Одним из них является добавление в класс 'A' интерфейса 'Closeable' или 'AutoClosable' с методом 'close', внутри которого будет происходить закрытие ресурса:

    class A implements Closeable {
      private FileWriter resource;
      public A(String name) throws IOException {
        resource = new FileWriter(name);
      }
      public void close() throws IOException {
        resource.close();
      }
    }

Не всегда логика программы позволяет реализовать в классе этот интерфейс. Альтернативным решением будет закрытие ресурса в одном из методов класса 'A':

    class A {
      private FileWriter resource;
      public A(String name) throws IOException {
        resource = new FileWriter(name);
      }
      public void method() throws IOException {
        ....
        resource.close();
        ....
      }
    }

Выявляемые диагностикой ошибки классифицируются согласно ГОСТ Р 71207–2024 как критические и относятся к типу: Ошибки утечек памяти, незакрытых файловых дескрипторов и дескрипторов сетевых соединений [* см. примечание касательно языков C#, Java].

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

CWE-404