Je viens de tomber sur quelques bugs sympa causés par un désir fou de faire baisser les niveaux d'alertes dans Sonar.

Et oui PMD (intégré à Sonar) râle lorsque l'on fait un new Integer(1). Cela dit la solution n'est pas de remplacer new Integer(1) par 1. Et oui faire ce changement la peu provoquer des problèmes. Si le new Integer(1) était un paramètre d'appel de méthode cela peut changer la méthode appelée. Dans mon cas il est arrivé sur une modification de ce genre que l'on passe d'un appel à une méthode add(Obect o, Object constraint) à add(Object o, int i) qui n'avait pas du tout les mêmes fonctions ! Et oui elles appellent toutes les deux la méthode add(Object o, Object constraint, int index)... Vous voyez où je veux en venir ??? :-)

Bref n'écoutez pas bêtement les outils de qualité de code ils peuvent vous faire faire des bétises, ou alors écoutez les bien. En l’occurrence sur une instanciation d'Integer PMD donne le message suivant :

Avoid instantiating Integer objects. Call Integer.valueOf() instead.

C'est d'ailleurs la solution sûr pour régler le warning puisque Integer.valueOf() va renvoyer un objet Integer et non un int. Son intérêt par rapport à l'instanciation brute d'un Integer et qu'il utilise un système de cache des Integers.

J'ai pu constater plusieurs commits sur d'autres projets qui, pour faire baisser des alertes sonar, ont sûrement provoqué des bugs. Par exemple un jour j'ai vu un petit rigolo s'amuser à remplacer plusieurs :

int a = 10;
StringBuffer sb = new StringBuffer();
//... bla bla ...
sb.append(" " + a);
return sb.toString();

par

int a = 10;
StringBuffer sb = new StringBuffer();
//... bla bla ...
sb.append(' ' + a);
return sb.toString();

(Là, maintenant comme ça, à chaud, vous voyez ce que ça change ? ;-))

Alors maintenant que faire, certaines modifications ont pû provoquer des bugs qui ont été fixés en amont, d'autres peuvent être toujours là. La question est : est ce qu'il faut les fixer. Essayer de les fixer pourrait provoquer d'autres problèmes (si par exemple d'autres bouts de code on été modifiés pour répondre aux modifs initiales...).

Bref ma conclusion est que ce genre d'outils c'est bien, mais qu'il faut faire attention. Rien ne remplace une charte de codage fourni au début d'un projet et à laquelle les développeurs doivent se tenir. Eventuellement il est bien d'avoir un outil de qualité qui remonte les effractions au fur et à mesure du développement. Mais déployer un tel outil quand le projet a déjà de l'âge et écouter les alertes sur le code existant peut être dangereux...