У Sonarqube есть проблема с не закрытием возвращенного объекта. Как мне это исправить? - PullRequest
0 голосов
/ 05 июня 2019

Я пытаюсь исправить некоторые проблемы, обнаруженные Sonarqube, и у меня есть несколько, которые по сути совпадают с примером, показанным здесь.Это говорит мне, что я должен закрыть объект, но я не могу этого сделать, если объект - это то, что метод возвращает вызывающей стороне, могу ли я?

package my.qe.codereview.myservice.data;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Properties;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.PreparedStatementCreator;
import org.springframework.stereotype.Component;

import my.qe.review.integration.to.StatusHistoryInsertRequest;

@Component
public class InsertStatusHistoryPSCBuilder {

    @Autowired
    private Properties queryProps;

    public PreparedStatementCreator build(final StatusHistoryInsertRequest request) {
        return new PreparedStatementCreator() {
            @Override
            public PreparedStatement createPreparedStatement(Connection con) throws SQLException {
                PreparedStatement pst = con.prepareStatement(queryProps.getProperty("insertStatusHistory"));

                pst.setObject(1, request.getReviewStatusHistoryId());
                pst.setObject(2, request.getReviewHistoryId());

                return pst;
            }
        };
    }
}

Я погуглил вопрос и какПримеры исправления Я мог найти все вовлеченные объекты, которые существуют только в рамках рассматриваемого метода.Никто не обращался к ситуации, когда объект возвращается методом, как здесь.У меня нет контроля над тем, что делает вызывающая сторона с объектом после того, как я вернусь.

Что я могу сделать, чтобы решить эту проблему?Я предполагаю, что вы не можете закрыть объект и все равно вернуть его (это правильно?).Или реальная проблема заключается в том, что метод включает в себя вызов другого метода, который может вызвать исключение, и мне нужно перехватывать, закрывать и перебрасывать?

Обновление: использование try-with-resources для создания объекта Closeableне сработало, так как объект все еще закрывается под крышками до возврата метода, что приводит к тому, что вызывающая сторона выдает исключение, потому что возвращаемый объект был закрыт (что отвечает на вопрос в предыдущем абзаце).В настоящее время я не знаю способа вернуть объект Closeable, если Sonarqube не пометит его как блокировщик.

Было предложено пометить его как ложноположительный.Я не уверен, если это вариант в моей рабочей среде.

...