1 <?xml version="1.0" encoding="UTF-8"?>
2 <!--
3 Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
4
5 DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
6
7 The contents of this file are subject to the terms of either the Universal Permissive License
8 v 1.0 as shown at http://oss.oracle.com/licenses/upl
9
10 or the following license:
11
12 Redistribution and use in source and binary forms, with or without modification, are permitted
13 provided that the following conditions are met:
14
15 1. Redistributions of source code must retain the above copyright notice, this list of conditions
16 and the following disclaimer.
17
18 2. Redistributions in binary form must reproduce the above copyright notice, this list of
19 conditions and the following disclaimer in the documentation and/or other materials provided with
20 the distribution.
21
22 3. Neither the name of the copyright holder nor the names of its contributors may be used to
23 endorse or promote products derived from this software without specific prior written permission.
24
25 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
26 IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
27 FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
28 CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
29 DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
30 DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
31 WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY
32 WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
33 -->
34 <FindBugsFilter>
35 <!-- Skip I18n -->
36 <Match>
37 <Bug pattern="DM_DEFAULT_ENCODING"/>
38 </Match>
39 <Match>
40 <Bug pattern="DM_CONVERT_CASE"/>
41 </Match>
42
43 <!-- Allowing Eclipse plug-in style singleton default instances -->
44 <Match>
45 <Class name="~org\.openjdk\.jmc\..*Plugin" />
46 <Method name="<init>" />
47 <Bug pattern="ST_WRITE_TO_STATIC_FROM_INSTANCE_METHOD" />
48 </Match>
49
50 <!-- Allow tri state Boolean methods in these framework methods, i.e. the
51 methods are used by the framework, and known to work with null values. -->
52 <Match>
53 <Class
54 name="org.openjdk.jmc.console.ui.notification.tab.RuleCheckedStateProvider" />
55 <Bug pattern="NP_BOOLEAN_RETURN_NULL" />
56 </Match>
57 <Match>
58 <Class name="org.openjdk.jmc.console.ui.misc.CompositeSupport" />
59 <Method name="getBoolean" />
60 <Bug pattern="NP_BOOLEAN_RETURN_NULL" />
61 </Match>
62 <Match>
63 <Class name="org.openjdk.jmc.console.ui.classes.model.ClassLoaderInstance" />
64 <Bug pattern="NP_BOOLEAN_RETURN_NULL" />
65 </Match>
66 <Match>
67 <Class name="~org.openjdk.jmc.ui.checkedstate..*" />
68 <Bug pattern="NP_BOOLEAN_RETURN_NULL" />
69 </Match>
70 <Match>
71 <Class name="org.openjdk.jmc.rjmx.triggers.fields.internal.Field" />
72 <Bug pattern="NP_BOOLEAN_RETURN_NULL" />
73 </Match>
74 <Match>
75 <Class name="org.openjdk.jmc.flightrecorder.ui.views.types.TypeCheckedStateProvider" />
76 <Bug pattern="NP_BOOLEAN_RETURN_NULL" />
77 </Match>
78 <Match>
79 <Class name="org.openjdk.jmc.flightrecorder.internal.parser.v1.StructTypes$JfrMethod" />
80 <Method name="isNative" />
81 <Bug pattern="NP_BOOLEAN_RETURN_NULL" />
82 </Match>
83 <Match>
84 <Class name="org.openjdk.jmc.flightrecorder.internal.parser.v1.StructTypes$JfrOldObject" />
85 <Method name="isRoot" />
86 <Bug pattern="NP_BOOLEAN_RETURN_NULL" />
87 </Match>
88
89 <!-- Just internal helper method -->
90 <Match>
91 <Class name="org.openjdk.jmc.rjmx.internal.ConnectionCapabilitiesToolkit" />
92 <Bug pattern="NP_BOOLEAN_RETURN_NULL" />
93 </Match>
94
95 <!-- State changed in volatile. Signal used to stop wait and speed up thread
96 end. -->
97 <Match>
98 <Class name="org.openjdk.jmc.console.ui.common.PollManager" />
99 <Method name="stopIfNotStopped" />
100 <Bug pattern="NN_NAKED_NOTIFY" />
101 </Match>
102 <Match>
103 <Class name="org.openjdk.jmc.ui.polling.PollManager" />
104 <Or>
105 <Method name="stopIfNotStopped" />
106 <Method name="poll" />
107 </Or>
108 <Bug pattern="NN_NAKED_NOTIFY" />
109 </Match>
110
111 <!-- Reference comparisons known to be okay, and in performance critical
112 areas -->
113 <Match>
114 <Class
115 name="org.openjdk.jmc.flightrecorder.ui.components.chart.model.FilteredFLRIterator" />
116 <Method name="skipForward" />
117 <Bug pattern="ES_COMPARING_STRINGS_WITH_EQ" />
118 </Match>
119
120 <!-- Plain false positive -->
121 <Match>
122 <Class name="org.openjdk.jmc.components.ui.settings.IconEditor" />
123 <Method name="fillPixel" />
124 <Bug pattern="RCN_REDUNDANT_NULLCHECK_WOULD_HAVE_BEEN_A_NPE" />
125 </Match>
126
127 <!-- === Level 16 nitpicks and higher === -->
128 <!-- Eclipse uses a rather smart way to handle NSL that rubs FindBugs the
129 wrong way -->
130 <Match>
131 <Class name="~.*\.Messages" />
132 <Bug pattern="MS_SHOULD_BE_FINAL" />
133 </Match>
134
135 <!-- The exit command which, obviously, works as advertised. The version command
136 displays version info and exits. These commands are available from JMCs
137 internal command console, and only affects the client. I.e, they are not
138 remote commands. -->
139 <Match>
140 <Or>
141 <Class name="org.openjdk.jmc.commands.internal.executables.Exit" />
142 <Class name="org.openjdk.jmc.commands.internal.executables.Version" />
143 </Or>
144 <Method name="execute" />
145 <Bug pattern="DM_EXIT" />
146 </Match>
147
148 <!-- Used for best effort in-memory size determination. If we get a better
149 way to determine this, say perf counters we will change this. Note that this
150 is done in the JMC GUI, not in any framework code that may be used by third
151 party (server) consumers. -->
152 <Match>
153 <Class name="org.openjdk.jmc.flightrecorder.ui.FlightRecordingEditor" />
154 <Bug pattern="DM_GC" />
155 </Match>
156
157 <!-- Also intended exit - user wanted to quit on start up -->
158 <Match>
159 <Class name="org.openjdk.jmc.rcp.application.RCPApplicationIDESupport$1" />
160 <Method name="run" />
161 <Bug pattern="DM_EXIT" />
162 </Match>
163
164 <!-- Optimized equals(), since we know it will only be compared to this
165 type... -->
166 <Match>
167 <Class
168 name="org.openjdk.jmc.flightrecorder.internal.parser.binary.factories.EqualityProxy" />
169 <Bug pattern="BC_EQUALS_METHOD_SHOULD_WORK_FOR_ALL_OBJECTS" />
170 </Match>
171
172 <!-- Exception ignored on purpose, trying to determine what ciphers can
173 be used for PBE -->
174 <Match>
175 <Class name="org.openjdk.jmc.ui.common.security.DefaultSecurityManager" />
176 <Bug pattern="DE_MIGHT_IGNORE" />
177 </Match>
178
179 <!-- Our own framework clone -->
180 <Match>
181 <Class name="org.openjdk.jmc.console.ui.profiler.exception.Template" />
182 <Bug pattern="CN_IMPLEMENTS_CLONE_BUT_NOT_CLONEABLE" />
183 </Match>
184 <Match>
185 <Class name="org.openjdk.jmc.console.ui.profiler.method.Template" />
186 <Bug pattern="CN_IDIOM_NO_SUPER_CALL" />
187 </Match>
188 <Match>
189 <Class name="org.openjdk.jmc.joverflow.support.ClassAndOvhdComboList" />
190 <Bug pattern="CN_IDIOM_NO_SUPER_CALL" />
191 </Match>
192 <Match>
193 <Class name="org.openjdk.jmc.joverflow.support.ClassAndSizeComboList" />
194 <Bug pattern="CN_IDIOM_NO_SUPER_CALL" />
195 </Match>
196
197 <!-- Class representing a profiled exception -->
198 <Match>
199 <Class
200 name="org.openjdk.jmc.console.ui.profiler.exception.ProfiledException" />
201 <Bug pattern="NM_CLASS_NOT_EXCEPTION" />
202 </Match>
203
204 <!-- Ignoring mockup classes -->
205 <Match>
206 <Class name="~org\.openjdk\.jmc\.rjmx\.mockup\..*" />
207 </Match>
208
209 <!-- Ignoring directory creation problem, as the code path for the actual
210 logging will hit the problem and display an error -->
211 <Match>
212 <Class name="org.openjdk.jmc.rcp.logging.LoggingToolkit" />
213 <Method name="createFolders" />
214 <Bug pattern="RV_RETURN_VALUE_IGNORED_BAD_PRACTICE" />
215 </Match>
216
217 <!-- Will never do nothing but reference comparisons of these. Only equal
218 when the same. -->
219 <Match>
220 <Class name="org.openjdk.jmc.ui.layout.SimpleLayout$CalculationData" />
221 <Bug pattern="EQ_COMPARETO_USE_OBJECT_EQUALS" />
222 </Match>
223
224 <!-- Reversing the order of compare is in this case very deliberate, and
225 in fact the whole point. The framework is for visualizing data in tables,
226 and for instance used by tables to change the sort order of the content. -->
227 <Match>
228 <Class name="org.openjdk.jmc.ui.model.fields.Field" />
229 <Bug pattern="RV_NEGATING_RESULT_OF_COMPARETO" />
230 </Match>
231
232 <!-- There will be no nodes that are duplicates and should be equal when
233 the instances are not the exact same. Could possibly microoptimize by having
234 a better hash code, but may be confusing to not also implement equals. -->
235 <Match>
236 <Class
237 name="org.openjdk.jmc.flightrecorder.ui.components.graph.TreeNodeWrapper" />
238 <Bug pattern="EQ_COMPARETO_USE_OBJECT_EQUALS" />
239 </Match>
240
241 <!-- We only sort these instances using compareTo(), not to mention they
242 are mutable - there is no hashCode better than the default. -->
243 <Match>
244 <Class name="org.openjdk.jmc.rjmx.triggers.TriggerRule" />
245 <Bug pattern="EQ_COMPARETO_USE_OBJECT_EQUALS" />
246 </Match>
247 <Match>
248 <Class
249 name="org.openjdk.jmc.flightrecorder.ui.components.graph.renderer.RenderLayoutData" />
250 <Bug pattern="EQ_COMPARETO_USE_OBJECT_EQUALS" />
251 </Match>
252
253 <!-- We need to execute equals on these instances but since they are mutable
254 we can not provide a good hashCode implementation. -->
255 <Match>
256 <Class name="org.openjdk.jmc.ui.dial.ImageDescription" />
257 <Bug pattern="HE_EQUALS_USE_HASHCODE" />
258 </Match>
259 <Match>
260 <Class name="org.openjdk.jmc.ui.dial.DialViewer$Range" />
261 <Bug pattern="HE_EQUALS_USE_HASHCODE" />
262 </Match>
263
264 <!-- === The following are in experimental plug-ins === -->
265 <!-- Increments of the volatile are always by the same thread (from the
266 run method), either directly or indirectly. -->
267 <Match>
268 <Class name="org.openjdk.jmc.test.services.applications.ExceptionThrower" />
269 <Bug pattern="VO_VOLATILE_INCREMENT" />
270 <Method name="run" />
271 </Match>
272 <Match>
273 <Class name="org.openjdk.jmc.test.services.ServiceThread" />
274 <Bug pattern="VO_VOLATILE_INCREMENT" />
275 <Method name="updateStatistics" />
276 </Match>
277
278 <!-- We only sort these instances using compareTo(), not to mention they
279 are mutable - there is no hashCode better than the default. -->
280 <Match>
281 <Class name="org.openjdk.jmc.pde.PluginReference" />
282 <Bug pattern="EQ_COMPARETO_USE_OBJECT_EQUALS" />
283 </Match>
284
285 <!-- === JOverflow === -->
286 <!-- These are ok exit calls for the code to run JOverflow in stand-alone
287 mode -->
288 <Match>
289 <Or>
290 <Class name="org.openjdk.jmc.joverflow.ui.FxMain" />
291 <Class name="org.openjdk.jmc.joverflow.ui.FxMain$1" />
292 </Or>
293 <Bug pattern="DM_EXIT" />
294 </Match>
295
296 <!-- These are injected by the framework through special annotations, and
297 will be initialized. -->
298 <Match>
299 <Class name="org.openjdk.jmc.joverflow.ui.JOverflowFxUi" />
300 <Method name="<init>" />
301 <Bug pattern="UR_UNINIT_READ" />
302 </Match>
303
304 <Match>
305 <Class name="org.openjdk.jmc.joverflow.Main" />
306 <Bug pattern="DM_EXIT" />
307 </Match>
308
309 <!-- We only sort these instances using compareTo(), and never use them
310 where equals() can be used -->
311 <Match>
312 <Class name="org.openjdk.jmc.joverflow.support.ClassAndSizeCombo" />
313 <Bug pattern="EQ_COMPARETO_USE_OBJECT_EQUALS" />
314 </Match>
315 <Match>
316 <Class name="org.openjdk.jmc.joverflow.heap.model.Root" />
317 <Bug pattern="EQ_COMPARETO_USE_OBJECT_EQUALS" />
318 </Match>
319 <Match>
320 <Class name="org.openjdk.jmc.joverflow.heap.model.Root$1" />
321 <Bug pattern="EQ_COMPARETO_USE_OBJECT_EQUALS" />
322 </Match>
323 <Match>
324 <Or>
325 <Class name="org.openjdk.jmc.joverflow.batch.ReferencedObjCluster$Collections" />
326 <Class name="org.openjdk.jmc.joverflow.batch.ReferencedObjCluster$DupArrays" />
327 <Class name="org.openjdk.jmc.joverflow.batch.ReferencedObjCluster$DupStrings" />
328 <Class name="org.openjdk.jmc.joverflow.batch.ReferencedObjCluster$HighSizeObjects" />
329 <Class name="org.openjdk.jmc.joverflow.batch.ReferencedObjCluster$WeakHashMaps" />
330 </Or>
331 <Bug pattern="EQ_COMPARETO_USE_OBJECT_EQUALS" />
332 </Match>
333
334 <!-- Increments of the volatile are always by the same thread (from the
335 run method), either directly or indirectly. -->
336 <Match>
337 <Class name="org.openjdk.jmc.joverflow.heap.parser.CachedReadBuffer" />
338 <Bug pattern="VO_VOLATILE_INCREMENT" />
339 <Method name="get" />
340 </Match>
341 <!-- Used as best effort cache size determination -->
342 <Match>
343 <Class name="org.openjdk.jmc.joverflow.ui.model.ModelLoader" />
344 <Bug pattern="DM_GC" />
345 </Match>
346
347 <!-- Experimental/benchmarking code is ok to use explicit System.gc() -->
348 <Match>
349 <Class name="org.openjdk.jmc.joverflow.heap.parser.CachedReadBuffer" />
350 <Bug pattern="DM_GC" />
351 <Method name="determineCacheSizeFromFreeMem" />
352 </Match>
353 <Match>
354 <Class name="org.openjdk.jmc.joverflow.agent.MemoryTracker$1" />
355 <Bug pattern="DM_GC" />
356 <Method name="run" />
357 </Match>
358
359 <!-- Optimized equals() - proper type checks are done in the callee method -->
360 <Match>
361 <Class
362 name="org.openjdk.jmc.joverflow.support.RefChainElementImpl$AbstractElement" />
363 <Method name="equals" />
364 <Bug pattern="BC_EQUALS_METHOD_SHOULD_WORK_FOR_ALL_OBJECTS" />
365 </Match>
366
367 <!-- A shared object does change (gets initialized), but FindBugs cannot
368 recognize that. -->
369 <Match>
370 <Class name="org.openjdk.jmc.joverflow.PhoneHome$ConnectThread" />
371 <Method name="run" />
372 <Bug pattern="NN_NAKED_NOTIFY" />
373 </Match>
374
375 <!-- JOverflow: Fire and forget model loaders. -->
376 <Match>
377 <Class name="org.openjdk.jmc.joverflow.ui.FxMain" />
378 <Method name="start" />
379 <Bug pattern="RV_RETURN_VALUE_IGNORED_BAD_PRACTICE" />
380 </Match>
381 <Match>
382 <Class name="org.openjdk.jmc.joverflow.ui.JOverflowEditor" />
383 <Method name="createScene" />
384 <Bug pattern="RV_RETURN_VALUE_IGNORED_BAD_PRACTICE" />
385 </Match>
386
387 <!-- JOverflow: Unread public field. May be used in the future. -->
388 <Match>
389 <Class name="org.openjdk.jmc.joverflow.support.CompressibleStringStats" />
390 <Field name="nBackingCharArrays" />
391 <Bug pattern="URF_UNREAD_PUBLIC_OR_PROTECTED_FIELD" />
392 </Match>
393 <Match>
394 <Class name="org.openjdk.jmc.joverflow.support.DupStringStats" />
395 <Field name="nBackingCharArrays" />
396 <Bug pattern="URF_UNREAD_PUBLIC_OR_PROTECTED_FIELD" />
397 </Match>
398 <!-- JOverflow: Uncalled debug method. -->
399 <Match>
400 <Class name="org.openjdk.jmc.joverflow.heap.parser.CachedReadBuffer" />
401 <Method name="checkListConsistency" />
402 <Bug pattern="UPM_UNCALLED_PRIVATE_METHOD" />
403 </Match>
404 <!-- JOverflow: Unused debug counters. -->
405 <Match>
406 <Class name="org.openjdk.jmc.joverflow.heap.parser.CachedReadBuffer" />
407 <Or>
408 <Field name="numReads" />
409 <Field name="numPageSwaps" />
410 <Field name="lastReadPos" />
411 <Field name="numChanges" />
412 </Or>
413 <Bug pattern="UUF_UNUSED_FIELD" />
414 </Match>
415 <Match>
416 <Class name="org.openjdk.jmc.joverflow.stats.HeapScaner" />
417 <Method name="analyzeViaAllObjectsEnum" />
418 <Bug pattern="DLS_DEAD_LOCAL_STORE" />
419 </Match>
420 <!-- JOverflow explicit null returned instead of empty array. -->
421 <Match>
422 <Class name="org.openjdk.jmc.joverflow.descriptors.AbstractCollectionDescriptor" />
423 <Method name="getKnownAndPrimitiveFieldIndices" />
424 <Bug pattern="PZLA_PREFER_ZERO_LENGTH_ARRAYS" />
425 </Match>
426 <Match>
427 <Or>
428 <Class name="org.openjdk.jmc.joverflow.heap.parser.ReadBuffer$CachedReadBufferFactory" />
429 <Class name="org.openjdk.jmc.joverflow.heap.parser.ReadBuffer$MmappedBufferFactory" />
430 </Or>
431 <Method name="getFileImageBytes" />
432 <Bug pattern="PZLA_PREFER_ZERO_LENGTH_ARRAYS" />
433 </Match>
434 <Match>
435 <Class name="org.openjdk.jmc.joverflow.stats.BreadthFirstHeapScanner" />
436 <Method name="getNewFrontier" />
437 <Bug pattern="PZLA_PREFER_ZERO_LENGTH_ARRAYS" />
438 </Match>
439 <Match>
440 <Class name="org.openjdk.jmc.joverflow.util.StringInterner" />
441 <Or>
442 <Method name="internStringArrayContents" />
443 <Method name="internStringsInObjectArray" />
444 </Or>
445 <Bug pattern="PZLA_PREFER_ZERO_LENGTH_ARRAYS" />
446 </Match>
447
448 <!-- JOverflow examples code: Explicitly never written fields. -->
449 <Match>
450 <Class name="examples.FixableIssues$DeadFieldHolder" />
451 <Field name="dataField" />
452 <Bug pattern="UWF_UNWRITTEN_FIELD" />
453 </Match>
454 <!-- JOverflow examples code: Unread fields. -->
455 <Match>
456 <Or>
457 <Class name="examples.DuplicateArrays" />
458 <Class name="examples.DuplicateStrings" />
459 <Class name="examples.FixableIssues" />
460 <Class name="examples.VariousIssues" />
461 <Class name="examples.VariousIssues2" />
462 <Class name="examples.VariousIssues3" />
463 </Or>
464 <Method name="main" />
465 <Bug pattern="DLS_DEAD_LOCAL_STORE" />
466 </Match>
467 <Match>
468 <Class name="examples.VariousIssues$RefBackToKey" />
469 <Bug pattern="URF_UNREAD_FIELD" />
470 </Match>
471 <Match>
472 <Or>
473 <Class name="examples.VariousIssues2$CustomRef1" />
474 <Class name="examples.VariousIssues2$CustomRef2" />
475 <Class name="examples.VariousIssues2$LLElementP" />
476 </Or>
477 <Field name="ref" />
478 <Bug pattern="URF_UNREAD_FIELD" />
479 </Match>
480 <!-- JOverflow examples code: Explicit string duplication. -->
481 <Match>
482 <Class name="examples.DuplicateStrings" />
483 <Method name="duplicateStringShallow" />
484 <Bug pattern="DM_STRING_CTOR" />
485 </Match>
486 <!-- JOverflow examples code: Explicit string duplication. -->
487 <Match>
488 <Class name="examples.VariousIssues" />
489 <Bug pattern="DM_GC" />
490 </Match>
491 <!-- JOverflow test code: Unread fields. -->
492 <Match>
493 <Class name="org.openjdk.jmc.joverflow.stats.VariousIssueTest3" />
494 <Method name="testVariousIssues" />
495 <Bug pattern="DLS_DEAD_LOCAL_STORE" />
496 </Match>
497 <Match>
498 <Class name="org.openjdk.jmc.joverflow.heap.model.TestJavaObjectTable" />
499 <Method name="testIteratingUnvisitedObjects" />
500 <Bug pattern="UC_USELESS_OBJECT" />
501 </Match>
502 <!-- JOverflow test code: VM shutdown. -->
503 <Match>
504 <Class name="examples.VariousIssues" />
505 <Method name="<init>" />
506 <Bug pattern="DM_EXIT" />
507 </Match>
508
509 <!-- JDP test code: VM shutdown. -->
510 <Match>
511 <Class name="org.openjdk.jmc.jdp.ServerTester" />
512 <Or>
513 <Method name="main" />
514 <Method name="createName" />
515 <Method name="createAgentUrl" />
516 </Or>
517 <Bug pattern="DM_EXIT" />
518 </Match>
519
520 <!-- === Filtering out test classes right now === -->
521 <Match>
522 <Class name="~.*\.test\..*" />
523 </Match>
524 <Match>
525 <Class name="~.*\.uitest\..*" />
526 </Match>
527 <Match>
528 <Class name="~.*Test" />
529 </Match>
530 <Match>
531 <Class name="~.*Test\$.*" />
532 </Match>
533 <Match>
534 <Class name="org.openjdk.jmc.ui.checkedstate.TreeContentProvider" />
535 </Match>
536
537 <!-- === Filtering out classes we do not own === -->
538 <!-- The sun classes are only included as part of an internal JConsole plug-in
539 used for testing. -->
540 <Match>
541 <Class name="~sun\.tools\..*" />
542 </Match>
543 <Match>
544 <Class name="~com\.sun\..*" />
545 </Match>
546
547 <!-- === Findbugs rank 17 === -->
548 <!-- Filtering out due to nearly always false positives, and no negative
549 side effects except possibly for readability. -->
550 <Match>
551 <Bug pattern="REC_CATCH_EXCEPTION" />
552 <Rank value="17" />
553 </Match>
554 <!-- Filtering out due to nearly always false positives (does not respect
555 an implementation of an API may change, and that it is the API not the current
556 implementation that should be analyzed), and no negative side effects except
557 possibly for readability. -->
558 <Match>
559 <Bug pattern="BC_VACUOUS_INSTANCEOF" />
560 <Rank value="17" />
561 </Match>
562
563 <!-- Instance sequence number. All instances created from the same thread. -->
564 <Match>
565 <Class name="~org\.openjdk\.jmc\.browser\.attach\.LocalConnectionDescriptor" />
566 <Bug pattern="ST_WRITE_TO_STATIC_FROM_INSTANCE_METHOD" />
567 </Match>
568
569 <!-- Spotbugs says exception can't be thrown, but many of the attach API calls
570 before are declaring exceptions. -->
571 <Match>
572 <Class name="org.openjdk.jmc.browser.attach.LocalJVMToolkit$2" />
573 <Bug pattern="REC_CATCH_EXCEPTION" />
574 </Match>
575
576 <!-- Spotbugs says vm is guaranteed to be null at L394. Perhaps it depends on
577 JDK version, but it should indeed be able to be non-null. -->
578 <Match>
579 <Class name="org.openjdk.jmc.browser.attach.LocalJVMToolkit$3" />
580 <Bug pattern="NP_GUARANTEED_DEREF_ON_EXCEPTION_PATH" />
581 </Match>
582
583 <!-- These are okay, since we never write to individual elements in the
584 array. The array is always substituted for an entirely new array. -->
585 <Match>
586 <Class name="org.openjdk.jmc.console.ui.tabs.memory.MemoryPoolModel" />
587 <Bug pattern="VO_VOLATILE_REFERENCE_TO_ARRAY" />
588 </Match>
589 <Match>
590 <Class name="org.openjdk.jmc.console.ui.tabs.threads.ThreadsModel" />
591 <Bug pattern="VO_VOLATILE_REFERENCE_TO_ARRAY" />
592 </Match>
593 <Match>
594 <Class name="org.openjdk.jmc.ui.misc.ProgressCircle" />
595 <Bug pattern="VO_VOLATILE_REFERENCE_TO_ARRAY" />
596 </Match>
597 <Match>
598 <Class name="org.openjdk.jmc.ui.fields.FieldToolkit" />
599 <Bug pattern="VO_VOLATILE_REFERENCE_TO_ARRAY" />
600 </Match>
601
602 <!-- The super class is an rt.jar class. Can't override. Then again, we
603 know we only use our subclasses, so ok. -->
604 <Match>
605 <Class
606 name="org.openjdk.jmc.rjmx.subscription.internal.AttributeExceptionEvent" />
607 <Bug pattern="EQ_DOESNT_OVERRIDE_EQUALS" />
608 </Match>
609
610 <!-- The equals implementation of the superclass is valid for the subclass
611 too -->
612 <Match>
613 <Class
614 name="org.openjdk.jmc.rjmx.subscription.internal.CompositeFileMRIMetadata" />
615 <Bug pattern="EQ_DOESNT_OVERRIDE_EQUALS" />
616 </Match>
617
618 <!-- The equals and hashCode implementation of the superclass is valid for the subclass
619 too -->
620 <Match>
621 <Class
622 name="org.openjdk.jmc.rjmx.services.internal.HotSpot24DiagnosticCommandService$DiagnosticCommandParameter" />
623 <Bug pattern="EQ_DOESNT_OVERRIDE_EQUALS" />
624 </Match>
625
626 <!-- It's a helper class with information that may be useful in the future -->
627 <Match>
628 <Class
629 name="org.openjdk.jmc.rjmx.ui.internal.AttributeFieldTableSectionPart$DashboardEntry" />
630 <Bug pattern="UUF_UNUSED_PUBLIC_OR_PROTECTED_FIELD" />
631 </Match>
632
633 <!-- It's an optimization. See comment. -->
634 <Match>
635 <Class name="org.openjdk.jmc.ui.common.util.FilterMatcher" />
636 <Field name="lastPattern" />
637 <Bug pattern="ST_WRITE_TO_STATIC_FROM_INSTANCE_METHOD" />
638 </Match>
639
640 <!-- One can argue that this class does not need to have all those protected
641 methods. One could even argue that the class should be final. TODO: check this. -->
642 <Match>
643 <Class name="org.openjdk.jmc.rcp.start.MCMain" />
644 <Bug pattern="UUF_UNUSED_PUBLIC_OR_PROTECTED_FIELD" />
645 </Match>
646
647 <!-- In these cases the wait is used as a sleep. One may argue that there
648 are better ways, but it is indeed correct. -->
649 <Match>
650 <Class name="~.*PollManager.*" />
651 <Bug pattern="UW_UNCOND_WAIT " />
652 </Match>
653
654 <!-- False positives -->
655 <Match>
656 <Class name="org.openjdk.jmc.common.parsing.Token" />
657 <Bug pattern="URF_UNREAD_PUBLIC_OR_PROTECTED_FIELD" />
658 </Match>
659 <Match>
660 <Class name="org.openjdk.jmc.rjmx.ui.column.AsyncService" />
661 <Bug pattern="RV_RETURN_VALUE_IGNORED_BAD_PRACTICE" />
662 </Match>
663 <Match>
664 <Class
665 name="org.openjdk.jmc.flightrecorder.ui.components.operativeset.model.EventToolkit" />
666 <Bug pattern="BIT_SIGNED_CHECK" />
667 </Match>
668 <Match>
669 <Class name="org.openjdk.jmc.rjmx.triggers.internal.NotificationTrigger" />
670 <Bug pattern="BIT_SIGNED_CHECK" />
671 </Match>
672 <Match>
673 <Class name="org.openjdk.jmc.rjmx.internal.KnownObjectNames" />
674 <Bug pattern="DE_MIGHT_IGNORE" />
675 </Match>
676 <Match>
677 <Class name="org.openjdk.jmc.rjmx.internal.MCMBeanServerConnection" />
678 <Method name="tryRegisteringListener" />
679 <Bug pattern="DE_MIGHT_IGNORE" />
680 </Match>
681 <Match>
682 <Class name="org.openjdk.jmc.rjmx.internal.MCMBeanServerConnection" />
683 <Method name="tryRemoveListener" />
684 <Bug pattern="DE_MIGHT_IGNORE" />
685 </Match>
686 <Match>
687 <Class
688 name="org.openjdk.jmc.rjmx.subscription.internal.SyntheticAttributeToolkit" />
689 <Bug pattern="DE_MIGHT_IGNORE" />
690 </Match>
691 <Match>
692 <Class
693 name="org.openjdk.jmc.rjmx.subscription.internal.HotSpotLiveSetAttribute" />
694 <Bug pattern="DE_MIGHT_IGNORE" />
695 </Match>
696 <Match>
697 <Class name="org.openjdk.jmc.console.ui.coherence.jmx.util.CoherenceModel" />
698 <Method name="closeAndIgnore" />
699 <Bug pattern="DE_MIGHT_IGNORE" />
700 </Match>
701 <Match>
702 <Class name="org.openjdk.jmc.ui.formpage.FormPageContribution" />
703 <Bug pattern="EQ_COMPARETO_USE_OBJECT_EQUALS" />
704 </Match>
705
706 <!-- Yes, we want to be able to control sort order. The code is correct. -->
707 <Match>
708 <Class name="org.openjdk.jmc.rjmx.ui.column.ColumnCompositeComparator" />
709 <Bug pattern="RV_NEGATING_RESULT_OF_COMPARETO" />
710 </Match>
711
712 <!-- Temporarily turning these one off, as it is used all over JMC as a performance
713 enhancement. (One possible fix is to always return a copy of the array,
714 wrap in an immutable collection or a copy of whatever object containing the
715 state.) -->
716 <Match>
717 <Bug pattern="EI_EXPOSE_REP" />
718 </Match>
719 <Match>
720 <Bug pattern="EI_EXPOSE_REP2" />
721 </Match>
722
723 <Match>
724 <Class
725 name="org.openjdk.jmc.flightrecorder.controlpanel.ui.configuration.model.xml.JFCGrammar" />
726 <Bug pattern="MS_PKGPROTECT" />
727 </Match>
728 <!-- JMC is not run with a SecurityManager -->
729 <Match>
730 <Bug pattern="DP_CREATE_CLASSLOADER_INSIDE_DO_PRIVILEGED" />
731 </Match>
732
733 <!-- We we choose to ignore exceptions during shutdown, it is normally since
734 we do not care, and do not wish to clutter the log. -->
735 <Match>
736 <Method name="dispose" />
737 <Bug pattern="DE_MIGHT_IGNORE" />
738 </Match>
739
740 <!-- The only downside with this is a redundant nullcheck, and we seem to
741 only do this when API documentation tells us this may be necessary, or in
742 conjunction with asserts (which seems to yield false positives) -->
743 <Match>
744 <Bug pattern="RCN_REDUNDANT_NULLCHECK_OF_NONNULL_VALUE" />
745 </Match>
746
747 <!-- If we need a comparator to be serializable, we make it serializable -->
748 <Match>
749 <Bug pattern="SE_COMPARATOR_SHOULD_BE_SERIALIZABLE" />
750 </Match>
751
752 <!-- It's a UI. It is quite common to switch on event types etc. and not
753 have a default case. -->
754 <Match>
755 <Bug pattern="SF_SWITCH_NO_DEFAULT" />
756 </Match>
757
758 <!-- === Finbugs Rank 20 === -->
759 <!-- The standard Eclipse UI pattern is that critical components are built
760 in the start method of plug-ins, and or createComposite method of UI classes.
761 Since the method reported is not where the field is assigned, but rather
762 referenced, we must disable this altogether (too common with false positives). -->
763 <Match>
764 <Bug pattern="UWF_FIELD_NOT_INITIALIZED_IN_CONSTRUCTOR" />
765 <Rank value="20" />
766 </Match>
767 <Match>
768 <Class name="~.*Handler.*" />
769 <Bug pattern="BC_UNCONFIRMED_CAST" />
770 <Rank value="20" />
771 </Match>
772 <!-- We know the component to be a tab folder -->
773 <Match>
774 <Class name="org.openjdk.jmc.components.ui.design.designelement.TabElement" />
775 <Bug pattern="BC_UNCONFIRMED_CAST_OF_RETURN_VALUE" />
776 <Rank value="20" />
777 </Match>
778
779 <!-- Null signals done/quit -->
780 <Match>
781 <Class name="org.openjdk.jmc.rcp.start.MCMain" />
782 <Method name="process" />
783 <Bug pattern="PZLA_PREFER_ZERO_LENGTH_ARRAYS" />
784 <Rank value="20" />
785 </Match>
786 <!-- Null signals could not get info -->
787 <Match>
788 <Class
789 name="org.openjdk.jmc.flightrecorder.controlpanel.ui.wizards.RecordingWizardModel" />
790 <Method name="getDescriptors" />
791 <Bug pattern="PZLA_PREFER_ZERO_LENGTH_ARRAYS" />
792 <Rank value="20" />
793 </Match>
794 <!-- Null signals parse error -->
795 <Match>
796 <Class name="org.openjdk.jmc.ui.misc.PersistableSashForm" />
797 <Method name="parseIntArray" />
798 <Bug pattern="PZLA_PREFER_ZERO_LENGTH_ARRAYS" />
799 </Match>
800
801 <!-- Not running with security manager -->
802 <Match>
803 <Bug pattern="DP_DO_INSIDE_DO_PRIVILEGED" />
804 <Rank value="20" />
805 </Match>
806 <!-- Don't care about performance in the test classes -->
807 <Match>
808 <Class name="~.*Tester.*" />
809 <Bug pattern="SIC_INNER_SHOULD_BE_STATIC_ANON" />
810 <Rank value="20" />
811 </Match>
812
813 <!-- Type implied from isConnectioNNode method -->
814 <Match>
815 <Class name="org.openjdk.jmc.browser.views.BrowserLabelProvider" />
816 <Bug pattern="BC_UNCONFIRMED_CAST" />
817 <Rank value="20" />
818 </Match>
819 <Match>
820 <Class name="org.openjdk.jmc.browser.views.JVMBrowserToolkit" />
821 <Bug pattern="BC_UNCONFIRMED_CAST" />
822 <Rank value="20" />
823 </Match>
824 <Match>
825 <Class name="org.openjdk.jmc.browser.views.JVMBrowserNodeActionFilter" />
826 <Bug pattern="BC_UNCONFIRMED_CAST" />
827 <Rank value="20" />
828 </Match>
829
830 <!-- This is an artefact from when we needed to be able to add pojo triggers
831 for headless operation. NOTE: This will disappear after the rewrite. -->
832 <Match>
833 <Class name="org.openjdk.jmc.console.ui.notification.wizard.RuleWizard" />
834 <Bug pattern="BC_UNCONFIRMED_CAST_OF_RETURN_VALUE" />
835 <Rank value="20" />
836 </Match>
837
838 <!-- We always use styled text in this framework. -->
839 <Match>
840 <Class
841 name="org.openjdk.jmc.rcp.application.scripting.ControlContentAdapter" />
842 <Bug pattern="BC_UNCONFIRMED_CAST" />
843 <Rank value="20" />
844 </Match>
845
846 <!-- Yes Java2D will always be available on modern JVMs. If we do not have
847 access to AWT, we have much bigger problems... -->
848 <Match>
849 <Class
850 name="org.openjdk.jmc.flightrecorder.ui.components.graph.EventGraphTree" />
851 <Bug pattern="BC_UNCONFIRMED_CAST" />
852 <Rank value="20" />
853 </Match>
854 <Match>
855 <Class name="org.openjdk.jmc.greychart.GreyChartPanel" />
856 <Bug pattern="BC_UNCONFIRMED_CAST" />
857 <Rank value="20" />
858 </Match>
859 <Match>
860 <Class name="org.openjdk.jmc.greychart.JChartComponent" />
861 <Bug pattern="BC_UNCONFIRMED_CAST" />
862 <Rank value="20" />
863 </Match>
864
865 <!-- isIntegrating implies type -->
866 <Match>
867 <Class name="~.*Buffer" />
868 <Bug pattern="BC_UNCONFIRMED_CAST" />
869 <Rank value="20" />
870 </Match>
871
872 <!-- Safe in the framework -->
873 <Match>
874 <Class
875 name="~org\.openjdk\.jmc\.flightrecorder\.ui\.components\.aggregators\..*" />
876 <Bug pattern="BC_UNCONFIRMED_CAST" />
877 <Rank value="20" />
878 </Match>
879
880 <!-- Only added to MBeanTreeSection parts. -->
881 <Match>
882 <Class name="org.openjdk.jmc.console.ui.mbeanbrowser.tree.MBeanTreeFilter" />
883 <Bug pattern="BC_UNCONFIRMED_CAST" />
884 <Rank value="20" />
885 </Match>
886 <Match>
887 <Class
888 name="org.openjdk.jmc.console.ui.mbeanbrowser.tab.MBeanOperationsSectionPart" />
889 <Bug pattern="BC_UNCONFIRMED_CAST" />
890 <Rank value="20" />
891 </Match>
892
893 <!-- Lost patience, excluding this bug pattern since there are so many false
894 positives. I keep the other related excludes, since we may want to complete
895 that work at a later point. -->
896 <Match>
897 <Bug pattern="BC_UNCONFIRMED_CAST" />
898 <Rank value="20" />
899 </Match>
900 <Match>
901 <Bug pattern="BC_UNCONFIRMED_CAST_OF_RETURN_VALUE" />
902 <Rank value="20" />
903 </Match>
904
905 <!-- Instance tracking -->
906 <Match>
907 <Class name="org.openjdk.jmc.browser.views.JVMBrowserViewDragSource" />
908 <Bug pattern="ST_WRITE_TO_STATIC_FROM_INSTANCE_METHOD" />
909 <Rank value="20" />
910 </Match>
911
912 <!-- Will only provide values from a set of predefined values. -->
913 <Match>
914 <Class
915 name="org.openjdk.jmc.components.ui.design.view.layout.LayoutDataSliderListener" />
916 <Bug pattern="FE_FLOATING_POINT_EQUALITY" />
917 <Rank value="20" />
918 </Match>
919
920 <!-- Explicit nulls in the fields framework -->
921 <Match>
922 <Class name="~org\.openjdk\.jmc\.ui\.fields\..*" />
923 <Bug pattern="PZLA_PREFER_ZERO_LENGTH_ARRAYS" />
924 <Rank value="20" />
925 </Match>
926
927 <!-- In UI classes, this is really only causing the minor memory overhead
928 of a this pointer. We can go after these later, but it will probably only
929 clutter up the code. -->
930 <Match>
931 <Bug pattern="SIC_INNER_SHOULD_BE_STATIC_ANON" />
932 <Rank value="20" />
933 </Match>
934
935 <!-- These are a lot of comparisons in JMC of double values where the values
936 are not calculated values but previously read values. This is so common that
937 I turn off this warning for now. -->
938 <Match>
939 <Bug pattern="FE_FLOATING_POINT_EQUALITY" />
940 <Rank value="20" />
941 </Match>
942
943 <!-- Excluding native memory since not yet shipped -->
944 <Match>
945 <Class name="~org\.openjdk\.jmc\.console\.ui\.nativememory\..*" />
946 <Rank value="20" />
947 </Match>
948
949 <!-- Modifications to this array are considered to be thread local.
950 Only reference read/write are thread safe -->
951 <Match>
952 <Class name="org.openjdk.jmc.browser.views.JVMBrowserView" />
953 <Field name="expanded" />
954 <Bug pattern="VO_VOLATILE_REFERENCE_TO_ARRAY" />
955 </Match>
956
957 <!-- Null return value documented -->
958 <Match>
959 <Class name="org.openjdk.jmc.flightrecorder.internal.parser.binary.LoaderContext" />
960 <Method name="takeBuffer" />
961 <Bug pattern="PZLA_PREFER_ZERO_LENGTH_ARRAYS" />
962 </Match>
963
964 <!-- Calling method to force initialization -->
965 <Match>
966 <Class name="org.openjdk.jmc.rcp.application.Application" />
967 <Method name="start" />
968 <Bug pattern="RV_RETURN_VALUE_IGNORED_NO_SIDE_EFFECT" />
969 </Match>
970 <Match>
971 <Class name="org.openjdk.jmc.ui.MCAbstractUIPlugin" />
972 <Method name="attemptToInitAWT" />
973 <Bug pattern="RV_RETURN_VALUE_IGNORED_NO_SIDE_EFFECT" />
974 </Match>
975 <!-- Calling Class.forName to force class initialization -->
976 <Match>
977 <Class name="org.openjdk.jmc.attach.AttachToolkit" />
978 <Bug pattern="RV_RETURN_VALUE_IGNORED_NO_SIDE_EFFECT" />
979 </Match>
980
981 <!-- Caching in volatile variable -->
982 <Match>
983 <Class name="org.openjdk.jmc.common.util.FilterMatcher" />
984 <Method name="regexpMatch" />
985 <Bug pattern="ST_WRITE_TO_STATIC_FROM_INSTANCE_METHOD" />
986 </Match>
987
988 <!-- False positive, referenced by a lambda style method reference -->
989 <Match>
990 <Class name="~org\.openjdk\.jmc\.flightrecorder\.ui\.pages\.itemhandler\.AttributeMenuFactory.*" />
991 <Method name="attributeAggregatorMenu" />
992 <Bug pattern="UMAC_UNCALLABLE_METHOD_OF_ANONYMOUS_CLASS" />
993 </Match>
994
995 <!-- Fall through is intentional -->
996 <Match>
997 <Class name="org.openjdk.jmc.flightrecorder.stacktrace.StacktraceFormatToolkit" />
998 <Method name="formatFrame" />
999 <Bug pattern="SF_SWITCH_FALLTHROUGH" />
1000 </Match>
1001 <Match>
1002 <Class name="org.openjdk.jmc.flightrecorder.ui.JfrOutlinePage$OutlineDropListener" />
1003 <Method name="performDrop" />
1004 <Bug pattern="SF_SWITCH_FALLTHROUGH" />
1005 </Match>
1006
1007 <!-- We want to use single word "username" and "timestamp" but don't want to
1008 change the imported JConsole code that contains other camelCase variants. -->
1009 <Match>
1010 <Method name="getUsername" />
1011 <Bug pattern="NM_CONFUSING" />
1012 </Match>
1013 <Match>
1014 <Method name="getLastTimestamp" />
1015 <Bug pattern="NM_CONFUSING" />
1016 </Match>
1017
1018 <!-- We will not serialize Swing components -->
1019 <Match>
1020 <Class name="org.openjdk.jmc.console.jconsole.tabs.JConsolePluginTabbedPane" />
1021 <Bug pattern="SE_BAD_FIELD" />
1022 </Match>
1023
1024 <!-- False positive -->
1025 <Match>
1026 <Class name="org.openjdk.jmc.flightrecorder.internal.FlightRecordingLoader" />
1027 <Method name="sendProgress" />
1028 <Bug pattern="UC_USELESS_VOID_METHOD" />
1029 </Match>
1030
1031 <!-- Fields are written using reflection and must match file format. -->
1032 <Match>
1033 <Class name="~org\.openjdk\.jmc\.flightrecorder\.internal\.parser\.v1\.StructTypes\$.*" />
1034 <Bug pattern="UWF_UNWRITTEN_PUBLIC_OR_PROTECTED_FIELD" />
1035 </Match>
1036 <Match>
1037 <Class name="~org\.openjdk\.jmc\.flightrecorder\.internal\.parser\.v1\.StructTypes\$.*" />
1038 <Bug pattern="UUF_UNUSED_PUBLIC_OR_PROTECTED_FIELD" />
1039 </Match>
1040
1041 <!-- If we can find a better way of estimating free heap space then we should
1042 use that instead. -->
1043 <Match>
1044 <Class name="org.openjdk.jmc.flightrecorder.ui.RecordingLoader" />
1045 <Method name="doCreateRecording" />
1046 <Bug pattern="DM_GC" />
1047 </Match>
1048
1049 <!-- These could theoretically be reworked into static inner classes but
1050 it is too much work and the performance impact is minimal. -->
1051 <Match>
1052 <Class name="org.openjdk.jmc.flightrecorder.ext.wls.WlsOverviewPage$WlsOverviewPageUi" />
1053 <Bug pattern="SIC_INNER_SHOULD_BE_STATIC_NEEDS_THIS" />
1054 </Match>
1055 <Match>
1056 <Class name="org.openjdk.jmc.flightrecorder.ui.pages.DistinctItemsPage$DistinctItemsUi" />
1057 <Bug pattern="SIC_INNER_SHOULD_BE_STATIC_NEEDS_THIS" />
1058 </Match>
1059 <Match>
1060 <Class name="org.openjdk.jmc.flightrecorder.ui.pages.TlabPage$TlabUI" />
1061 <Bug pattern="SIC_INNER_SHOULD_BE_STATIC_NEEDS_THIS" />
1062 </Match>
1063 <Match>
1064 <Class name="org.openjdk.jmc.flightrecorder.stacktrace.StacktraceModel$Fork" />
1065 <Bug pattern="SIC_INNER_SHOULD_BE_STATIC_NEEDS_THIS" />
1066 </Match>
1067
1068 <!-- False positive. CompletableFuture is completely happy with null and
1069 the value is ignored by consumers. Actually since this is a CompletableFuture<Void>,
1070 null is the only permitted value. -->
1071 <Match>
1072 <Class name="org.openjdk.jmc.flightrecorder.ui.JfrPropertySheet" />
1073 <Method name="show" />
1074 <Bug pattern="NP_NONNULL_PARAM_VIOLATION" />
1075 </Match>
1076
1077 <!-- Skipping our embedded ASM -->
1078 <Match>
1079 <Class name="~org\.openjdk\.jmc\.internal\.org\.objectweb\.asm\..*"/>
1080 </Match>
1081
1082 <!-- Field initialized indirectly through super constructor. It works but
1083 should still be changed to a safer initialization flow. -->
1084 <Match>
1085 <Class name="org.openjdk.jmc.flightrecorder.ui.pages.JavaApplicationPage$JavaApplicationUi"/>
1086 <Field name="lanes"/>
1087 <Bug pattern="UR_UNINIT_READ"/>
1088 </Match>
1089 <Match>
1090 <Class name="org.openjdk.jmc.flightrecorder.ui.pages.ThreadsPage$ThreadsPageUi"/>
1091 <Field name="lanes"/>
1092 <Bug pattern="UR_UNINIT_READ"/>
1093 </Match>
1094
1095 <!-- Exclude the testserver package. It should really be fixed but is only used
1096 while testing so it is low priority. -->
1097 <Match>
1098 <Class name="~org\.openjdk\.jmc\.testserver\..*"/>
1099 </Match>
1100
1101 <!-- Exclude various test classes. These are of low priority to fix. -->
1102 <Match>
1103 <Class name="org.openjdk.jmc.flightrecorder.ui.RecordingFileWriter"/>
1104 </Match>
1105 <Match>
1106 <Class name="org.openjdk.jmc.greychart.testutil.RenderingOutOfOrderTester"/>
1107 </Match>
1108 <Match>
1109 <Class name="org.openjdk.jmc.rjmx.testutil.RockitRunner"/>
1110 </Match>
1111 <Match>
1112 <Class name="org.openjdk.jmc.rjmx.testutil.RockitRunner$WorkerThread"/>
1113 </Match>
1114 <Match>
1115 <Class name="org.openjdk.jmc.rjmx.internal.RJMXConnectionTest"/>
1116 </Match>
1117 <Match>
1118 <Class name="org.openjdk.jmc.rjmx.synthetic.CountingAttribute"/>
1119 </Match>
1120 <Match>
1121 <Class name="org.openjdk.jmc.rjmx.RjmxTestCase"/>
1122 </Match>
1123 <Match>
1124 <Class name="org.openjdk.jmc.rjmx.testutil.JVMKeepAlive"/>
1125 </Match>
1126 <Match>
1127 <Class name="org.openjdk.jmc.rjmx.subscription.internal.EvilMethodsClass"/>
1128 </Match>
1129
1130 </FindBugsFilter>