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-unsubscr...@commons.apache.org
For additional commands, e-mail: dev-h...@commons.apache.org

Reply via email to