J'utilise les rulesets strings.xml
et unusedcode.xml
avecUnusedFormalParameter contre AvoidDuplicateLiterals dans maven-plugin-PMD
<?xml version="1.0"?>
<ruleset name="Custom ruleset"
xmlns="http://pmd.sourceforge.net/ruleset/2.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://pmd.sourceforge.net/ruleset/2.0.0 http://pmd.sourceforge.net/ruleset_2_0_0.xsd">
<description>
The default ruleset
</description>
<rule ref="rulesets/java/strings.xml"/>
<rule ref="rulesets/java/unusedcode.xml"/>
</ruleset>
dans le maven-pmd-plugin
intégrés comme suit:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-pmd-plugin</artifactId>
<version>3.8</version>
<executions>
<execution>
<id>pmd-check</id>
<phase>validate</phase>
<goals>
<goal>check</goal>
</goals>
</execution>
</executions>
<configuration>
<printFailingErrors>true</printFailingErrors>
<detail>true</detail>
<rulesets>
<ruleset>${basedir}/src/main/resources/ruleset.xml</ruleset>
</rulesets>
</configuration>
</plugin>
Alors que je reçois le problème suivant dans le cas d'utilisation suivant:
public class NewClass { private final static String PMD_UNUSED_FORMAL_PARAMETER = "PMD.UnusedFormalParameter"; @SuppressWarnings(PMD_UNUSED_FORMAL_PARAMETER) private void someMethod1(Object parameter1) { System.out.println("someMethod1"); } @SuppressWarnings("PMD.UnusedFormalParameter") private void someMethod2(Object parameter1) { System.out.println("someMethod2"); } @SuppressWarnings("PMD.UnusedFormalParameter") private void someMethod3(Object parameter1) { System.out.println("someMethod3"); } @SuppressWarnings("PMD.UnusedFormalParameter") private void someMethod4(Object parameter1) { System.out.println("someMethod4"); } public static void main(String[] args) { NewClass newClazz = new NewClass(); newClazz.someMethod1(null); newClazz.someMethod2(null); newClazz.someMethod3(null); } }
la valeur du paramètre d'annotation "PMD.UnusedFormalParameter"
apparaît 4 fois entraîne une violation AvoidDuplicateLiterals
. le remplacement de la chaîne par la constante private final static
commentée provoque l'annulation de l'annotation et donc une violation UnusedFormalParameter
.
Je ne connais pas les internes de PMD. En tant qu'utilisateur prêt à l'emploi, il semble étrange que PMD ne substitue pas la variable à sa valeur (même s'il s'agit probablement d'une tâche sensible au contexte, cela devrait être possible dans le cadre de l'analyse de code statique). et que UnusedFormalParameter
n'exclut pas les valeurs de chaîne qui sont évidemment utilisées pour supprimer d'autres vérifications et ne sont présentes qu'à cause de PMD. J'utilise maven-pmd-plugin
3.8.