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

-->
<FindBugsFilter
        xmlns="https://github.com/spotbugs/filter/3.0.0"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="https://github.com/spotbugs/filter/3.0.0 https://raw.githubusercontent.com/spotbugs/spotbugs/3.1.0/spotbugs/etc/findbugsfilter.xsd">


    <!-- pattern sort by alpha -->

    <Match>
        <Bug pattern="BC_UNCONFIRMED_CAST"/>
    </Match>

    <Match>
        <Bug pattern="BC_VACUOUS_INSTANCEOF"/>
    </Match>

    <Match>
        <Bug pattern="DC_DOUBLECHECK"/>
    </Match>

    <Match>
        <Bug pattern="DC_PARTIALLY_CONSTRUCTED"/>
    </Match>

    <Match>
        <Bug pattern="DM_DEFAULT_ENCODING"/>
        <Class name="org.apache.servicecomb.demo.jaxrs.server.beanParam.BeanParamTestService"/>
    </Match>

    <Match>
        <Bug pattern="DM_DEFAULT_ENCODING"/>
        <Class name="org.apache.servicecomb.it.deploy.Deploys"/>
    </Match>

    <Match>
        <Bug pattern="DM_DEFAULT_ENCODING"/>
        <Class name="org.apache.servicecomb.it.testcase.TestParamCodecEdge"/>
    </Match>

    <Match>
        <Bug pattern="DM_DEFAULT_ENCODING"/>
        <Class name="org.apache.servicecomb.it.testcase.TestRestServerConfigEdge"/>
    </Match>

    <Match>
        <Bug pattern="DM_EXIT"/>
    </Match>

    <Match>
        <Bug pattern="EC_UNRELATED_TYPES"/>
    </Match>

    <Match>
        <Bug pattern="EI_EXPOSE_REP"/>
    </Match>

    <Match>
        <Bug pattern="EI_EXPOSE_REP2"/>
    </Match>

    <Match>
        <Bug pattern="EI_EXPOSE_STATIC_REP2"/>
    </Match>

    <Match>
        <Bug pattern="EQ_COMPARETO_USE_OBJECT_EQUALS"/>
    </Match>

    <Match>
        <Bug pattern="EQ_DOESNT_OVERRIDE_EQUALS"/>
    </Match>

    <Match>
        <Bug pattern="EQ_OVERRIDING_EQUALS_NOT_SYMMETRIC"/>
    </Match>

    <Match>
        <Bug pattern="ICAST_IDIV_CAST_TO_DOUBLE"/>
    </Match>

    <Match>
        <Bug pattern="ICAST_INTEGER_MULTIPLY_CAST_TO_LONG"/>
    </Match>

    <Match>
        <Bug pattern="IS2_INCONSISTENT_SYNC"/>
    </Match>

    <Match>
        <Bug pattern="MF_CLASS_MASKS_FIELD"/>
    </Match>

    <Match>
        <Bug pattern="MS_CANNOT_BE_FINAL"/>
    </Match>

    <Match>
        <Bug pattern="MS_EXPOSE_REP"/>
    </Match>

    <Match>
        <Bug pattern="MS_MUTABLE_ARRAY"/>
    </Match>

    <Match>
        <Bug pattern="MS_MUTABLE_COLLECTION_PKGPROTECT"/>
    </Match>

    <Match>
        <Bug pattern="MS_OOI_PKGPROTECT"/>
    </Match>

    <Match>
        <Bug pattern="MS_SHOULD_BE_FINAL"/>
    </Match>

    <Match>
        <Bug pattern="MS_PKGPROTECT"/>
    </Match>

    <Match>
        <Bug pattern="NM_CLASS_NOT_EXCEPTION"/>
    </Match>

    <Match>
        <Bug pattern="NM_METHOD_NAMING_CONVENTION"/>
    </Match>

    <Match>
        <Bug pattern="NM_SAME_SIMPLE_NAME_AS_SUPERCLASS"/>
    </Match>

    <Match>
        <Bug pattern="NP_NONNULL_PARAM_VIOLATION"/>
        <Class name="org.apache.servicecomb.it.testcase.objectparams.TestJAXRSObjectParamType"/>
    </Match>

    <Match>
        <Bug pattern="NP_NONNULL_PARAM_VIOLATION"/>
        <Class name="org.apache.servicecomb.it.testcase.objectparams.TestRPCObjectParamType"/>
    </Match>

    <Match>
        <Bug pattern="NP_NONNULL_PARAM_VIOLATION"/>
        <Class name="org.apache.servicecomb.it.testcase.objectparams.TestSpringMVCObjectParamType"/>
    </Match>

    <Match>
        <Bug pattern="NP_NONNULL_RETURN_VIOLATION"/>
    </Match>

    <Match>
        <Bug pattern="NP_NULL_ON_SOME_PATH"/>
    </Match>

    <Match>
        <Bug pattern="NP_NULL_ON_SOME_PATH_FROM_RETURN_VALUE"/>
    </Match>

    <Match>
        <Bug pattern="NP_UNWRITTEN_PUBLIC_OR_PROTECTED_FIELD"/>
    </Match>

    <Match>
        <Bug pattern="OBL_UNSATISFIED_OBLIGATION"/>
    </Match>

    <Match>
        <Bug pattern="RC_REF_COMPARISON"/>
    </Match>

    <Match>
        <Bug pattern="RCN_REDUNDANT_NULLCHECK_WOULD_HAVE_BEEN_A_NPE"/>
    </Match>

    <Match>
        <Bug pattern="REC_CATCH_EXCEPTION"/>
        <Class name="org.apache.servicecomb.demo.springmvc.SpringmvcClient"/>
    </Match>

    <Match>
        <Bug pattern="REFLC_REFLECTION_MAY_INCREASE_ACCESSIBILITY_OF_CLASS"/>
    </Match>

    <Match>
        <Bug pattern="RV_NEGATING_RESULT_OF_COMPARETO"/>
    </Match>

    <Match>
        <Bug pattern="RV_RETURN_VALUE_IGNORED"/>
    </Match>

    <Match>
        <Bug pattern="SE_BAD_FIELD"/>
    </Match>

    <Match>
        <Bug pattern="SR_NOT_CHECKED"/>
        <Class name="org.apache.servicecomb.demo.springmvc.client.ConsumerTestsAfterBootup"/>
    </Match>

    <Match>
        <Bug pattern="ST_WRITE_TO_STATIC_FROM_INSTANCE_METHOD"/>
    </Match>

    <Match>
        <Bug pattern="RV_RETURN_VALUE_IGNORED_BAD_PRACTICE"/>
    </Match>

    <Match>
        <Bug pattern="SSD_DO_NOT_USE_INSTANCE_LOCK_ON_SHARED_STATIC_DATA"/>
    </Match>

    <Match>
        <Bug pattern="THROWS_METHOD_THROWS_CLAUSE_BASIC_EXCEPTION"/>
    </Match>

    <Match>
        <Bug pattern="THROWS_METHOD_THROWS_CLAUSE_THROWABLE"/>
    </Match>

    <Match>
        <Bug pattern="THROWS_METHOD_THROWS_RUNTIMEEXCEPTION"/>
    </Match>

    <Match>
        <Bug pattern="URF_UNREAD_PUBLIC_OR_PROTECTED_FIELD"/>
    </Match>

    <Match>
        <Bug pattern="UUF_UNUSED_PUBLIC_OR_PROTECTED_FIELD"/>
    </Match>

    <Match>
        <Bug pattern="UWF_UNWRITTEN_PUBLIC_OR_PROTECTED_FIELD"/>
    </Match>

    <Match>
        <Bug pattern="VA_FORMAT_STRING_USES_NEWLINE"/>
    </Match>

</FindBugsFilter>
