<?xml version="1.0" encoding="UTF-8"?>
<!--
  ~ 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 xmlns="http://pmd.sourceforge.net/ruleset/2.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" name="full-pmd-ruleset"
    xsi:schemaLocation="http://pmd.sourceforge.net/ruleset/2.0.0 http://pmd.sourceforge.net/ruleset_2_0_0.xsd">
    <description>Full 5.1.1 PMD rule set</description>
    <exclude-pattern>.*/target/.*</exclude-pattern>
    <rule ref="rulesets/java/basic.xml" />
    <rule ref="rulesets/ecmascript/basic.xml" />
    <rule ref="rulesets/jsp/basic.xml" />
    <rule ref="rulesets/vm/basic.xml" />
    <rule ref="rulesets/xml/basic.xml" />
    <rule ref="rulesets/java/braces.xml" />
    <rule ref="rulesets/ecmascript/braces.xml" />
    <rule ref="rulesets/java/clone.xml" />
    <rule ref="rulesets/java/codesize.xml" />
    <rule ref="rulesets/java/comments.xml">
        <exclude name="CommentRequired" />
    </rule>
    <rule ref="rulesets/java/controversial.xml">
        <exclude name="DataflowAnomalyAnalysis" />
        <exclude name="OnlyOneReturn" />
        <exclude name="AtLeastOneConstructor" />
        <exclude name="DefaultPackage" />
        <exclude name="CallSuperInConstructor" />
        <exclude name="UseConcurrentHashMap" />
        <exclude name="AvoidLiteralsInIfCondition" />
        <exclude name="AvoidUsingVolatile" />
    </rule>
    <rule ref="rulesets/java/coupling.xml">
        <exclude name="LawOfDemeter" />
        <exclude name="ExcessiveImports" />
    </rule>
    <rule ref="rulesets/java/design.xml">
        <exclude name="ConfusingTernary" />
        <exclude name="FinalFieldCouldBeStatic" />
        <exclude name="SimpleDateFormatNeedsLocale" />
        <exclude name="UseLocaleWithCaseConversions" />
        <exclude name="ImmutableField" />
        <exclude name="AvoidSynchronizedAtMethodLevel" />
        <exclude name="SingularField" />
        <exclude name="AbstractClassWithoutAnyMethod" />
        <exclude name="UncommentedEmptyMethod" />
        <exclude name="AbstractClassWithoutAbstractMethod" />
        <exclude name="EmptyMethodInAbstractClassShouldBeAbstract" />
        <exclude name="UseVarargs" />
    </rule>
    <rule ref="rulesets/java/empty.xml" />
    <rule ref="rulesets/java/basic.xml" />
    <rule ref="rulesets/java/finalizers.xml" />
    <rule ref="rulesets/java/imports.xml">
        <exclude name="TooManyStaticImports" />
    </rule>
    <rule ref="rulesets/java/j2ee.xml">
        <exclude name="DoNotUseThreads" />
    </rule>
    <rule ref="rulesets/java/junit.xml">
        <exclude name="JUnitAssertionsShouldIncludeMessage" />
        <exclude name="JUnitTestContainsTooManyAsserts" />
        <exclude name="TestClassWithoutTestCases" />
    </rule>
    <rule ref="rulesets/java/logging-jakarta-commons.xml" />
    <rule ref="rulesets/java/logging-java.xml" />
    <rule ref="rulesets/java/migrating.xml" />
    <rule ref="rulesets/java/naming.xml">
        <exclude name="LongVariable" />
    </rule>
    <rule ref="rulesets/java/optimizations.xml">
        <exclude name="LocalVariableCouldBeFinal" />
        <exclude name="SimplifyStartsWith" />
        <exclude name="AvoidInstantiatingObjectsInLoops" />
    </rule>
    <rule ref="rulesets/java/sunsecure.xml" />
    <rule ref="rulesets/java/strictexception.xml">
        <exclude name="AvoidCatchingThrowable" />
        <exclude name="AvoidCatchingGenericException" />
        <exclude name="SignatureDeclareThrowsException" />
    </rule>
    <rule ref="rulesets/java/strings.xml">
        <exclude name="AvoidDuplicateLiterals" />
    </rule>
    <rule ref="rulesets/ecmascript/unnecessary.xml" />
    <rule ref="rulesets/java/unnecessary.xml" />
    <rule ref="rulesets/java/basic.xml" />
    <rule ref="rulesets/ecmascript/unnecessary.xml" />
    <rule ref="rulesets/java/unusedcode.xml">
        <exclude name="UnusedPrivateField" />
        <exclude name="UnusedPrivateMethod" />
    </rule>
    <rule ref="rulesets/xsl/xpath.xml" />
    
    <rule ref="rulesets/java/comments.xml/CommentSize">
        <properties>
            <property name="maxLines" value="40" />
            <property name="maxLineLength" value="160" />
        </properties>
    </rule>
    <rule ref="rulesets/java/codesize.xml/TooManyMethods">
        <properties>
            <property name="maxmethods" value="30" />
        </properties>
    </rule>
    <rule ref="rulesets/java/design.xml/CloseResource">
        <properties>
            <property name="types" value="[java.sql.Connection, java.sql.ResultSet]" />
        </properties>
    </rule>
</ruleset>
