| <?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-numbers-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" /> |
| <exclude name="ShortClassName" /> |
| </rule> |
| <rule ref="category/java/design.xml"> |
| <exclude name="TooManyMethods" /> |
| <exclude name="LawOfDemeter" /> |
| <exclude name="LoosePackageCoupling" /> |
| </rule> |
| <rule ref="category/java/documentation.xml"> |
| <exclude name="CommentSize" /> |
| </rule> |
| <rule ref="category/java/errorprone.xml"> |
| <!-- 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/AvoidReassigningParameters"> |
| <properties> |
| <!-- The ported method follows the original C++ usage of the 'invert' flag. |
| Inversion of complementary functions may swap the arguments. --> |
| <property name="violationSuppressXPath" |
| value="./ancestor-or-self::ClassOrInterfaceDeclaration[@SimpleName='BoostErf' |
| or @SimpleName='BoostGamma' |
| or @SimpleName='BoostBeta']"/> |
| </properties> |
| </rule> |
| |
| <rule ref="category/java/codestyle.xml/ShortMethodName"> |
| <properties> |
| <!-- TODO: Current regex effectively disables this rule. --> |
| <property name="violationSuppressXPath" value="./ancestor-or-self::ClassOrInterfaceDeclaration[matches(@SimpleName, '^.*$')]"/> |
| </properties> |
| </rule> |
| <rule ref="category/java/codestyle.xml/ClassNamingConventions"> |
| <properties> |
| <property name="classPattern" value="[A-Z][a-zA-Z0-9]*" /> |
| <property name="abstractClassPattern" value="[A-Z][a-zA-Z0-9]*" /> |
| <property name="interfacePattern" value="[A-Z][a-zA-Z0-9]*" /> |
| <property name="enumPattern" value="[A-Z][a-zA-Z0-9]*" /> |
| <property name="annotationPattern" value="[A-Z][a-zA-Z0-9]*" /> |
| <property name="utilityClassPattern" value="[A-Z][a-zA-Z0-9]*" /> |
| </properties> |
| </rule> |
| <rule ref="category/java/codestyle.xml/LocalVariableNamingConventions"> |
| <properties> |
| <!-- Naming conventions preserved from the original Boost C++ code --> |
| <property name="violationSuppressXPath" |
| value="./ancestor-or-self::ClassOrInterfaceDeclaration[@SimpleName='BoostErf' or @SimpleName='BoostGamma']"/> |
| </properties> |
| </rule> |
| <rule ref="category/java/codestyle.xml/ConfusingTernary"> |
| <properties> |
| <!-- Use the original C++ code logic for identifying the erf domain. --> |
| <property name="violationSuppressXPath" value="./ancestor-or-self::ClassOrInterfaceDeclaration[@SimpleName='BoostErf']"/> |
| </properties> |
| </rule> |
| <rule ref="category/java/codestyle.xml/PrematureDeclaration"> |
| <properties> |
| <!-- False positive declaring the numerator a0. --> |
| <property name="violationSuppressXPath" |
| value="./ancestor-or-self::ClassOrInterfaceDeclaration[@SimpleName='BoostTools']"/> |
| </properties> |
| </rule> |
| |
| <rule ref="category/java/design.xml/CyclomaticComplexity"> |
| <properties> |
| <!-- Increase from default of 10 --> |
| <property name="methodReportLevel" value="20"/> |
| <property name="violationSuppressXPath" |
| value="./ancestor-or-self::ClassOrInterfaceDeclaration[@SimpleName='BoostGamma' |
| or @SimpleName='BoostBeta' |
| or @SimpleName='DD']"/> |
| </properties> |
| </rule> |
| <rule ref="category/java/design.xml/NPathComplexity"> |
| <properties> |
| <property name="violationSuppressXPath" |
| value="./ancestor-or-self::ClassOrInterfaceDeclaration[@SimpleName='BoostGamma' |
| or @SimpleName='BoostBeta']"/> |
| </properties> |
| </rule> |
| <rule ref="category/java/design.xml/ExcessivePublicCount"> |
| <properties> |
| <property name="violationSuppressXPath" |
| value="./ancestor-or-self::ClassOrInterfaceDeclaration[@SimpleName='Complex' |
| or @SimpleName='Fraction' |
| or @SimpleName='BigFraction']"/> |
| </properties> |
| </rule> |
| <rule ref="category/java/design.xml/GodClass"> |
| <properties> |
| <property name="violationSuppressXPath" |
| value="./ancestor-or-self::ClassOrInterfaceDeclaration[@SimpleName='Fraction' |
| or @SimpleName='BigFraction' |
| or @SimpleName='BoostGamma' |
| or @SimpleName='BoostBeta' |
| or @SimpleName='DD']"/> |
| </properties> |
| </rule> |
| |
| <rule ref="category/java/errorprone.xml/AvoidLiteralsInIfCondition"> |
| <properties> |
| <property name="ignoreMagicNumbers" value="-1,0,1,-1L,0L,1L,0.0" /> |
| <property name="violationSuppressXPath" |
| value="./ancestor-or-self::ClassOrInterfaceDeclaration[@SimpleName='LogGamma' |
| or @SimpleName='LogGammaSum' |
| or @SimpleName='InverseErf' |
| or @SimpleName='InvGamma1pm1' |
| or @SimpleName='RegularizedBeta' |
| or @SimpleName='BoostErf' |
| or @SimpleName='BoostGamma' |
| or @SimpleName='BoostBeta' |
| or @SimpleName='BoostTools' |
| or @SimpleName='BoostMath'] or ./ancestor-or-self::MethodDeclaration[@Name='ldexp']"/> |
| </properties> |
| </rule> |
| |
| <rule ref="category/java/errorprone.xml/AvoidFieldNameMatchingMethodName"> |
| <properties> |
| <property name="violationSuppressXPath" |
| value="./ancestor-or-self::ClassOrInterfaceDeclaration[@SimpleName='Complex' |
| or @SimpleName='Fraction' |
| or @SimpleName='BigFraction' |
| or @SimpleName='DD']"/> |
| </properties> |
| </rule> |
| |
| <rule ref="category/java/errorprone.xml/AvoidDecimalLiteralsInBigDecimalConstructor"> |
| <properties> |
| <property name="violationSuppressXPath" |
| value="./ancestor-or-self::ClassOrInterfaceDeclaration[@SimpleName='DD']"/> |
| </properties> |
| </rule> |
| |
| <!-- Long methods are based on reference implementations. --> |
| <rule ref="category/java/design.xml/NcssCount"> |
| <properties> |
| <property name="violationSuppressXPath" |
| value="./ancestor-or-self::ClassOrInterfaceDeclaration[@SimpleName='Complex' |
| or @SimpleName='Fraction' |
| or @SimpleName='BoostErf' |
| or @SimpleName='BoostGamma' |
| or @SimpleName='BoostBeta' |
| or @SimpleName='InvGamma1pm1' |
| or @SimpleName='BrentSolver' |
| or @SimpleName='DDMath']"/> |
| </properties> |
| </rule> |
| |
| <!-- Complex parse deliberately catches and re-throws a new NumberFormatException |
| to include the full input string in the exception message. --> |
| <rule ref="category/java/design.xml/AvoidThrowingNewInstanceOfSameException"> |
| <properties> |
| <property name="violationSuppressXPath" |
| value="./ancestor-or-self::ClassOrInterfaceDeclaration[@SimpleName='Complex']"/> |
| </properties> |
| </rule> |
| <rule ref="category/java/bestpractices.xml/PreserveStackTrace"> |
| <properties> |
| <property name="violationSuppressXPath" |
| value="./ancestor-or-self::ClassOrInterfaceDeclaration[@SimpleName='Complex']"/> |
| </properties> |
| </rule> |
| |
| </ruleset> |