configuration/spotbugs/spotbugs-exclude.xml (803 lines of code) (raw):
<?xml version="1.0" encoding="UTF-8"?>
<!--
Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
The contents of this file are subject to the terms of either the Universal Permissive License
v 1.0 as shown at http://oss.oracle.com/licenses/upl
or the following license:
Redistribution and use in source and binary forms, with or without modification, are permitted
provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice, this list of conditions
and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice, this list of
conditions and the following disclaimer in the documentation and/or other materials provided with
the distribution.
3. Neither the name of the copyright holder nor the names of its contributors may be used to
endorse or promote products derived from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY
WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-->
<FindBugsFilter>
<!-- Skip I18n -->
<Match>
<Bug pattern="DM_DEFAULT_ENCODING"/>
</Match>
<Match>
<Bug pattern="DM_CONVERT_CASE"/>
</Match>
<!-- Allowing Eclipse plug-in style singleton default instances -->
<Match>
<Class name="~org\.openjdk\.jmc\..*Plugin" />
<Method name="<init>" />
<Bug pattern="ST_WRITE_TO_STATIC_FROM_INSTANCE_METHOD" />
</Match>
<!-- Allow tri state Boolean methods in these framework methods, i.e. the
methods are used by the framework, and known to work with null values. -->
<Match>
<Class
name="org.openjdk.jmc.console.ui.notification.tab.RuleCheckedStateProvider" />
<Bug pattern="NP_BOOLEAN_RETURN_NULL" />
</Match>
<Match>
<Class name="org.openjdk.jmc.console.ui.misc.CompositeSupport" />
<Method name="getBoolean" />
<Bug pattern="NP_BOOLEAN_RETURN_NULL" />
</Match>
<Match>
<Class name="org.openjdk.jmc.console.ui.classes.model.ClassLoaderInstance" />
<Bug pattern="NP_BOOLEAN_RETURN_NULL" />
</Match>
<Match>
<Class name="~org.openjdk.jmc.ui.checkedstate..*" />
<Bug pattern="NP_BOOLEAN_RETURN_NULL" />
</Match>
<Match>
<Class name="org.openjdk.jmc.rjmx.triggers.fields.internal.Field" />
<Bug pattern="NP_BOOLEAN_RETURN_NULL" />
</Match>
<Match>
<Class name="org.openjdk.jmc.flightrecorder.ui.views.types.TypeCheckedStateProvider" />
<Bug pattern="NP_BOOLEAN_RETURN_NULL" />
</Match>
<Match>
<Class name="org.openjdk.jmc.flightrecorder.internal.parser.v1.StructTypes$JfrMethod" />
<Method name="isNative" />
<Bug pattern="NP_BOOLEAN_RETURN_NULL" />
</Match>
<Match>
<Class name="org.openjdk.jmc.flightrecorder.internal.parser.v1.StructTypes$JfrOldObject" />
<Method name="isRoot" />
<Bug pattern="NP_BOOLEAN_RETURN_NULL" />
</Match>
<!-- Just internal helper method -->
<Match>
<Class name="org.openjdk.jmc.rjmx.internal.ConnectionCapabilitiesToolkit" />
<Bug pattern="NP_BOOLEAN_RETURN_NULL" />
</Match>
<!-- State changed in volatile. Signal used to stop wait and speed up thread
end. -->
<Match>
<Class name="org.openjdk.jmc.console.ui.common.PollManager" />
<Method name="stopIfNotStopped" />
<Bug pattern="NN_NAKED_NOTIFY" />
</Match>
<Match>
<Class name="org.openjdk.jmc.ui.polling.PollManager" />
<OR>
<Method name="stopIfNotStopped" />
<Method name="poll" />
</OR>
<Bug pattern="NN_NAKED_NOTIFY" />
</Match>
<!-- Reference comparisons known to be okay, and in performance critical
areas -->
<Match>
<Class
name="org.openjdk.jmc.flightrecorder.ui.components.chart.model.FilteredFLRIterator" />
<Method name="skipForward" />
<Bug pattern="ES_COMPARING_STRINGS_WITH_EQ" />
</Match>
<!-- Plain false positive -->
<Match>
<Class name="org.openjdk.jmc.components.ui.settings.IconEditor" />
<Method name="fillPixel" />
<Bug pattern="RCN_REDUNDANT_NULLCHECK_WOULD_HAVE_BEEN_A_NPE" />
</Match>
<!-- === Level 16 nitpicks and higher === -->
<!-- Eclipse uses a rather smart way to handle NSL that rubs FindBugs the
wrong way -->
<Match>
<Class name="~.*\.Messages" />
<Bug pattern="MS_SHOULD_BE_FINAL" />
</Match>
<!-- The exit command which, obviously, works as advertised. The command
is available from JMCs internal command console, and only affects the client.
I.e, it is not a remote command. -->
<Match>
<Class name="org.openjdk.jmc.commands.internal.executables.Exit" />
<Method name="execute" />
<Bug pattern="DM_EXIT" />
</Match>
<!-- Used for best effort in-memory size determination. If we get a better
way to determine this, say perf counters we will change this. Note that this
is done in the JMC GUI, not in any framework code that may be used by third
party (server) consumers. -->
<Match>
<Class name="org.openjdk.jmc.flightrecorder.ui.FlightRecordingEditor" />
<Bug pattern="DM_GC" />
</Match>
<!-- Also intended exit - user wanted to quit on start up -->
<Match>
<Class name="org.openjdk.jmc.rcp.application.RCPApplicationIDESupport$1" />
<Method name="run" />
<Bug pattern="DM_EXIT" />
</Match>
<!-- Optimized equals(), since we know it will only be compared to this
type... -->
<Match>
<Class
name="org.openjdk.jmc.flightrecorder.internal.parser.binary.factories.EqualityProxy" />
<Bug pattern="BC_EQUALS_METHOD_SHOULD_WORK_FOR_ALL_OBJECTS" />
</Match>
<!-- Exception ignored on purpose, trying to determine what ciphers can
be used for PBE -->
<Match>
<Class name="org.openjdk.jmc.ui.common.security.DefaultSecurityManager" />
<Bug pattern="DE_MIGHT_IGNORE" />
</Match>
<!-- Our own framework clone -->
<Match>
<Class name="org.openjdk.jmc.console.ui.profiler.exception.Template" />
<Bug pattern="CN_IMPLEMENTS_CLONE_BUT_NOT_CLONEABLE" />
</Match>
<Match>
<Class name="org.openjdk.jmc.console.ui.profiler.method.Template" />
<Bug pattern="CN_IDIOM_NO_SUPER_CALL" />
</Match>
<Match>
<Class name="org.openjdk.jmc.joverflow.support.ClassAndOvhdComboList" />
<Bug pattern="CN_IDIOM_NO_SUPER_CALL" />
</Match>
<Match>
<Class name="org.openjdk.jmc.joverflow.support.ClassAndSizeComboList" />
<Bug pattern="CN_IDIOM_NO_SUPER_CALL" />
</Match>
<!-- Class representing a profiled exception -->
<Match>
<Class
name="org.openjdk.jmc.console.ui.profiler.exception.ProfiledException" />
<Bug pattern="NM_CLASS_NOT_EXCEPTION" />
</Match>
<!-- Ignoring mockup classes -->
<Match>
<Class name="~org\.openjdk\.jmc\.rjmx\.mockup\..*" />
</Match>
<!-- Ignoring directory creation problem, as the code path for the actual
logging will hit the problem and display an error -->
<Match>
<Class name="org.openjdk.jmc.rcp.logging.LoggingToolkit" />
<Method name="createFolders" />
<Bug pattern="RV_RETURN_VALUE_IGNORED_BAD_PRACTICE" />
</Match>
<!-- Will never do nothing but reference comparisons of these. Only equal
when the same. -->
<Match>
<Class name="org.openjdk.jmc.ui.layout.SimpleLayout$CalculationData" />
<Bug pattern="EQ_COMPARETO_USE_OBJECT_EQUALS" />
</Match>
<!-- Reversing the order of compare is in this case very deliberate, and
in fact the whole point. The framework is for visualizing data in tables,
and for instance used by tables to change the sort order of the content. -->
<Match>
<Class name="org.openjdk.jmc.ui.model.fields.Field" />
<Bug pattern="RV_NEGATING_RESULT_OF_COMPARETO" />
</Match>
<!-- There will be no nodes that are duplicates and should be equal when
the instances are not the exact same. Could possibly microoptimize by having
a better hash code, but may be confusing to not also implement equals. -->
<Match>
<Class
name="org.openjdk.jmc.flightrecorder.ui.components.graph.TreeNodeWrapper" />
<Bug pattern="EQ_COMPARETO_USE_OBJECT_EQUALS" />
</Match>
<!-- We only sort these instances using compareTo(), not to mention they
are mutable - there is no hashCode better than the default. -->
<Match>
<Class name="org.openjdk.jmc.rjmx.triggers.TriggerRule" />
<Bug pattern="EQ_COMPARETO_USE_OBJECT_EQUALS" />
</Match>
<Match>
<Class
name="org.openjdk.jmc.flightrecorder.ui.components.graph.renderer.RenderLayoutData" />
<Bug pattern="EQ_COMPARETO_USE_OBJECT_EQUALS" />
</Match>
<!-- We need to execute equals on these instances but since they are mutable
we can not provide a good hashCode implementation. -->
<Match>
<Class name="org.openjdk.jmc.ui.dial.ImageDescription" />
<Bug pattern="HE_EQUALS_USE_HASHCODE" />
</Match>
<Match>
<Class name="org.openjdk.jmc.ui.dial.DialViewer$Range" />
<Bug pattern="HE_EQUALS_USE_HASHCODE" />
</Match>
<!-- === The following are in experimental plug-ins === -->
<!-- Increments of the volatile are always by the same thread (from the
run method), either directly or indirectly. -->
<Match>
<Class name="org.openjdk.jmc.test.services.applications.ExceptionThrower" />
<Bug pattern="VO_VOLATILE_INCREMENT" />
<Method name="run" />
</Match>
<Match>
<Class name="org.openjdk.jmc.test.services.ServiceThread" />
<Bug pattern="VO_VOLATILE_INCREMENT" />
<Method name="updateStatistics" />
</Match>
<!-- We only sort these instances using compareTo(), not to mention they
are mutable - there is no hashCode better than the default. -->
<Match>
<Class name="org.openjdk.jmc.pde.PluginReference" />
<Bug pattern="EQ_COMPARETO_USE_OBJECT_EQUALS" />
</Match>
<!-- === JOverflow === -->
<!-- These are ok exit calls for the code to run JOverflow in stand-alone
mode -->
<Match>
<OR>
<Class name="org.openjdk.jmc.joverflow.ui.FXMain" />
<Class name="org.openjdk.jmc.joverflow.ui.FXMain$1" />
</OR>
<Bug pattern="DM_EXIT" />
</Match>
<!-- These are injected by the framework through special annotations, and
will be initialized. -->
<Match>
<Class name="org.openjdk.jmc.joverflow.ui.JOverflowFxUi" />
<Method name="<init>" />
<Bug pattern="UR_UNINIT_READ" />
</Match>
<!-- We only sort these instances using compareTo(), and never use them
where equals() can be used -->
<Match>
<Class name="org.openjdk.jmc.joverflow.support.ClassAndSizeCombo" />
<Bug pattern="EQ_COMPARETO_USE_OBJECT_EQUALS" />
</Match>
<Match>
<Class name="org.openjdk.jmc.joverflow.heap.model.Root" />
<Bug pattern="EQ_COMPARETO_USE_OBJECT_EQUALS" />
</Match>
<Match>
<Class name="org.openjdk.jmc.joverflow.heap.model.Root$1" />
<Bug pattern="EQ_COMPARETO_USE_OBJECT_EQUALS" />
</Match>
<Match>
<Or>
<Class name="org.openjdk.jmc.joverflow.batch.ReferencedObjCluster$Collections" />
<Class name="org.openjdk.jmc.joverflow.batch.ReferencedObjCluster$DupArrays" />
<Class name="org.openjdk.jmc.joverflow.batch.ReferencedObjCluster$DupStrings" />
<Class name="org.openjdk.jmc.joverflow.batch.ReferencedObjCluster$HighSizeObjects" />
<Class name="org.openjdk.jmc.joverflow.batch.ReferencedObjCluster$WeakHashMaps" />
</Or>
<Bug pattern="EQ_COMPARETO_USE_OBJECT_EQUALS" />
</Match>
<!-- Increments of the volatile are always by the same thread (from the
run method), either directly or indirectly. -->
<Match>
<Class name="org.openjdk.jmc.joverflow.heap.parser.CachedReadBuffer" />
<Bug pattern="VO_VOLATILE_INCREMENT" />
<Method name="get" />
</Match>
<!-- Used as best effort cache size determination -->
<Match>
<Class name="org.openjdk.jmc.joverflow.ui.model.ModelLoader" />
<Bug pattern="DM_GC" />
</Match>
<!-- Experimental/benchmarking code is ok to use explicit System.gc() -->
<Match>
<Class name="org.openjdk.jmc.joverflow.heap.parser.CachedReadBuffer" />
<Bug pattern="DM_GC" />
<Method name="determineCacheSizeFromFreeMem" />
</Match>
<Match>
<Class name="org.openjdk.jmc.joverflow.agent.MemoryTracker$1" />
<Bug pattern="DM_GC" />
<Method name="run" />
</Match>
<!-- Optimized equals() - proper type checks are done in the callee method -->
<Match>
<Class
name="org.openjdk.jmc.joverflow.support.RefChainElementImpl$AbstractElement" />
<Method name="equals" />
<Bug pattern="BC_EQUALS_METHOD_SHOULD_WORK_FOR_ALL_OBJECTS" />
</Match>
<!-- A shared object does change (gets initialized), but FindBugs cannot
recognize that. -->
<Match>
<Class name="org.openjdk.jmc.joverflow.PhoneHome$ConnectThread" />
<Method name="run" />
<Bug pattern="NN_NAKED_NOTIFY" />
</Match>
<!-- JOverflow: Fire and forget model loaders. -->
<Match>
<Class name="org.openjdk.jmc.joverflow.ui.FxMain" />
<Method name="start" />
<Bug pattern="RV_RETURN_VALUE_IGNORED_BAD_PRACTICE" />
</Match>
<Match>
<Class name="org.openjdk.jmc.joverflow.ui.JOverflowEditor" />
<Method name="createScene" />
<Bug pattern="RV_RETURN_VALUE_IGNORED_BAD_PRACTICE" />
</Match>
<!-- JOverflow: Unread public field. May be used in the future. -->
<Match>
<Class name="org.openjdk.jmc.joverflow.support.CompressibleStringStats" />
<Field name="nBackingCharArrays" />
<Bug pattern="URF_UNREAD_PUBLIC_OR_PROTECTED_FIELD" />
</Match>
<Match>
<Class name="org.openjdk.jmc.joverflow.support.DupStringStats" />
<Field name="nBackingCharArrays" />
<Bug pattern="URF_UNREAD_PUBLIC_OR_PROTECTED_FIELD" />
</Match>
<!-- JOverflow: Uncalled debug method. -->
<Match>
<Class name="org.openjdk.jmc.joverflow.heap.parser.CachedReadBuffer" />
<Method name="checkListConsistency" />
<Bug pattern="UPM_UNCALLED_PRIVATE_METHOD" />
</Match>
<!-- JOverflow: Unused debug counters. -->
<Match>
<Class name="org.openjdk.jmc.joverflow.heap.parser.CachedReadBuffer" />
<Or>
<Field name="numReads" />
<Field name="numPageSwaps" />
<Field name="lastReadPos" />
<Field name="numChanges" />
</Or>
<Bug pattern="UUF_UNUSED_FIELD" />
</Match>
<Match>
<Class name="org.openjdk.jmc.joverflow.stats.HeapScaner" />
<Method name="analyzeViaAllObjectsEnum" />
<Bug pattern="DLS_DEAD_LOCAL_STORE" />
</Match>
<!-- JOverflow explicit null returned instead of empty array. -->
<Match>
<Class name="org.openjdk.jmc.joverflow.descriptors.AbstractCollectionDescriptor" />
<Method name="getKnownAndPrimitiveFieldIndices" />
<Bug pattern="PZLA_PREFER_ZERO_LENGTH_ARRAYS" />
</Match>
<Match>
<Or>
<Class name="org.openjdk.jmc.joverflow.heap.parser.ReadBuffer$CachedReadBufferFactory" />
<Class name="org.openjdk.jmc.joverflow.heap.parser.ReadBuffer$MmappedBufferFactory" />
</Or>
<Method name="getFileImageBytes" />
<Bug pattern="PZLA_PREFER_ZERO_LENGTH_ARRAYS" />
</Match>
<Match>
<Class name="org.openjdk.jmc.joverflow.stats.BreadthFirstHeapScanner" />
<Method name="getNewFrontier" />
<Bug pattern="PZLA_PREFER_ZERO_LENGTH_ARRAYS" />
</Match>
<Match>
<Class name="org.openjdk.jmc.joverflow.util.StringInterner" />
<Or>
<Method name="internStringArrayContents" />
<Method name="internStringsInObjectArray" />
</Or>
<Bug pattern="PZLA_PREFER_ZERO_LENGTH_ARRAYS" />
</Match>
<!-- JOverflow examples code: Explicitly never written fields. -->
<Match>
<Class name="examples.FixableIssues$DeadFieldHolder" />
<Field name="dataField" />
<Bug pattern="UWF_UNWRITTEN_FIELD" />
</Match>
<!-- JOverflow examples code: Unread fields. -->
<Match>
<Or>
<Class name="examples.DuplicateArrays" />
<Class name="examples.DuplicateStrings" />
<Class name="examples.FixableIssues" />
<Class name="examples.VariousIssues" />
<Class name="examples.VariousIssues2" />
<Class name="examples.VariousIssues3" />
</Or>
<Method name="main" />
<Bug pattern="DLS_DEAD_LOCAL_STORE" />
</Match>
<Match>
<Class name="examples.VariousIssues$RefBackToKey" />
<Bug pattern="URF_UNREAD_FIELD" />
</Match>
<Match>
<Or>
<Class name="examples.VariousIssues2$CustomRef1" />
<Class name="examples.VariousIssues2$CustomRef2" />
<Class name="examples.VariousIssues2$LLElementP" />
</Or>
<Field name="ref" />
<Bug pattern="URF_UNREAD_FIELD" />
</Match>
<!-- JOverflow examples code: Explicit string duplication. -->
<Match>
<Class name="examples.DuplicateStrings" />
<Method name="duplicateStringShallow" />
<Bug pattern="DM_STRING_CTOR" />
</Match>
<!-- JOverflow examples code: Explicit string duplication. -->
<Match>
<Class name="examples.VariousIssues" />
<Bug pattern="DM_GC" />
</Match>
<!-- JOverflow test code: Unread fields. -->
<Match>
<Class name="org.openjdk.jmc.joverflow.stats.VariousIssueTest3" />
<Method name="testVariousIssues" />
<Bug pattern="DLS_DEAD_LOCAL_STORE" />
</Match>
<Match>
<Class name="org.openjdk.jmc.joverflow.heap.model.TestJavaObjectTable" />
<Method name="testIteratingUnvisitedObjects" />
<Bug pattern="UC_USELESS_OBJECT" />
</Match>
<!-- === Filtering out test classes right now === -->
<Match>
<Class name="~.*\.test\..*" />
</Match>
<Match>
<Class name="~.*\.uitest\..*" />
</Match>
<Match>
<Class name="~.*Test" />
</Match>
<Match>
<Class name="~.*Test\$.*" />
</Match>
<Match>
<Class name="org.openjdk.jmc.ui.checkedstate.TreeContentProvider" />
</Match>
<!-- === Filtering out classes we do not own === -->
<!-- The sun classes are only included as part of an internal JConsole plug-in
used for testing. -->
<Match>
<Class name="~sun\.tools\..*" />
</Match>
<Match>
<Class name="~com\.sun\..*" />
</Match>
<!-- === Findbugs rank 17 === -->
<!-- Filtering out due to nearly always false positives, and no negative
side effects except possibly for readability. -->
<Match>
<Bug pattern="REC_CATCH_EXCEPTION" />
<Rank value="17" />
</Match>
<!-- Filtering out due to nearly always false positives (does not respect
an implementation of an API may change, and that it is the API not the current
implementation that should be analyzed), and no negative side effects except
possibly for readability. -->
<Match>
<Bug pattern="BC_VACUOUS_INSTANCEOF" />
<Rank value="17" />
</Match>
<!-- Instance sequence number. All instances created from the same thread. -->
<Match>
<Class name="~org\.openjdk\.jmc\.browser\.attach\.LocalConnectionDescriptor" />
<Bug pattern="ST_WRITE_TO_STATIC_FROM_INSTANCE_METHOD" />
</Match>
<!-- Spotbugs says vm is guaranteed to be null at L394. Perhaps it depends on
JDK version, but it should indeed be able to be non-null. -->
<Match>
<Class name="org.openjdk.jmc.browser.attach.LocalJVMToolkit$3" />
<Bug pattern="NP_GUARANTEED_DEREF_ON_EXCEPTION_PATH" />
</Match>
<!-- These are okay, since we never write to individual elements in the
array. The array is always substituted for an entirely new array. -->
<Match>
<Class name="org.openjdk.jmc.console.ui.tabs.memory.MemoryPoolModel" />
<Bug pattern="VO_VOLATILE_REFERENCE_TO_ARRAY" />
</Match>
<Match>
<Class name="org.openjdk.jmc.console.ui.tabs.threads.ThreadsModel" />
<Bug pattern="VO_VOLATILE_REFERENCE_TO_ARRAY" />
</Match>
<Match>
<Class name="org.openjdk.jmc.ui.misc.ProgressCircle" />
<Bug pattern="VO_VOLATILE_REFERENCE_TO_ARRAY" />
</Match>
<Match>
<Class name="org.openjdk.jmc.ui.fields.FieldToolkit" />
<Bug pattern="VO_VOLATILE_REFERENCE_TO_ARRAY" />
</Match>
<!-- The super class is an rt.jar class. Can't override. Then again, we
know we only use our subclasses, so ok. -->
<Match>
<Class
name="org.openjdk.jmc.rjmx.subscription.internal.AttributeExceptionEvent" />
<Bug pattern="EQ_DOESNT_OVERRIDE_EQUALS" />
</Match>
<!-- The equals implementation of the superclass is valid for the subclass
too -->
<Match>
<Class
name="org.openjdk.jmc.rjmx.subscription.internal.CompositeFileMRIMetadata" />
<Bug pattern="EQ_DOESNT_OVERRIDE_EQUALS" />
</Match>
<!-- The equals and hashCode implementation of the superclass is valid for the subclass
too -->
<Match>
<Class
name="org.openjdk.jmc.rjmx.services.internal.HotSpot24DiagnosticCommandService$DiagnosticCommandParameter" />
<Bug pattern="EQ_DOESNT_OVERRIDE_EQUALS" />
</Match>
<!-- It's a helper class with information that may be useful in the future -->
<Match>
<Class
name="org.openjdk.jmc.rjmx.ui.internal.AttributeFieldTableSectionPart$DashboardEntry" />
<Bug pattern="UUF_UNUSED_PUBLIC_OR_PROTECTED_FIELD" />
</Match>
<!-- It's an optimization. See comment. -->
<Match>
<Class name="org.openjdk.jmc.ui.common.util.FilterMatcher" />
<Field name="lastPattern" />
<Bug pattern="ST_WRITE_TO_STATIC_FROM_INSTANCE_METHOD" />
</Match>
<!-- One can argue that this class does not need to have all those protected
methods. One could even argue that the class should be final. TODO: check this. -->
<Match>
<Class name="org.openjdk.jmc.rcp.start.MCMain" />
<Bug pattern="UUF_UNUSED_PUBLIC_OR_PROTECTED_FIELD" />
</Match>
<!-- In these cases the wait is used as a sleep. One may argue that there
are better ways, but it is indeed correct. -->
<Match>
<Class name="~.*PollManager.*" />
<Bug pattern="UW_UNCOND_WAIT " />
</Match>
<!-- False positives -->
<Match>
<Class name="org.openjdk.jmc.common.parsing.Token" />
<Bug pattern="URF_UNREAD_PUBLIC_OR_PROTECTED_FIELD" />
</Match>
<Match>
<Class name="org.openjdk.jmc.rjmx.ui.column.AsyncService" />
<Bug pattern="RV_RETURN_VALUE_IGNORED_BAD_PRACTICE" />
</Match>
<Match>
<Class
name="org.openjdk.jmc.flightrecorder.ui.components.operativeset.model.EventToolkit" />
<Bug pattern="BIT_SIGNED_CHECK" />
</Match>
<Match>
<Class name="org.openjdk.jmc.rjmx.triggers.internal.NotificationTrigger" />
<Bug pattern="BIT_SIGNED_CHECK" />
</Match>
<Match>
<Class name="org.openjdk.jmc.rjmx.internal.KnownObjectNames" />
<Bug pattern="DE_MIGHT_IGNORE" />
</Match>
<Match>
<Class name="org.openjdk.jmc.rjmx.internal.MCMBeanServerConnection" />
<Method name="tryRegisteringListener" />
<Bug pattern="DE_MIGHT_IGNORE" />
</Match>
<Match>
<Class name="org.openjdk.jmc.rjmx.internal.MCMBeanServerConnection" />
<Method name="tryRemoveListener" />
<Bug pattern="DE_MIGHT_IGNORE" />
</Match>
<Match>
<Class
name="org.openjdk.jmc.rjmx.subscription.internal.SyntheticAttributeToolkit" />
<Bug pattern="DE_MIGHT_IGNORE" />
</Match>
<Match>
<Class
name="org.openjdk.jmc.rjmx.subscription.internal.HotSpotLiveSetAttribute" />
<Bug pattern="DE_MIGHT_IGNORE" />
</Match>
<Match>
<Class name="org.openjdk.jmc.console.ui.coherence.jmx.util.CoherenceModel" />
<Method name="closeAndIgnore" />
<Bug pattern="DE_MIGHT_IGNORE" />
</Match>
<Match>
<Class name="org.openjdk.jmc.ui.formpage.FormPageContribution" />
<Bug pattern="EQ_COMPARETO_USE_OBJECT_EQUALS" />
</Match>
<!-- Yes, we want to be able to control sort order. The code is correct. -->
<Match>
<Class name="org.openjdk.jmc.rjmx.ui.column.ColumnCompositeComparator" />
<Bug pattern="RV_NEGATING_RESULT_OF_COMPARETO" />
</Match>
<!-- Temporarily turning these one off, as it is used all over JMC as a performance
enhancement. (One possible fix is to always return a copy of the array,
wrap in an immutable collection or a copy of whatever object containing the
state.) -->
<Match>
<Bug pattern="EI_EXPOSE_REP" />
</Match>
<Match>
<Bug pattern="EI_EXPOSE_REP2" />
</Match>
<Match>
<Class
name="org.openjdk.jmc.flightrecorder.controlpanel.ui.configuration.model.xml.JFCGrammar" />
<Bug pattern="MS_PKGPROTECT" />
</Match>
<!-- JMC is not run with a SecurityManager -->
<Match>
<Bug pattern="DP_CREATE_CLASSLOADER_INSIDE_DO_PRIVILEGED" />
</Match>
<!-- We we choose to ignore exceptions during shutdown, it is normally since
we do not care, and do not wish to clutter the log. -->
<Match>
<Method name="dispose" />
<Bug pattern="DE_MIGHT_IGNORE" />
</Match>
<!-- The only downside with this is a redundant nullcheck, and we seem to
only do this when API documentation tells us this may be necessary, or in
conjunction with asserts (which seems to yield false positives) -->
<Match>
<Bug pattern="RCN_REDUNDANT_NULLCHECK_OF_NONNULL_VALUE" />
</Match>
<!-- If we need a comparator to be serializable, we make it serializable -->
<Match>
<Bug pattern="SE_COMPARATOR_SHOULD_BE_SERIALIZABLE" />
</Match>
<!-- It's a UI. It is quite common to switch on event types etc. and not
have a default case. -->
<Match>
<Bug pattern="SF_SWITCH_NO_DEFAULT" />
</Match>
<!-- === Finbugs Rank 20 === -->
<!-- The standard Eclipse UI pattern is that critical components are built
in the start method of plug-ins, and or createComposite method of UI classes.
Since the method reported is not where the field is assigned, but rather
referenced, we must disable this altogether (too common with false positives). -->
<Match>
<Bug pattern="UWF_FIELD_NOT_INITIALIZED_IN_CONSTRUCTOR" />
<Rank value="20" />
</Match>
<Match>
<Class name="~.*Handler.*" />
<Bug pattern="BC_UNCONFIRMED_CAST" />
<Rank value="20" />
</Match>
<!-- We know the component to be a tab folder -->
<Match>
<Class name="org.openjdk.jmc.components.ui.design.designelement.TabElement" />
<Bug pattern="BC_UNCONFIRMED_CAST_OF_RETURN_VALUE" />
<Rank value="20" />
</Match>
<!-- Null signals done/quit -->
<Match>
<Class name="org.openjdk.jmc.rcp.start.MCMain" />
<Method name="process" />
<Bug pattern="PZLA_PREFER_ZERO_LENGTH_ARRAYS" />
<Rank value="20" />
</Match>
<!-- Null signals could not get info -->
<Match>
<Class
name="org.openjdk.jmc.flightrecorder.controlpanel.ui.wizards.RecordingWizardModel" />
<Method name="getDescriptors" />
<Bug pattern="PZLA_PREFER_ZERO_LENGTH_ARRAYS" />
<Rank value="20" />
</Match>
<!-- Null signals parse error -->
<Match>
<Class name="org.openjdk.jmc.ui.misc.PersistableSashForm" />
<Method name="parseIntArray" />
<Bug pattern="PZLA_PREFER_ZERO_LENGTH_ARRAYS" />
</Match>
<!-- Not running with security manager -->
<Match>
<Bug pattern="DP_DO_INSIDE_DO_PRIVILEGED" />
<Rank value="20" />
</Match>
<!-- Don't care about performance in the test classes -->
<Match>
<Class name="~.*Tester.*" />
<Bug pattern="SIC_INNER_SHOULD_BE_STATIC_ANON" />
<Rank value="20" />
</Match>
<!-- Type implied from isConnectioNNode method -->
<Match>
<Class name="org.openjdk.jmc.browser.views.BrowserLabelProvider" />
<Bug pattern="BC_UNCONFIRMED_CAST" />
<Rank value="20" />
</Match>
<Match>
<Class name="org.openjdk.jmc.browser.views.JVMBrowserToolkit" />
<Bug pattern="BC_UNCONFIRMED_CAST" />
<Rank value="20" />
</Match>
<Match>
<Class name="org.openjdk.jmc.browser.views.JVMBrowserNodeActionFilter" />
<Bug pattern="BC_UNCONFIRMED_CAST" />
<Rank value="20" />
</Match>
<!-- This is an artefact from when we needed to be able to add pojo triggers
for headless operation. NOTE: This will disappear after the rewrite. -->
<Match>
<Class name="org.openjdk.jmc.console.ui.notification.wizard.RuleWizard" />
<Bug pattern="BC_UNCONFIRMED_CAST_OF_RETURN_VALUE" />
<Rank value="20" />
</Match>
<!-- We always use styled text in this framework. -->
<Match>
<Class
name="org.openjdk.jmc.rcp.application.scripting.ControlContentAdapter" />
<Bug pattern="BC_UNCONFIRMED_CAST" />
<Rank value="20" />
</Match>
<!-- Yes Java2D will always be available on modern JVMs. If we do not have
access to AWT, we have much bigger problems... -->
<Match>
<Class
name="org.openjdk.jmc.flightrecorder.ui.components.graph.EventGraphTree" />
<Bug pattern="BC_UNCONFIRMED_CAST" />
<Rank value="20" />
</Match>
<Match>
<Class name="org.openjdk.jmc.greychart.GreyChartPanel" />
<Bug pattern="BC_UNCONFIRMED_CAST" />
<Rank value="20" />
</Match>
<Match>
<Class name="org.openjdk.jmc.greychart.JChartComponent" />
<Bug pattern="BC_UNCONFIRMED_CAST" />
<Rank value="20" />
</Match>
<!-- isIntegrating implies type -->
<Match>
<Class name="~.*Buffer" />
<Bug pattern="BC_UNCONFIRMED_CAST" />
<Rank value="20" />
</Match>
<!-- Safe in the framework -->
<Match>
<Class
name="~org\.openjdk\.jmc\.flightrecorder\.ui\.components\.aggregators\..*" />
<Bug pattern="BC_UNCONFIRMED_CAST" />
<Rank value="20" />
</Match>
<!-- Only added to MBeanTreeSection parts. -->
<Match>
<Class name="org.openjdk.jmc.console.ui.mbeanbrowser.tree.MBeanTreeFilter" />
<Bug pattern="BC_UNCONFIRMED_CAST" />
<Rank value="20" />
</Match>
<Match>
<Class
name="org.openjdk.jmc.console.ui.mbeanbrowser.tab.MBeanOperationsSectionPart" />
<Bug pattern="BC_UNCONFIRMED_CAST" />
<Rank value="20" />
</Match>
<!-- Lost patience, excluding this bug pattern since there are so many false
positives. I keep the other related excludes, since we may want to complete
that work at a later point. -->
<Match>
<Bug pattern="BC_UNCONFIRMED_CAST" />
<Rank value="20" />
</Match>
<Match>
<Bug pattern="BC_UNCONFIRMED_CAST_OF_RETURN_VALUE" />
<Rank value="20" />
</Match>
<!-- Instance tracking -->
<Match>
<Class name="org.openjdk.jmc.browser.views.JVMBrowserViewDragSource" />
<Bug pattern="ST_WRITE_TO_STATIC_FROM_INSTANCE_METHOD" />
<Rank value="20" />
</Match>
<!-- Will only provide values from a set of predefined values. -->
<Match>
<Class
name="org.openjdk.jmc.components.ui.design.view.layout.LayoutDataSliderListener" />
<Bug pattern="FE_FLOATING_POINT_EQUALITY" />
<Rank value="20" />
</Match>
<!-- Explicit nulls in the fields framework -->
<Match>
<Class name="~org\.openjdk\.jmc\.ui\.fields\..*" />
<Bug pattern="PZLA_PREFER_ZERO_LENGTH_ARRAYS" />
<Rank value="20" />
</Match>
<!-- In UI classes, this is really only causing the minor memory overhead
of a this pointer. We can go after these later, but it will probably only
clutter up the code. -->
<Match>
<Bug pattern="SIC_INNER_SHOULD_BE_STATIC_ANON" />
<Rank value="20" />
</Match>
<!-- These are a lot of comparisons in JMC of double values where the values
are not calculated values but previously read values. This is so common that
I turn off this warning for now. -->
<Match>
<Bug pattern="FE_FLOATING_POINT_EQUALITY" />
<Rank value="20" />
</Match>
<!-- Excluding native memory since not yet shipped -->
<Match>
<Class name="~org\.openjdk\.jmc\.console\.ui\.nativememory\..*" />
<Rank value="20" />
</Match>
<!-- Modifications to this array are considered to be thread local.
Only reference read/write are thread safe -->
<Match>
<Class name="org.openjdk.jmc.browser.views.JVMBrowserView" />
<Field name="expanded" />
<Bug pattern="VO_VOLATILE_REFERENCE_TO_ARRAY" />
</Match>
<!-- Null return value documented -->
<Match>
<Class name="org.openjdk.jmc.flightrecorder.internal.parser.binary.LoaderContext" />
<Method name="takeBuffer" />
<Bug pattern="PZLA_PREFER_ZERO_LENGTH_ARRAYS" />
</Match>
<!-- Calling method to force initialization -->
<Match>
<Class name="org.openjdk.jmc.rcp.application.Application" />
<Method name="start" />
<Bug pattern="RV_RETURN_VALUE_IGNORED_NO_SIDE_EFFECT" />
</Match>
<Match>
<Class name="org.openjdk.jmc.ui.MCAbstractUIPlugin" />
<Method name="attemptToInitAWT" />
<Bug pattern="RV_RETURN_VALUE_IGNORED_NO_SIDE_EFFECT" />
</Match>
<!-- Calling Class.forName to force class initialization -->
<Match>
<Class name="org.openjdk.jmc.attach.AttachToolkit" />
<Bug pattern="RV_RETURN_VALUE_IGNORED_NO_SIDE_EFFECT" />
</Match>
<!-- Caching in volatile variable -->
<Match>
<Class name="org.openjdk.jmc.common.util.FilterMatcher" />
<Method name="regexpMatch" />
<Bug pattern="ST_WRITE_TO_STATIC_FROM_INSTANCE_METHOD" />
</Match>
<!-- False positive, referenced by a lambda style method reference -->
<Match>
<Class name="~org\.openjdk\.jmc\.flightrecorder\.ui\.pages\.itemhandler\.AttributeMenuFactory.*" />
<Method name="attributeAggregatorMenu" />
<Bug pattern="UMAC_UNCALLABLE_METHOD_OF_ANONYMOUS_CLASS" />
</Match>
<!-- Fall through is intentional -->
<Match>
<Class name="org.openjdk.jmc.flightrecorder.stacktrace.StacktraceFormatToolkit" />
<Method name="formatFrame" />
<Bug pattern="SF_SWITCH_FALLTHROUGH" />
</Match>
<Match>
<Class name="org.openjdk.jmc.flightrecorder.ui.JfrOutlinePage$OutlineDropListener" />
<Method name="performDrop" />
<Bug pattern="SF_SWITCH_FALLTHROUGH" />
</Match>
<!-- We want to use single word "username" and "timestamp" but don't want to
change the imported JConsole code that contains other camelCase variants. -->
<Match>
<Method name="getUsername" />
<Bug pattern="NM_CONFUSING" />
</Match>
<Match>
<Method name="getLastTimestamp" />
<Bug pattern="NM_CONFUSING" />
</Match>
<!-- We will not serialize Swing components -->
<Match>
<Class name="org.openjdk.jmc.console.jconsole.tabs.JConsolePluginTabbedPane" />
<Bug pattern="SE_BAD_FIELD" />
</Match>
<!-- False positive -->
<Match>
<Class name="org.openjdk.jmc.flightrecorder.internal.FlightRecordingLoader" />
<Method name="sendProgress" />
<Bug pattern="UC_USELESS_VOID_METHOD" />
</Match>
<!-- Fields are written using reflection and must match file format. -->
<Match>
<Class name="~org\.openjdk\.jmc\.flightrecorder\.internal\.parser\.v1\.StructTypes\$.*" />
<Bug pattern="UWF_UNWRITTEN_PUBLIC_OR_PROTECTED_FIELD" />
</Match>
<Match>
<Class name="~org\.openjdk\.jmc\.flightrecorder\.internal\.parser\.v1\.StructTypes\$.*" />
<Bug pattern="UUF_UNUSED_PUBLIC_OR_PROTECTED_FIELD" />
</Match>
<!-- If we can find a better way of estimating free heap space then we should
use that instead. -->
<Match>
<Class name="org.openjdk.jmc.flightrecorder.ui.RecordingLoader" />
<Method name="doCreateRecording" />
<Bug pattern="DM_GC" />
</Match>
<!-- These could theoretically be reworked into static inner classes but
it is too much work and the performance impact is minimal. -->
<Match>
<Class name="org.openjdk.jmc.flightrecorder.ext.wls.WlsOverviewPage$WlsOverviewPageUi" />
<Bug pattern="SIC_INNER_SHOULD_BE_STATIC_NEEDS_THIS" />
</Match>
<Match>
<Class name="org.openjdk.jmc.flightrecorder.ui.pages.DistinctItemsPage$DistinctItemsUi" />
<Bug pattern="SIC_INNER_SHOULD_BE_STATIC_NEEDS_THIS" />
</Match>
<Match>
<Class name="org.openjdk.jmc.flightrecorder.ui.pages.TlabPage$TlabUI" />
<Bug pattern="SIC_INNER_SHOULD_BE_STATIC_NEEDS_THIS" />
</Match>
<Match>
<Class name="org.openjdk.jmc.flightrecorder.stacktrace.StacktraceModel$Fork" />
<Bug pattern="SIC_INNER_SHOULD_BE_STATIC_NEEDS_THIS" />
</Match>
<!-- False positive. CompletableFuture is completely happy with null and
the value is ignored by consumers. Actually since this is a CompletableFuture<Void>,
null is the only permitted value. -->
<Match>
<Class name="org.openjdk.jmc.flightrecorder.ui.JfrPropertySheet" />
<Method name="show" />
<Bug pattern="NP_NONNULL_PARAM_VIOLATION" />
</Match>
<!-- Skipping our embedded ASM -->
<Match>
<Class name="~org\.openjdk\.jmc\.internal\.org\.objectweb\.asm\..*"/>
</Match>
<!-- Field initialized indirectly through super constructor. It works but
should still be changed to a safer initialization flow. -->
<Match>
<Class name="org.openjdk.jmc.flightrecorder.ui.pages.JavaApplicationPage$JavaApplicationUi"/>
<Field name="lanes"/>
<Bug pattern="UR_UNINIT_READ"/>
</Match>
<Match>
<Class name="org.openjdk.jmc.flightrecorder.ui.pages.ThreadsPage$ThreadsPageUi"/>
<Field name="lanes"/>
<Bug pattern="UR_UNINIT_READ"/>
</Match>
<!-- Exclude the testserver package. It should really be fixed but is only used
while testing so it is low priority. -->
<Match>
<Class name="~org\.openjdk\.jmc\.testserver\..*"/>
</Match>
<!-- Exclude various test classes. These are of low priority to fix. -->
<Match>
<Class name="org.openjdk.jmc.flightrecorder.ui.RecordingFileWriter"/>
</Match>
<Match>
<Class name="org.openjdk.jmc.greychart.testutil.RenderingOutOfOrderTester"/>
</Match>
<Match>
<Class name="org.openjdk.jmc.rjmx.testutil.RockitRunner"/>
</Match>
<Match>
<Class name="org.openjdk.jmc.rjmx.testutil.RockitRunner$WorkerThread"/>
</Match>
<Match>
<Class name="org.openjdk.jmc.rjmx.internal.RJMXConnectionTest"/>
</Match>
<Match>
<Class name="org.openjdk.jmc.rjmx.synthetic.CountingAttribute"/>
</Match>
<Match>
<Class name="org.openjdk.jmc.rjmx.RjmxTestCase"/>
</Match>
<Match>
<Class name="org.openjdk.jmc.rjmx.testutil.JVMKeepAlive"/>
</Match>
<Match>
<Class name="org.openjdk.jmc.rjmx.subscription.internal.EvilMethodsClass"/>
</Match>
</FindBugsFilter>