<?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.
-->

<!DOCTYPE suppressions PUBLIC
    "-//Puppy Crawl//DTD Suppressions 1.1//EN"
    "http://www.puppycrawl.com/dtds/suppressions_1_1.dtd">

<suppressions>
    <!-- hashcode() is final in super class -->
    <suppress files="org.apache.directory.api.ldap.model.schema.SyntaxChecker" checks="EqualsHashCode" />
    <suppress files="org.apache.directory.api.ldap.model.schema.Normalizer" checks="EqualsHashCode" />
    <suppress files="org.apache.directory.api.ldap.model.schema.LoadableSchemaObject" checks="EqualsHashCode" />
    <suppress files="org.apache.directory.api.ldap.model.schema.LdapComparator" checks="EqualsHashCode" />
    <suppress files="org.apache.directory.api.ldap.model.schema.DITStructureRule" checks="EqualsHashCode" />
    <suppress files="org.apache.directory.api.ldap.model.schema.LdapSyntax" checks="EqualsHashCode" />
    <suppress files="org.apache.directory.api.ldap.model.schema.NameForm" checks="EqualsHashCode" />
    <suppress files="org.apache.directory.api.ldap.model.schema.DitContentRule" checks="EqualsHashCode" />
    <suppress files="org.apache.directory.api.ldap.model.schema.MatchingRule" checks="EqualsHashCode" />
    <suppress files="org.apache.directory.api.ldap.model.schema.AttributeType" checks="EqualsHashCode" />
    <suppress files="org.apache.directory.api.ldap.model.schema.DitStructureRule" checks="EqualsHashCode" />
    <suppress files="org.apache.directory.api.ldap.model.schema.MatchingRuleUse" checks="EqualsHashCode" />
    <suppress files="org.apache.directory.api.ldap.model.schema.ObjectClass" checks="EqualsHashCode" />

    <!-- No Javadoc for schema constants required -->
    <suppress files="org.apache.directory.api.ldap.model.constants.SchemaConstants" checks="JavadocVariable" />
    <suppress files="org.apache.directory.api.ldap.model.constants.MetaSchemaConstants" checks="JavadocVariable" />
    <suppress files="org.apache.directory.api.ldap.model.constants.PasswordPolicySchemaConstants" checks="JavadocVariable" />

    <!-- We have some long files -->
    <suppress files="org.apache.directory.api.ldap.model.constants.SchemaConstants" checks="FileLength" />
    <suppress files="org.apache.directory.api.ldap.model.message.ResultCodeEnum" checks="FileLength" />
    <suppress files="org.apache.directory.api.ldap.model.schema.PrepareString" checks="FileLength" />
    <suppress files="org.apache.directory.api.ldap.model.name.Ava" checks="FileLength" />
    <suppress files="org.apache.directory.api.ldap.model.name.Rdn" checks="FileLength" />
    <suppress files="org.apache.directory.api.ldap.model.url.LdapUrl" checks="FileLength" />
    <suppress files="org.apache.directory.api.ldap.model.schema.registries.Registries" checks="FileLength" />
    <suppress files="org.apache.directory.api.ldap.model.entry.DefaultAttribute" checks="FileLength" />
    <suppress files="org.apache.directory.api.ldap.model.entry.DefaultEntry" checks="FileLength" />
    <suppress files="org.apache.directory.api.ldap.model.entry.Value" checks="FileLength" />
    <suppress files="org.apache.directory.api.ldap.model.ldif.LdifReader" checks="FileLength" />
    <suppress files="org.apache.directory.api.ldap.model.schema.parsers.OpenLdapSchemaParser" checks="FileLength" />

    <!-- Setter return super type, which is not recognized by Checkstyle -->
    <suppress files="org.apache.directory.api.ldap.model.message" checks="HiddenField" />

    <!-- Contol inferfaces that don't declare any new method -->
    <suppress files="org.apache.directory.api.ldap.model.message.controls" checks="InterfaceIsType" />

    <!-- Exclude Antlr generated sources -->
    <suppress files="[\\/]generated-sources[\\/]" checks="[a-zA-Z0-9]*"/>
</suppressions>
