PMD : c’est un outil qui parcours le code source Java et recherche des problèmes potentiels.
PMD possède une liste de règles à vérifier, ces règles sont regroupées comme suit :
Règles dédiées au Finalizers : Ce groupe contient les règles en rapport avec le codage des « Finalizers ».
Règles dédiées au code non utilisé : Ce groupe contient une collection de règles qui ont pour but de trouver le code non utilisé.
Règles controversées : Contient les règles qui ne jouissent pas d’une unanimité sur l’intérêt de leur application, elles sont séparées des autres règles pour pouvoir donner à l’utilisateurs de PMD la possibilité des les appliquer ou pas.
Parmi les règles contenus dans ce groupe :
AtLeastOneConstructor : cette règle vérifie si la classe possède un constructeur au minimum.
SingularField : un champs de classe utilisé uniquement par une seule méthode peut être remplacé par une variable locale à la méthode.
Règles d’optimisation : Ce groupe de règles à pour but d’imposer les bonnes pratiques de codage qui ont pour but d’optimiser les performances du code, par exemple :
AvoidInstantiatingObjectsInLoops : Détecte les endroits où il existe des instanciation d’objets dans une boucle.
UseStringBufferForStringAppends : Détecte les endroit du code où il y a une concaténation de chaînes de caractère et conseille d’utiliser des StringBuffers pour faire cette opération car c’est plus rapide à l’exécution.
Règles basiques : Ce groupe contient un ensemble de bonnes pratiques que chaque un se doit de respecter.
Règles de conception : Ce groupe contient un certain nombre de règles qui détectent les zones floues de la conception du code audité.
Règles relatives aux exceptions : Ce groupe contient les règles relatives à la capture et au renvoi d’exceptions.
Règles relatives aux JavaBeans : Ce groupe contient les règles qui détectent les JavaBeans qui ne respectent pas les règles de codage de ce type de classes.
Règles relatives aux java.lang.String : Ce groupe contient les règles qui démontrent les différents problèmes qui peuvent apparaître lors de la manipulation des objets de type java.lang.String.
Règles relatives à la taille du code : Ce groupe contient les règles qui contrôlent la taille des différentes composantes du code.
Règles relatives au imports : Ce groupe contient les règles relatives à l’optimisation des imports.
Règles relative à l’utilisation de la méthode Clone() : Ce groupe contient les règles qui détectent les éventuels problèmes qui peuvent être rencontrés lors d’une mauvaise utilisation de la méthode Clone().
Règles de nommage : Ce groupe contient les règles qui s’occupent de vérifier les différentes règles de nommage des composantes du code.
Règles relatives aux logs : Ce groupe contient les règles qui régissent les logs de l’application.
Règles relatives aux accolades : Contient un groupe de règles relatives à la disposition des accolades.