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

<FindBugsFilter>
    <!-- Autogenerated code -->
    <Match>
        <Class name="~.*\.proto\..*" />
    </Match>
    <Match>
        <Class name="~.*\.avro\..*" />
    </Match>

    <!-- High-priority bugs -->
    <Match>
        <!-- Justified call of GC; explained in code -->
        <Class name="org.apache.reef.runtime.common.evaluator.context.ContextManager" />
        <Bug code="Dm" />
    </Match>
    <Match>
        <!-- Test code -->
        <Class name="org.apache.reef.util.MemoryUtils" />
        <Bug code="DLS" />
    </Match>
    <Match>
        <Class name="org.apache.reef.javabridge.NativeInterop" />
        <Bug code="MS" />
    </Match>

    <!-- Medium-priority bugs -->
    <Match>
        <!-- Internal representation necessary for serialization -->
        <Class name="org.apache.reef.webserver.ParsedHttpRequest" />
        <Bug code="EI" />
    </Match>
    <Match>
        <!-- Internal handler classes shouldn't be static -->
        <Class name="~org\.apache\.reef\..*" />
        <Bug code="SIC" />
    </Match>
    <Match>
        <!-- Not worried about exposing internal representation at this point -->
        <Class name="~org\.apache\.reef\..*" />
        <Bug code="EI, EI2" />
    </Match>
    <Match>
        <!-- Fields-placeholders for future use in bridge -->
        <Class name="~org\.apache\.reef\.javabridge\..*" />
        <Bug code="UrF" />
    </Match>
    <Match>
        <!-- Synchronization and waiting warnings, somewhat unreliable -->
        <Class name="org.apache.reef.javabridge.generic.JobClient" />
        <Bug code="IS,UW" />
    </Match>
    <Match>
        <!-- Waiting warnings, not applicable -->
        <Class name="org.apache.reef.examples.suspend.SuspendClient" />
        <Bug code="UW,Wa" />
    </Match>
    <Match>
        <!-- Code uses custom TracingMonotonicTreeMap which doesn't implement entrySet -->
        <!-- TODO: implement entrySet() ? -->
        <Class name="org.apache.reef.tang.implementation.java.InjectorImpl" />
        <Bug code="WMI" />
    </Match>
    <Match>
        <!-- Code uses custom map which doesn't implement entrySet -->
        <Class name="org.apache.reef.tang.util.MonotonicHashMap" />
        <Bug code="WMI" />
    </Match>
    <Match>
        <!-- TODO: consider whether we need to wrap this in doPrivileged block -->
        <Class name="org.apache.reef.tang.implementation.java.ClassHierarchyImpl" />
        <Bug pattern="DP_CREATE_CLASSLOADER_INSIDE_DO_PRIVILEGED" />
    </Match>
    <Match>
        <!-- Comparison used to verify result of cast -->
        <Class name="org.apache.reef.tang.util.ReflectionUtilities" />
        <Bug pattern="SA_LOCAL_SELF_COMPARISON" />
    </Match>
    <Match>
        <!-- TODO: double-check -->
        <Class name="~org\.apache\.reef\.tang\.util\.AbstractMonotonicMultiMap.*" />
        <Bug code="NP" />
    </Match>
    <Match>
        <!-- TODO: reconsider calling System.exit(...) -->
        <Class name="org.apache.reef.runtime.common.launch.REEFUncaughtExceptionHandler" />
        <Bug pattern="DM_EXIT" />
    </Match>
    <Match>
        <Class name="org.apache.reef.runtime.common.client.api.JobSubmissionEventImpl$Builder" />
        <Bug pattern="UWF_UNWRITTEN_FIELD" />
    </Match>
    <Match>
        <Class name="org.apache.reef.runtime.common.driver.resourcemanager.ResourceStatusEventImpl$Builder" />
        <Bug pattern="URF_UNREAD_FIELD" />
    </Match>
    <Match>
        <Class name="org.apache.reef.io.network.impl.NetworkConnectionServiceMessage" />
        <Bug pattern="URF_UNREAD_FIELD" />
    </Match>
    <Match>
        <Class name="org.apache.reef.io.network.util.Utils$AddressComparator" />
        <Bug pattern="SE_COMPARATOR_SHOULD_BE_SERIALIZABLE" />
    </Match>
    <Match>
        <Class name="org.apache.reef.io.data.loading.impl.AbstractEvaluatorToPartitionStrategy" />
        <Bug pattern="JLM_JSR166_UTILCONCURRENT_MONITORENTER" />
    </Match>
    <Match>
        <Class name="~org\.apache\.reef\.wake\..*" />
        <Bug pattern="JLM_JSR166_UTILCONCURRENT_MONITORENTER" />
    </Match>
    <Match>
        <!-- example code, won't be subclassed -->
        <Class name="org.apache.reef.wake.examples.join.TupleSource" />
        <Bug pattern="SC_START_IN_CTOR" />
    </Match>
    <Match>
        <Class name="org.apache.reef.wake.remote.impl.RemoteEventComparator" />
        <Bug pattern="SE_COMPARATOR_SHOULD_BE_SERIALIZABLE" />
    </Match>
    <Match>
        <Class name="org.apache.reef.wake.time.runtime.RuntimeClock" />
        <Bug pattern="REC_CATCH_EXCEPTION" />
    </Match>

</FindBugsFilter>