<?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-weaver"
    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>Custom PMD setup for Apache Commons Weaver</description>

  <rule ref="rulesets/java/basic.xml">
    <exclude name="AvoidBranchingStatementAsLastInLoop" />
  </rule>

  <rule ref="rulesets/java/design.xml">
    <exclude name="AccessorClassGeneration" />
    <exclude name="CompareObjectsWithEquals" />
    <exclude name="NonStaticInitializer" />
    <exclude name="ConfusingTernary" />
    <exclude name="AvoidSynchronizedAtMethodLevel" />
    <exclude name="UnnecessaryLocalBeforeReturn" />
    <exclude name="PreserveStackTrace" />
    <exclude name="EmptyMethodInAbstractClassShouldBeAbstract" />
    <exclude name="FieldDeclarationsShouldBeAtStartOfClass" />
    <exclude name="GodClass" />
  </rule>

  <rule ref="rulesets/java/empty.xml" />
  <rule ref="rulesets/java/imports.xml" />
  <rule ref="rulesets/java/migrating.xml">
    <exclude name="JUnit4TestShouldUseTestAnnotation" />
  </rule>
  <rule ref="rulesets/java/naming.xml">
    <exclude name="AbstractNaming" />
    <exclude name="AvoidFieldNameMatchingMethodName" />
    <exclude name="GenericsNaming" />
    <exclude name="LongVariable" />
    <exclude name="ShortClassName" />
    <exclude name="ShortMethodName" />
  </rule>
  <rule ref="rulesets/java/optimizations.xml">
    <exclude name="AvoidInstantiatingObjectsInLoops" />
    <exclude name="PrematureDeclaration" />
  </rule>
  <rule ref="rulesets/java/strings.xml">
    <exclude name="AvoidDuplicateLiterals" />
  </rule>
  <rule ref="rulesets/java/strings.xml/AvoidDuplicateLiterals">
    <properties>
      <!-- suppress on @SuppressWarnings: -->
      <property name="violationSuppressXPath"
                value="//Literal[ancestor::Annotation/*/Name[@Image='SuppressWarnings']]" />
    </properties>
  </rule>

  <rule ref="rulesets/java/sunsecure.xml" />
  <rule ref="rulesets/java/typeresolution.xml" />
  <rule ref="rulesets/java/unnecessary.xml" />
  <rule ref="rulesets/java/unusedcode.xml" />

  <rule ref="rulesets/java/controversial.xml/UnnecessaryConstructor" />
  <rule ref="rulesets/java/controversial.xml/AssignmentInOperand" />
  <rule ref="rulesets/java/controversial.xml/DontImportSun" />
  <rule ref="rulesets/java/controversial.xml/UnnecessaryParentheses" />
  <rule ref="rulesets/java/controversial.xml/BooleanInversion" />
</ruleset>
