<?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" />
  </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']"/>
    </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']"/>
      <!-- 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/design.xml/NPathComplexity">
    <properties>
      <!-- Increase from default of 200 -->
      <property name="violationSuppressXPath"
        value="//ClassOrInterfaceDeclaration[@SimpleName='LargeMeanPoissonSampler' or @SimpleName='MersenneTwister']"/>
    </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']"/>
    </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']"/>
    </properties>
  </rule>

  <rule ref="category/java/errorprone.xml/AvoidLiteralsInIfCondition">
    <properties>
      <property name="ignoreMagicNumbers" value="-1,0,1" />
    </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>

  <rule ref="category/java/performance.xml/AvoidUsingShortType">
    <properties>
      <!-- Short datatype is used to optimise 16-bit storage. -->
      <property name="violationSuppressXPath" value="//ClassOrInterfaceDeclaration[@SimpleName='MarsagliaTsangWangDiscreteSampler']"/>
    </properties>
  </rule>

</ruleset>
