| <?xml version="1.0"?> |
| <!-- |
| Licensed to the Apache Software Foundation (ASF) under one or more |
| contributor license agreements. See the NOTICE file distributed with |
| this work for additional information regarding copyright ownership. |
| The ASF licenses this file to You under the Apache License, Version 2.0 |
| (the "License"); you may not use this file except in compliance with |
| the License. You may obtain a copy of the License at |
| |
| http://www.apache.org/licenses/LICENSE-2.0 |
| |
| Unless required by applicable law or agreed to in writing, software |
| distributed under the License is distributed on an "AS IS" BASIS, |
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| See the License for the specific language governing permissions and |
| limitations under the License. |
| --> |
| <ruleset name="commons-rng-customized" |
| 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> |
| This ruleset checks the code for discouraged programming constructs. |
| </description> |
| |
| <rule ref="category/java/bestpractices.xml"> |
| <exclude name="UseVarargs" /> |
| <!-- Allow private inner classes to access outer class methods/fields. --> |
| <exclude name="AccessorMethodGeneration" /> |
| </rule> |
| <rule ref="category/java/codestyle.xml"> |
| <exclude name="MethodArgumentCouldBeFinal" /> |
| <exclude name="ShortVariable" /> |
| <exclude name="LongVariable" /> |
| <exclude name="CommentDefaultAccessModifier" /> |
| <exclude name="DefaultPackage" /> |
| <exclude name="CallSuperInConstructor" /> |
| <exclude name="AbstractNaming" /> |
| <exclude name="UselessParentheses" /> |
| <exclude name="AtLeastOneConstructor" /> |
| <exclude name="GenericsNaming" /> |
| <exclude name="OnlyOneReturn" /> |
| <exclude name="UseUnderscoresInNumericLiterals" /> |
| </rule> |
| <rule ref="category/java/design.xml"> |
| <exclude name="TooManyMethods" /> |
| <exclude name="LawOfDemeter" /> |
| <exclude name="NcssCount" /> |
| <exclude name="LoosePackageCoupling" /> |
| </rule> |
| <rule ref="category/java/documentation.xml"> |
| <exclude name="CommentSize" /> |
| </rule> |
| <rule ref="category/java/errorprone.xml"> |
| <exclude name="BeanMembersShouldSerialize" /> |
| <!-- This rule is known to be poor with Java 5 and later: |
| https://github.com/pmd/pmd/issues/873 --> |
| <exclude name="DataflowAnomalyAnalysis" /> |
| </rule> |
| <rule ref="category/java/multithreading.xml"> |
| <!-- <exclude name="..." /> --> |
| </rule> |
| <rule ref="category/java/performance.xml"> |
| <!-- <exclude name="..." /> --> |
| </rule> |
| |
| <!-- Rule customisations. --> |
| |
| <rule ref="category/java/bestpractices.xml/MethodReturnsInternalArray"> |
| <properties> |
| <property name="violationSuppressXPath" value="//ClassOrInterfaceDeclaration[@SimpleName='ProviderBuilder']"/> |
| </properties> |
| </rule> |
| <rule ref="category/java/bestpractices.xml/ArrayIsStoredDirectly"> |
| <properties> |
| <!-- Array is generated internally in this case. --> |
| <property name="violationSuppressXPath" |
| value="//ClassOrInterfaceDeclaration[@SimpleName='PoissonSamplerCache' or @SimpleName='AliasMethodDiscreteSampler' |
| or @SimpleName='GuideTableDiscreteSampler' or @SimpleName='SharedStateDiscreteProbabilitySampler' |
| or @SimpleName='DirichletSampler']"/> |
| </properties> |
| </rule> |
| <rule ref="category/java/bestpractices.xml/SystemPrintln"> |
| <properties> |
| <property name="violationSuppressXPath" |
| value="//ClassOrInterfaceDeclaration[@SimpleName='DiceGameApplication' or @SimpleName='ComputePi' |
| or @SimpleName='UniformSamplingVisualCheckCommand' or @SimpleName='ProbabilityDensityApproximationCommand']"/> |
| </properties> |
| </rule> |
| <rule ref="category/java/bestpractices.xml/UnusedPrivateField"> |
| <properties> |
| <!-- Fields are used by picocli --> |
| <property name="violationSuppressXPath" value="//ClassOrInterfaceDeclaration[ |
| @SimpleName='ProbabilityDensityApproximationCommand' or @SimpleName='ExamplesStressCommand' |
| or @SimpleName='ExamplesSamplingCommand' or @SimpleName='UniformSamplingVisualCheckCommand']"/> |
| </properties> |
| </rule> |
| <rule ref="category/java/bestpractices.xml/AccessorClassGeneration"> |
| <properties> |
| <!-- False positive --> |
| <property name="violationSuppressXPath" value="//ClassOrInterfaceDeclaration[@SimpleName='TSampler']"/> |
| </properties> |
| </rule> |
| <rule ref="category/java/bestpractices.xml/AvoidReassigningParameters"> |
| <properties> |
| <!-- Constructors can reassign their seed parameter after expanding it to the correct length --> |
| <!-- Hash functions are optimised for minimum byte size to allow inlining --> |
| <property name="violationSuppressXPath" |
| value="./ancestor::ConstructorDeclaration[ |
| (matches(@Image, 'L(64|128)X[0-9]+(StarStar|Mix)') and @Arity=1 and @Public=true()) |
| or @Image='AbstractL64X128'] | |
| ./ancestor::MethodDeclaration[@Name='stafford13' or @Name='lea64' or @Name='lea32'or @Name='murmur3']"/> |
| </properties> |
| </rule> |
| |
| <rule ref="category/java/codestyle.xml/ClassNamingConventions"> |
| <properties> |
| <!-- Do not require Utils/Helper suffix --> |
| <property name="violationSuppressXPath" |
| value="//ClassOrInterfaceDeclaration[@SimpleName='ListSampler' or @SimpleName='ProviderBuilder' |
| or @SimpleName='ThreadLocalRandomSource' or @SimpleName='SeedFactory' |
| or @SimpleName='Coordinates' or @SimpleName='Hex' or @SimpleName='SpecialMath' |
| or @SimpleName='Conversions' or @SimpleName='MixFunctions' or @SimpleName='LXMSupport']"/> |
| <!-- Allow samplers to have only factory constructors --> |
| <property name="utilityClassPattern" value="[A-Z][a-zA-Z0-9]+(Utils?|Helper|Sampler)" /> |
| </properties> |
| </rule> |
| <rule ref="category/java/codestyle.xml/ShortMethodName"> |
| <properties> |
| <!-- Allow samplers to have factory constructor method 'of' --> |
| <property name="violationSuppressXPath" value="//ClassOrInterfaceDeclaration[matches(@SimpleName, '^.*Sampler$')]"/> |
| </properties> |
| </rule> |
| <rule ref="category/java/codestyle.xml/FieldNamingConventions"> |
| <properties> |
| <property name="violationSuppressXPath" |
| value="//ClassOrInterfaceDeclaration[@SimpleName='ProbabilityDensityApproximationCommand']"/> |
| </properties> |
| </rule> |
| <rule ref="category/java/codestyle.xml/LinguisticNaming"> |
| <properties> |
| <!-- Allow Builder set methods to return the Builder (not void) --> |
| <property name="violationSuppressXPath" value="//ClassOrInterfaceDeclaration[matches(@SimpleName, '^.*Builder$')]"/> |
| </properties> |
| </rule> |
| |
| <rule ref="category/java/design.xml/NPathComplexity"> |
| <properties> |
| <!-- Increase from default of 200 --> |
| <property name="violationSuppressXPath" |
| value="//ClassOrInterfaceDeclaration[@SimpleName='LargeMeanPoissonSampler' or @SimpleName='MersenneTwister' |
| or @SimpleName='ProbabilityDensityApproximationCommand']"/> |
| </properties> |
| </rule> |
| <rule ref="category/java/design.xml/CyclomaticComplexity"> |
| <properties> |
| <!-- Increase from default of 10 --> |
| <property name="methodReportLevel" value="20"/> |
| </properties> |
| </rule> |
| <rule ref="category/java/design.xml/ExcessiveImports"> |
| <properties> |
| <property name="violationSuppressXPath" value="//ClassOrInterfaceDeclaration[@SimpleName='ProviderBuilder']"/> |
| </properties> |
| </rule> |
| <rule ref="category/java/design.xml/CouplingBetweenObjects"> |
| <properties> |
| <property name="violationSuppressXPath" value="//ClassOrInterfaceDeclaration[@SimpleName='ProviderBuilder']"/> |
| </properties> |
| </rule> |
| <rule ref="category/java/design.xml/ExcessiveMethodLength"> |
| <properties> |
| <!-- The length is due to comments --> |
| <property name="violationSuppressXPath" value="//ClassOrInterfaceDeclaration[@SimpleName='AliasMethodDiscreteSampler' |
| or @SimpleName='ProbabilityDensityApproximationCommand']"/> |
| </properties> |
| </rule> |
| <rule ref="category/java/design.xml/ExcessiveClassLength"> |
| <properties> |
| <!-- The length is due to multiple implementations as inner classes --> |
| <property name="violationSuppressXPath" value="//ClassOrInterfaceDeclaration[@SimpleName='MarsagliaTsangWangDiscreteSampler' |
| or @SimpleName='CompositeSamplers' or @SimpleName='StableSampler' or @SimpleName='ZigguratSampler']"/> |
| </properties> |
| </rule> |
| <rule ref="category/java/design.xml/ExcessiveParameterList"> |
| <properties> |
| <!-- The length is due to the size of the internal state saved in the state object --> |
| <property name="violationSuppressXPath" value="//ClassOrInterfaceDeclaration[@SimpleName='LargeMeanPoissonSampler']"/> |
| </properties> |
| </rule> |
| <rule ref="category/java/design.xml/LogicInversion"> |
| <properties> |
| <!-- Logic inversion allows detection of NaN for parameters that are expected in a range --> |
| <property name="violationSuppressXPath" |
| value="//ClassOrInterfaceDeclaration[@SimpleName='GaussianSampler' or @SimpleName='StableSampler']"/> |
| </properties> |
| </rule> |
| <rule ref="category/java/design.xml/ImmutableField"> |
| <properties> |
| <!-- Fields are used by picocli --> |
| <property name="violationSuppressXPath" value="//ClassOrInterfaceDeclaration[@SimpleName='BridgeTestCommand' |
| or @SimpleName='ProbabilityDensityApproximationCommand' or @SimpleName='ExamplesStressCommand' |
| or @SimpleName='ListCommand' or @SimpleName='OutputCommand' |
| or @SimpleName='ResultsCommand' or @SimpleName='StressTestCommand' |
| or @SimpleName='UniformSamplingVisualCheckCommand']"/> |
| </properties> |
| </rule> |
| <rule ref="category/java/design.xml/AvoidThrowingNullPointerException"> |
| <properties> |
| <!-- Local implementation of Objects.requireNonNull --> |
| <property name="violationSuppressXPath" value="//ClassOrInterfaceDeclaration[@SimpleName='CompositeSamplers']"/> |
| </properties> |
| </rule> |
| <rule ref="category/java/design.xml/CognitiveComplexity"> |
| <properties> |
| <!-- Increase from default of 200 --> |
| <property name="violationSuppressXPath" |
| value="//ClassOrInterfaceDeclaration[@SimpleName='ChengBetaSampler' or @SimpleName='LargeMeanPoissonSampler' |
| or @SimpleName='ZigguratSampler']"/> |
| </properties> |
| </rule> |
| <rule ref="category/java/design.xml/UselessOverridingMethod"> |
| <properties> |
| <!-- Methods document the size of the jump functions --> |
| <property name="violationSuppressXPath" |
| value="../MethodDeclaration[@Name='jump' or @Name='longJump']"/> |
| </properties> |
| </rule> |
| |
| <rule ref="category/java/errorprone.xml/AvoidLiteralsInIfCondition"> |
| <properties> |
| <property name="ignoreMagicNumbers" value="-1,0,1" /> |
| </properties> |
| </rule> |
| <rule ref="category/java/errorprone.xml/AvoidFieldNameMatchingMethodName"> |
| <properties> |
| <!-- Field INSTANCE matches instance() which returne a generic typed version of the instance. --> |
| <property name="violationSuppressXPath" value="//ClassOrInterfaceDeclaration[matches(@SimpleName, '^.*ObjectSamplerFactory$')]"/> |
| </properties> |
| </rule> |
| |
| <rule ref="category/java/multithreading.xml/UseConcurrentHashMap"> |
| <properties> |
| <property name="violationSuppressXPath" value="//ClassOrInterfaceDeclaration[@SimpleName='DiscreteProbabilityCollectionSampler']"/> |
| </properties> |
| </rule> |
| |
| <rule ref="category/java/multithreading.xml/AvoidSynchronizedAtMethodLevel"> |
| <properties> |
| <!-- Allows synchronized method when it is an override of the parent class --> |
| <property name="violationSuppressXPath" value="//ClassOrInterfaceDeclaration[@SimpleName='JDKRandomBridge']"/> |
| </properties> |
| </rule> |
| |
| </ruleset> |