Est-ce que quelqu'un sait pourquoi SonarQube détecte une violation de la règle "Les blocs conditionnellement exécutés doivent être accessibles" (squid:S2583) dans l'exemple suivant? Est-ce un faux positif?Sonar semble ignorer les variables définies dans le bloc catch
Dans ce morceau de code Java, un fichier est lu et un EOFException
(ou plusieurs d'entre eux) peut apparaître dans le processus de lecture du flux d'entrée. Ainsi, l'exception est interceptée et gérée, et un drapeau est défini pour se souvenir que cela s'est produit. Cependant, Sonar ne considère pas la ligne exHappened = true;
dans le premier bloc de capture et affirme que la variable est toujours false
:
public static boolean doSomething() {
boolean exHappened = false;
try (DataInputStream s = new DataInputStream(new FileInputStream("test"))) {
LOGGER.info("Doing something...");
}
catch (EOFException eof) { // this Exception can definitely happen
exHappened = true;
}
catch (IOException io) {
LOGGER.error("sorry", io);
}
if (exHappened) { // Sonar thinks this condition is always false
return false;
}
else {
return true;
}
}
Pour le rendre encore plus clair, ajouter un throw new EOFException()
dans le try { }
, la condition sera toujours être vrai et Sonar prétend encore que toujours faux ...
(J'utilise sonarqube 5.6.6 et plug-in SonarJava 4.13.0.11627)
Selon https://www.sonarqube.org/community/feedback/, sonarqube Google Group est mieux de mettre à signaler des bugs, et leur JIRA est probablement le meilleur. –
Vous avez raison. La prochaine fois que je publierai des questions sur les faux positifs possibles dans le groupe Google de SonarQube (leur JIRA est en lecture seule, soit dit en passant). – dokaspar
Vous pouvez poser des questions à Google Group ou ici, les deux chaînes sont surveillées par la communauté. Quelle est la version du plugin SonarJava et de SonarQube que vous utilisez? –