.spotbugs-check.xml

Summary

Maintainability
Test Coverage
<FindBugsFilter>

    <!-- This first section is used to fail CI if any unexpected bugs appear.
         We accept certain types of bugs at certain levels until we get them
         all cleared out. -->

    <!-- Suppress medium bugs which we _don't_ want to fail CI until we can get them removed -->
     <Match>
        <Confidence value="2" /> <!-- 3 is low priority, 2 is medium priority, 1 is high priority -->
        <Or>
           <Bug pattern="IS2_INCONSISTENT_SYNC" />
           <Bug pattern="OVERRIDING_METHODS_MUST_INVOKE_SUPER" />
           <Bug pattern="DCN_NULLPOINTER_EXCEPTION" /> <!-- 327 cases -->
           <Bug pattern="SSD_DO_NOT_USE_INSTANCE_LOCK_ON_SHARED_STATIC_DATA" />
        </Or>
     </Match>

    <!-- Suppress low priority bugs which we _don't_ want to fail CI until we can get them removed -->
     <Match>
        <Confidence value="3" /> <!-- 3 is low priority, 2 is medium priority, 1 is high priority -->
        <Or>
           <Bug pattern="IS2_INCONSISTENT_SYNC" />
           <Bug pattern="NO_NOTIFY_NOT_NOTIFYALL" />
           <Bug pattern="RCN_REDUNDANT_NULLCHECK_OF_NONNULL_VALUE" />
           <Bug pattern="UW_UNCOND_WAIT" />
           <Bug pattern="WA_NOT_IN_LOOP" />
        </Or>
     </Match>

    <!-- what follows should be kept in sync with .spotbugs.xml -->

    <!-- The following section is used to suppress notifications about
          specific bugs and categories that we don't think are
          worth the effort -->

     <Match>
       <!-- Minor clarity issue -->
       <Bug pattern="RI_REDUNDANT_INTERFACES" />
     </Match>

     <Match>
       <!-- Design issue -->
       <Bug pattern="SIC_INNER_SHOULD_BE_STATIC_ANON" />
     </Match>

     <Match>
       <!-- Design issue -->
       <Bug pattern="SIC_INNER_SHOULD_BE_STATIC_NEEDS_THIS" />
     </Match>

     <Match>
       <!-- Most of these are non-I18N, internal changes of case.
            We should find the I18N ones, but it seems excessive
            to track down and annotate all the others first thing -->
       <Bug pattern="DM_CONVERT_CASE" />
     </Match>

     <Match>
       <!-- Most of these are non-I18N, JMRI-specific file operations.
            We should find the I18N ones, but it seems excessive
            to track down and annotate all the others first thing.
            Suppressed for now to focus attention on
            other high-priority items.  -->
       <Bug pattern="DM_DEFAULT_ENCODING" />
     </Match>

    <!-- Suppress SLF4J bug which has many false positives due to ?: operator -->
     <Match>
        <Bug pattern="SLF4J_UNKNOWN_ARRAY" />
     </Match>

    <!-- Very high-frequency "malicious code" warnings can't yet be checked -->
    <!-- but we keep some others to improve code robustness and containment -->
     <Match>
        <Or>
           <Bug pattern="EI_EXPOSE_REP" />
           <Bug pattern="EI_EXPOSE_REP2" />
           <Bug pattern="MC_OVERRIDABLE_METHOD_CALL_IN_CONSTRUCTOR" />
           <Bug pattern="MS_MUTABLE_ARRAY" />
           <Bug pattern="MS_EXPOSE_REP" />
           <Bug pattern="MS_SHOULD_BE_FINAL" /><!-- we expose various constants for scripts -->
        </Or>
     </Match>

     <!-- items we're unlikely to restore -->

     <Match>
       <!-- JMRI does not use serialization, permanently ignore -->
       <Bug code="Se,SnVI" />
     </Match>

     <Match>
       <!-- JMRI code is written with static final loggers. -->
       <Bug pattern="SLF4J_LOGGER_SHOULD_BE_NON_STATIC" />
     </Match>

</FindBugsFilter>