Affects PMD Version: 7.17.0
Description:
In ModifierOrderRule for the typeAnnotations property the TypeAnnotationPosition enum is used. The ModifierOrder docs show as possible values: on type, on decl and anywhere (default). Note the space is the first two values.
When using these as values in a custom override, there is an xml exception during parsing:
[ERROR] Error at /.../pmd-main.xml:196:40
194| <priority>3</priority>
195| <properties>
196| <property name="typeAnnotations" value="on decl" />
^^^^^ Value should be one of ''ontype'', ''anywhere'', ''ondecl''
In the enum there is a label() to translate to ontype and ondecl (without space).
Exception Stacktrace:
java.lang.IllegalStateException: net.sourceforge.pmd.lang.rule.RuleSetLoadException: Cannot load ruleset /.../pmd-main.xml: 2 XML validation errors occurred
at org.sonar.plugins.pmd.AbstractPmdExecutor.createRuleSet(AbstractPmdExecutor.java:202)
at org.sonar.plugins.pmd.AbstractPmdExecutor.executeRules(AbstractPmdExecutor.java:176)
at org.sonar.plugins.pmd.PmdJavaExecutor.executePmd(PmdJavaExecutor.java:68)
at org.sonar.plugins.pmd.AbstractPmdExecutor.execute(AbstractPmdExecutor.java:90)
at org.sonar.plugins.pmd.PmdSensor.execute(PmdSensor.java:97)
at org.sonar.scanner.sensor.AbstractSensorWrapper.analyse(AbstractSensorWrapper.java:69)
at org.sonar.scanner.sensor.ModuleSensorsExecutor.execute(ModuleSensorsExecutor.java:88)
at org.sonar.scanner.sensor.ModuleSensorsExecutor.lambda$execute$1(ModuleSensorsExecutor.java:61)
at org.sonar.scanner.sensor.ModuleSensorsExecutor.withModuleStrategy(ModuleSensorsExecutor.java:79)
at org.sonar.scanner.sensor.ModuleSensorsExecutor.execute(ModuleSensorsExecutor.java:61)
at org.sonar.scanner.scan.SpringModuleScanContainer.doAfterStart(SpringModuleScanContainer.java:80)
at org.sonar.core.platform.SpringComponentContainer.startComponents(SpringComponentContainer.java:227)
at org.sonar.core.platform.SpringComponentContainer.execute(SpringComponentContainer.java:206)
at org.sonar.scanner.scan.SpringProjectScanContainer.scan(SpringProjectScanContainer.java:212)
at org.sonar.scanner.scan.SpringProjectScanContainer.scanRecursively(SpringProjectScanContainer.java:208)
at org.sonar.scanner.scan.SpringProjectScanContainer.doAfterStart(SpringProjectScanContainer.java:178)
at org.sonar.core.platform.SpringComponentContainer.startComponents(SpringComponentContainer.java:227)
at org.sonar.core.platform.SpringComponentContainer.execute(SpringComponentContainer.java:206)
at org.sonar.scanner.bootstrap.SpringScannerContainer.doAfterStart(SpringScannerContainer.java:339)
at org.sonar.core.platform.SpringComponentContainer.startComponents(SpringComponentContainer.java:227)
at org.sonar.core.platform.SpringComponentContainer.execute(SpringComponentContainer.java:206)
at org.sonar.scanner.bootstrap.SpringGlobalContainer.doAfterStart(SpringGlobalContainer.java:142)
at org.sonar.core.platform.SpringComponentContainer.startComponents(SpringComponentContainer.java:227)
at org.sonar.core.platform.SpringComponentContainer.execute(SpringComponentContainer.java:206)
at org.sonar.scanner.bootstrap.ScannerMain.runScannerEngine(ScannerMain.java:157)
at org.sonar.scanner.bootstrap.ScannerMain.run(ScannerMain.java:72)
at org.sonar.scanner.bootstrap.ScannerMain.main(ScannerMain.java:56)
Caused by: net.sourceforge.pmd.lang.rule.RuleSetLoadException: Cannot load ruleset /.../pmd-main.xml: 2 XML validation errors occurred
at net.sourceforge.pmd.lang.rule.RuleSetFactory.readDocument(RuleSetFactory.java:196)
at net.sourceforge.pmd.lang.rule.RuleSetFactory.createRuleSet(RuleSetFactory.java:119)
at net.sourceforge.pmd.lang.rule.RuleSetFactory.createRuleSet(RuleSetFactory.java:114)
at net.sourceforge.pmd.lang.rule.RuleSetLoader.loadFromResource(RuleSetLoader.java:248)
at net.sourceforge.pmd.lang.rule.RuleSetLoader.loadFromResource(RuleSetLoader.java:139)
at org.sonar.plugins.pmd.AbstractPmdExecutor.parseRuleSetWithReporter(AbstractPmdExecutor.java:216)
at org.sonar.plugins.pmd.AbstractPmdExecutor.createRuleSet(AbstractPmdExecutor.java:200)
... 26 common frames omitted
Code Sample demonstrating the issue:
<rule ref="category/java/codestyle.xml/ModifierOrder">
<priority>3</priority>
<properties>
<property name="typeAnnotations" value="on decl" />
</properties>
</rule>
Steps to reproduce:
Please provide detailed steps for how we can reproduce the bug.
pmd-bin-7.17.0/bin/pmd check -v -R /.../pmd-main.xml -d .
Running PMD through: CLI | Maven
Note:
Enums for properties seem not consistent in the display/label approach: other enums have toString() and getDisplayName() and also a comment that RuleDocGenerator uses the toString(). E.g. net.sourceforge.pmd.lang.java.rule.bestpractices.AvoidReassigningLoopVariablesRule.ForeachReassignOption. This might be the way for all enums?
Enum net.sourceforge.pmd.lang.java.rule.bestpractices.AvoidUsingHardCodedIPRule.AddressKinds also has a label, but implemented a bit different.
Affects PMD Version: 7.17.0
Description:
In
ModifierOrderRulefor thetypeAnnotationsproperty theTypeAnnotationPositionenum is used. The ModifierOrder docs show as possible values:on type,on declandanywhere(default). Note the space is the first two values.When using these as values in a custom override, there is an xml exception during parsing:
In the enum there is a
label()to translate toontypeandondecl(without space).Exception Stacktrace:
Code Sample demonstrating the issue:
Steps to reproduce:
Please provide detailed steps for how we can reproduce the bug.
pmd-bin-7.17.0/bin/pmd check -v -R /.../pmd-main.xml -d .Running PMD through: CLI | Maven
Note:
Enums for properties seem not consistent in the display/label approach: other enums have
toString()andgetDisplayName()and also a comment thatRuleDocGeneratoruses thetoString(). E.g.net.sourceforge.pmd.lang.java.rule.bestpractices.AvoidReassigningLoopVariablesRule.ForeachReassignOption. This might be the way for all enums?Enum
net.sourceforge.pmd.lang.java.rule.bestpractices.AvoidUsingHardCodedIPRule.AddressKindsalso has alabel, but implemented a bit different.