es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Falso positivo de SonarLint en advertencia de NullPointer (S2259) al utilizar ResponseEntity.

Para operaciones generales de restTemplate, como:

ResponseEntity<responsevo> response = restTemplate.postForEntity(url, entity, ResponseVO.class);
if (response.getBody() != null) {
    String url = response.getBody().getUrl();
}

Estoy recibiendo una advertencia incorrecta de sonar al reutilizar el ResponseEntity:

Se podría lanzar una "NullPointerException"; "getBody()" puede devolver nulo. sonarlint(java:S2259)

También, si refactorizo e introduzco una variable, no aparece la advertencia:

ResponseVO body = response.getBody();
if (body != null) {
    String url = body.getUrl();
}

No necesito agregar response != null, si lo agrego, aparece una advertencia diferente (correcta):

Elimine esta expresión que siempre se evalúa como "verdadera" [+3 ubicaciones] sonarlint(java:S2589)

¿Es un bug de SonarLint? ¿Por qué advierte sobre NullPointerException?

Sospecho que está relacionado con la definición de @Nullable en HttpEntity.

@Nullable
public T getBody() {
}

No encontré un problema similar en jira.sonarsource.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    La advertencia de SonarLint no es un error sino una advertencia válida basada en el análisis del código. La advertencia se activa debido a la posibilidad de que se lance un nullPointerException al llamar al método getBody(), el cual está marcado como @Nullable en la clase HttpEntity. Esto significa que el método puede devolver null y, si lo hace, llamar a cualquier método sobre él podría generar un nullPointerException.

    Para evitar la advertencia, puedes refactorizar el código y almacenar el resultado de response.getBody() en una variable, como se muestra en el segundo ejemplo. De esta manera, puedes comprobar explícitamente si la variable es null y SonarLint ya no generará la advertencia.

    Añadir response != null no es necesario, ya que la condición if ya maneja la comprobación de null. La advertencia generada en este caso está relacionada con redundancia de código, la cual puede resolverse eliminando la expresión innecesaria.

    Es importante destacar que las advertencias de SonarLint deben considerarse como pautas y depende del desarrollador decidir si y cómo manejarlas. En algunos casos, la advertencia puede no ser relevante o puede requerir un enfoque diferente, basado en el caso de uso específico.

Comments are closed.