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>