<!--
  ~ 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>
     <Match classregex=".*\.PackageTest">
        <BugCode name="OS"/>
     </Match>
     <Match classregex=".*\$Test">
        <BugCode name="OS"/>
     </Match>
     <Match classregex=".*" >
        <!--
        EI,EI2 - may expose internal representation
        IS2 - Inconsistent synchronisation
        MS - mutable static field
        Se - serialisation
        SIC - should be static inner class?
        HE - hashcode/equals
        -->
       <BugCode name="EI,EI2,HE" />
     </Match>

     <Match>
          <Class name="org.apache.jmeter.engine.RemoteJMeterEngineImpl" />
          <Method name="rexit" />
          <Bug pattern="DM_GC" />
     </Match>
     <Match>
          <Class name="org.apache.jmeter.engine.StandardJMeterEngine" />
          <Method name="run" />
          <Bug pattern="DM_GC" />
     </Match>
     <Match>
          <Class name="org.apache.jmeter.protocol.jdbc.AbstractJDBCTestElement" />
          <Method name="getPreparedStatement" />
          <Bug pattern="OBL_UNSATISFIED_OBLIGATION" />
     </Match>
     <Match>
          <Class name="org.apache.jmeter.protocol.jms.sampler.MessageAdmin" />
          <Method name="putReply" />
          <Bug pattern="NN_NAKED_NOTIFY" />
     </Match>
     <Match>
          <Class name="org.apache.jmeter.JMeter" />
          <Method name="start" />
          <Bug pattern="DM_EXIT" />
    </Match>
     <Match>
          <Class name="org.apache.jmeter.JMeterReport" />
          <Method name="start" />
          <Bug pattern="DM_EXIT" />
    </Match>
    <Match>
          <Class name="org.apache.jmeter.engine.StandardJMeterEngine$1" />
          <Method name="run" />
          <Bug pattern="DM_EXIT" />
    </Match>
     <Match>
          <Class name="org.apache.jmeter.engine.StandardJMeterEngine$StopTest" />
          <Method name="run" />
          <Bug pattern="DM_EXIT" />
    </Match>
     <Match>
          <Class name="org.apache.jmeter.gui.action.ExitCommand" />
          <Bug pattern="DM_EXIT" />
    </Match>
     <Match>
          <Class name="org.apache.jmeter.report.gui.action.ReportExitCommand" />
          <Bug pattern="DM_EXIT" />
    </Match>
    -->
</FindBugsFilter>
