commons-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Alex Herbert <alex.d.herb...@gmail.com>
Subject [rng] Suppress PMD violations
Date Wed, 22 May 2019 15:09:37 GMT
I'm trying to get pmd:check to be useful.

This means fixing all the PMD violations. To fix some would be a 
refactor of reference algorithms which I do not want to start doing. So 
I've opted for the easier fix of increasing the allowed complexity.

Some PMD cheks I had to disable were:

- AccessorMethodGeneration

This allows internal private classes to access private methods of the 
outer class and vice versa. It could instead be fixed by changing to 
package-private methods where appropriate.

- OnlyOneReturn

There are many code examples of fast exit from methods with multiple 
return statements.

- BeanMembersShouldSerialize

I do not think we intend to have the classes as Serializable.

- DataflowAnomalyAnalysis

This rule is not very reliable [1]. It does not like a lot of the 
algorithms in the code that are established.


For one violation in sampling it can either be suppressed, or fixed by 
promoting a private class constructor to package-private. I think that 
the promotion to a package private constructor is OK. It is for this class:

LargeMeanPoissonSampler.LargeMeanPoissonSamplerState

This class is used by the LargeMeanPoissonSamplerCache and is already 
package-private. So making the constructor package private seems reasonable.


The options to suppress violations [2] are:

1. Use annotations

2. Use // NOPMD comment at the end of the offending line

3. Add suppression to the pmd configuration xml.

So not wanting to litter the code with comments and annotations I have 
updated the PMD xml to exclude certain checks.

There does not appear to be a separate PMD exclusions file in the manner 
of spotbugs. The exclusions performed at the configuration file use 
regular expressions so can be configured. But it requires XPath and the 
syntax for regular expressions doesn't work with examples I have tried. 
I have fixed it with explicit 'or' statements for matching multiple 
classes. I have not found out how to match a class and a method in the 
same expression. This could be used to narrow the scope of exclusions.


All changes are in this PR [3]. Have a look and see if you don't agree 
with the changes required.


Alex


[1] https://github.com/pmd/pmd/issues/873

[2] https://pmd.github.io/latest/pmd_userdocs_suppressing_warnings.html

[3] https://github.com/apache/commons-rng/pull/45



---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@commons.apache.org
For additional commands, e-mail: dev-help@commons.apache.org


Mime
View raw message