{"$schema":"https://json.schemastore.org/sarif-2.1.0.json","version":"2.1.0","runs":[{"tool":{"driver":{"name":"codehealth","informationUri":"https://codehealth.canine.dev","rules":[{"id":"D1","name":"Cyclomatic Complexity","shortDescription":{"text":"Cyclomatic Complexity"},"helpUri":"https://codehealth.canine.dev/dimensions/D1"},{"id":"D2","name":"Cognitive Complexity","shortDescription":{"text":"Cognitive Complexity"},"helpUri":"https://codehealth.canine.dev/dimensions/D2"},{"id":"D3","name":"God Classes","shortDescription":{"text":"God Classes"},"helpUri":"https://codehealth.canine.dev/dimensions/D3"},{"id":"D4","name":"Code Duplication","shortDescription":{"text":"Code Duplication"},"helpUri":"https://codehealth.canine.dev/dimensions/D4"},{"id":"D13","name":"Secret Scanning","shortDescription":{"text":"Secret Scanning"},"helpUri":"https://codehealth.canine.dev/dimensions/D13","relationships":[{"target":{"id":"CWE-798","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-259","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]}],"properties":{"cwe":["CWE-798","CWE-259"]}},{"id":"D15","name":"Churn \u00D7 Complexity Hotspots","shortDescription":{"text":"Churn \u00D7 Complexity Hotspots"},"helpUri":"https://codehealth.canine.dev/dimensions/D15"},{"id":"D16","name":"Bus Factor","shortDescription":{"text":"Bus Factor"},"helpUri":"https://codehealth.canine.dev/dimensions/D16"},{"id":"D21","name":"Naming Consistency","shortDescription":{"text":"Naming Consistency"},"helpUri":"https://codehealth.canine.dev/dimensions/D21"},{"id":"D28","name":"Secrets (history)","shortDescription":{"text":"Secrets (history)"},"helpUri":"https://codehealth.canine.dev/dimensions/D28","relationships":[{"target":{"id":"CWE-798","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-259","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]}],"properties":{"cwe":["CWE-798","CWE-259"]}},{"id":"D29","name":"Static Analysis (SAST)","shortDescription":{"text":"Static Analysis (SAST)"},"helpUri":"https://codehealth.canine.dev/dimensions/D29","relationships":[{"target":{"id":"CWE-79","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-89","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-78","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-94","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-77","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]}],"properties":{"cwe":["CWE-79","CWE-89","CWE-78","CWE-94","CWE-77"]}},{"id":"D31","name":"IaC \u0026 Container Security","shortDescription":{"text":"IaC \u0026 Container Security"},"helpUri":"https://codehealth.canine.dev/dimensions/D31","relationships":[{"target":{"id":"CWE-1032","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-732","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-16","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]}],"properties":{"cwe":["CWE-1032","CWE-732","CWE-16"]}},{"id":"D32","name":"Data Compliance (PII/GDPR)","shortDescription":{"text":"Data Compliance (PII/GDPR)"},"helpUri":"https://codehealth.canine.dev/dimensions/D32","relationships":[{"target":{"id":"CWE-359","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-312","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-200","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]}],"properties":{"cwe":["CWE-359","CWE-312","CWE-200"]}},{"id":"D34","name":"Knowledge Freshness","shortDescription":{"text":"Knowledge Freshness"},"helpUri":"https://codehealth.canine.dev/dimensions/D34"},{"id":"D35","name":"Change Coupling","shortDescription":{"text":"Change Coupling"},"helpUri":"https://codehealth.canine.dev/dimensions/D35"},{"id":"D37","name":"Vulnerability-disclosure Policy","shortDescription":{"text":"Vulnerability-disclosure Policy"},"helpUri":"https://codehealth.canine.dev/dimensions/D37","relationships":[{"target":{"id":"CWE-1059","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]}],"properties":{"cwe":["CWE-1059"]}}]}},"results":[{"ruleId":"D1","level":"warning","message":{"text":"MIPS_ElfRelocationHandler.relocate (cyclomatic 146): MIPS_ElfRelocationHandler.relocate has cyclomatic complexity 146 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Processors/MIPS/src/main/java/ghidra/app/util/bin/format/elf/relocation/MIPS_ElfRelocationHandler.java"},"region":{"startLine":60}}}],"partialFingerprints":{"codehealthFindingId/v1":"8c92bbcf08910b36a937be6dc3c3342dc21757da020d7dd00de648d7cd9fed50"}},{"ruleId":"D1","level":"warning","message":{"text":"ConsistencyChecker.sizeRestriction (cyclomatic 107): ConsistencyChecker.sizeRestriction has cyclomatic complexity 107 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slgh_compile/ConsistencyChecker.java"},"region":{"startLine":70}}}],"partialFingerprints":{"codehealthFindingId/v1":"450c7aca293d38a65dd48628c7b4838d89f3261dfbe5202def079a3a5459a07f"}},{"ruleId":"D1","level":"warning","message":{"text":"MDSpecialName.parseInternal (cyclomatic 92): MDSpecialName.parseInternal has cyclomatic complexity 92 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/MicrosoftDmang/src/main/java/mdemangler/naming/MDSpecialName.java"},"region":{"startLine":156}}}],"partialFingerprints":{"codehealthFindingId/v1":"74cc56718ee8c0ee22aec74c1aec57b04aa97f1eb6a817b5fb93e3bb27fc98f1"}},{"ruleId":"D1","level":"warning","message":{"text":"GhidraServer.main (cyclomatic 78): GhidraServer.main has cyclomatic complexity 78 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/GhidraServer/src/main/java/ghidra/server/remote/GhidraServer.java"},"region":{"startLine":521}}}],"partialFingerprints":{"codehealthFindingId/v1":"378d9c5e90fa13d0ce1b3c1ef3e85e46ae4898c3362eed39ab7a722b9eb76da7"}},{"ruleId":"D1","level":"warning","message":{"text":"RegisterName.getRegisterName (cyclomatic 72): RegisterName.getRegisterName has cyclomatic complexity 72 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/PDB/src/main/java/ghidra/app/util/bin/format/pdb2/pdbreader/RegisterName.java"},"region":{"startLine":877}}}],"partialFingerprints":{"codehealthFindingId/v1":"a58934b65855800be69647876b3178802779c260339309a68496f2e06b603bca"}},{"ruleId":"D1","level":"warning","message":{"text":"AARCH64_ElfRelocationHandler.relocate (cyclomatic 68): AARCH64_ElfRelocationHandler.relocate has cyclomatic complexity 68 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Processors/AARCH64/src/main/java/ghidra/app/util/bin/format/elf/relocation/AARCH64_ElfRelocationHandler.java"},"region":{"startLine":57}}}],"partialFingerprints":{"codehealthFindingId/v1":"f51cf5ba4ecb8d47321a2a54de508b0c2ec817457038925b1f67b964d1194432"}},{"ruleId":"D1","level":"warning","message":{"text":"MicrosoftDemanglerUtil.processDataType (cyclomatic 68): MicrosoftDemanglerUtil.processDataType has cyclomatic complexity 68 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/MicrosoftDemangler/src/main/java/ghidra/app/util/demangler/microsoft/MicrosoftDemanglerUtil.java"},"region":{"startLine":627}}}],"partialFingerprints":{"codehealthFindingId/v1":"be454e2ecd3576c7585ded7a298583fdc1c288141409bbeba437f676bb81d798"}},{"ruleId":"D1","level":"warning","message":{"text":"ARM_ElfRelocationHandler.relocate (cyclomatic 63): ARM_ElfRelocationHandler.relocate has cyclomatic complexity 63 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Processors/ARM/src/main/java/ghidra/app/util/bin/format/elf/relocation/ARM_ElfRelocationHandler.java"},"region":{"startLine":55}}}],"partialFingerprints":{"codehealthFindingId/v1":"d00c40de2d90ce524b4dbb49e3b5212e51f3b7ba4f46cfb3250b1431ba885863"}},{"ruleId":"D1","level":"warning","message":{"text":"PcodeCompile.fillinZero (cyclomatic 63): PcodeCompile.fillinZero has cyclomatic complexity 63 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slgh_compile/PcodeCompile.java"},"region":{"startLine":743}}}],"partialFingerprints":{"codehealthFindingId/v1":"e15af3c9741250be7d4844e18dfe5e1034562d9c0c151c5c0d7ec4325e15df3b"}},{"ruleId":"D1","level":"warning","message":{"text":"PseudoDisassembler.checkValidSubroutine (cyclomatic 60): PseudoDisassembler.checkValidSubroutine has cyclomatic complexity 60 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/util/PseudoDisassembler.java"},"region":{"startLine":609}}}],"partialFingerprints":{"codehealthFindingId/v1":"01580eed3267bb8ccf5486c728182360f8f832cccfdf3523d06fbe4c57da52e3"}},{"ruleId":"D1","level":"warning","message":{"text":"AVR8_ElfRelocationHandler.relocate (cyclomatic 59): AVR8_ElfRelocationHandler.relocate has cyclomatic complexity 59 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Processors/Atmel/src/main/java/ghidra/app/util/bin/format/elf/relocation/AVR8_ElfRelocationHandler.java"},"region":{"startLine":42}}}],"partialFingerprints":{"codehealthFindingId/v1":"30b67023929a99cfe40495afbba66f3b2c1ee795b2aa71e0e7cbf0b4ff44e7a2"}},{"ruleId":"D1","level":"warning","message":{"text":"DecompileOptions.encode (cyclomatic 59): DecompileOptions.encode has cyclomatic complexity 59 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/Decompiler/src/main/java/ghidra/app/decompiler/DecompileOptions.java"},"region":{"startLine":863}}}],"partialFingerprints":{"codehealthFindingId/v1":"32b6281cf7edebb3061af44c6f41f39f5a56cbe6c51c46533a59cec4f3114bd2"}},{"ruleId":"D1","level":"warning","message":{"text":"SleighLanguage.read (cyclomatic 54): SleighLanguage.read has cyclomatic complexity 54 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/processors/sleigh/SleighLanguage.java"},"region":{"startLine":554}}}],"partialFingerprints":{"codehealthFindingId/v1":"964bc7ff43dbfa1aad0581c58b7518b0840278ebf95cb9e6697c5cfd19da389a"}},{"ruleId":"D1","level":"warning","message":{"text":"MDTypeInfoParser.parse (cyclomatic 53): MDTypeInfoParser.parse has cyclomatic complexity 53 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/MicrosoftDmang/src/main/java/mdemangler/typeinfo/MDTypeInfoParser.java"},"region":{"startLine":45}}}],"partialFingerprints":{"codehealthFindingId/v1":"38ea5a5cd18cb1a2295bbee6a64194879d090406d8e571d76ad60530697ac662"}},{"ruleId":"D1","level":"warning","message":{"text":"X86_64_ElfRelocationHandler.relocate (cyclomatic 49): X86_64_ElfRelocationHandler.relocate has cyclomatic complexity 49 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Processors/x86/src/main/java/ghidra/app/util/bin/format/elf/relocation/X86_64_ElfRelocationHandler.java"},"region":{"startLine":53}}}],"partialFingerprints":{"codehealthFindingId/v1":"476a3556ff5338192a202991d258111e6c666799e8b0feea2eb3fe3cbd2e7d45"}},{"ruleId":"D1","level":"warning","message":{"text":"DepthFirstSearch.\u003Cinit\u003E (cyclomatic 49): DepthFirstSearch.\u003Cinit\u003E has cyclomatic complexity 49 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Generic/src/main/java/ghidra/util/graph/DepthFirstSearch.java"},"region":{"startLine":50}}}],"partialFingerprints":{"codehealthFindingId/v1":"fbfaa7a9a6a0bc689f02879763212579279080c88a62c7ca6d377f3d33564bf4"}},{"ruleId":"D1","level":"warning","message":{"text":"JSONParser.parse (cyclomatic 48): JSONParser.parse has cyclomatic complexity 48 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Generic/src/main/java/generic/json/JSONParser.java"},"region":{"startLine":193}}}],"partialFingerprints":{"codehealthFindingId/v1":"ff4100f8efa06145069f8bdc1d89449000eab7f8394f9b95db92b6397e55497a"}},{"ruleId":"D1","level":"warning","message":{"text":"PowerPC_ElfRelocationHandler.relocate (cyclomatic 47): PowerPC_ElfRelocationHandler.relocate has cyclomatic complexity 47 (threshold 15). To reduce it, separate the branches: extract each independent case into its own named function so the top-level body reads as a short sequence of named decisions."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Processors/PowerPC/src/main/java/ghidra/app/util/bin/format/elf/relocation/PowerPC_ElfRelocationHandler.java"},"region":{"startLine":62}}}],"partialFingerprints":{"codehealthFindingId/v1":"b6cc2d761f8697c718291d93ef309ed2bf7663d76dd278ac24ff88f8d711ebfc"}},{"ruleId":"D1","level":"warning","message":{"text":"GProperties.processElement (cyclomatic 47): GProperties.processElement has cyclomatic complexity 47 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Generic/src/main/java/ghidra/framework/options/GProperties.java"},"region":{"startLine":146}}}],"partialFingerprints":{"codehealthFindingId/v1":"b66991c93e8ed0e7351316bbac3bcd7d65b959fa9d0461ad42f1308c2489c5b6"}},{"ruleId":"D1","level":"warning","message":{"text":"RISCV_ElfRelocationHandler.relocate (cyclomatic 46): RISCV_ElfRelocationHandler.relocate has cyclomatic complexity 46 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Processors/RISCV/src/main/java/ghidra/app/util/bin/format/elf/relocation/RISCV_ElfRelocationHandler.java"},"region":{"startLine":138}}}],"partialFingerprints":{"codehealthFindingId/v1":"34c7924f16038b522d8b283d61a8a267e4078d696ca592aaed0aee217001291c"}},{"ruleId":"D1","level":"warning","message":{"text":"SimpleDiffUtility.getMatchingExternalSymbol (cyclomatic 45): SimpleDiffUtility.getMatchingExternalSymbol has cyclomatic complexity 45 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/util/SimpleDiffUtility.java"},"region":{"startLine":628}}}],"partialFingerprints":{"codehealthFindingId/v1":"e1f5b928cccbfa0ff150cdcfdd2630da971019fe61b32a3406b446746cfb13f9"}},{"ruleId":"D1","level":"warning","message":{"text":"Minidump.buildStructures (cyclomatic 45): Minidump.buildStructures has cyclomatic complexity 45 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/dump/mdmp/Minidump.java"},"region":{"startLine":145}}}],"partialFingerprints":{"codehealthFindingId/v1":"2c0cbc9660bad9aa9703cd7b21e3e9fe58e983bb562cb18bec623a00bc626c64"}},{"ruleId":"D1","level":"warning","message":{"text":"PcodeStability.assign (cyclomatic 45): PcodeStability.assign has cyclomatic complexity 45 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Extensions/Lisa/src/main/java/ghidra/lisa/pcode/analyses/PcodeStability.java"},"region":{"startLine":467}}}],"partialFingerprints":{"codehealthFindingId/v1":"3d879eb0d34156a1b53b8bf074bf2d0354a26470a7cfa8915ddcf525a75c9627"}},{"ruleId":"D1","level":"warning","message":{"text":"NSObjectParser.parseObject (cyclomatic 43): NSObjectParser.parseObject has cyclomatic complexity 43 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/bplist/NSObjectParser.java"},"region":{"startLine":24}}}],"partialFingerprints":{"codehealthFindingId/v1":"a95b5e2bfb648e47145496c4a8415e8598a10f9a67baff2e4bf20dea078348c9"}},{"ruleId":"D1","level":"warning","message":{"text":"PowerPC64_ElfRelocationHandler.relocate (cyclomatic 42): PowerPC64_ElfRelocationHandler.relocate has cyclomatic complexity 42 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Processors/PowerPC/src/main/java/ghidra/app/util/bin/format/elf/relocation/PowerPC64_ElfRelocationHandler.java"},"region":{"startLine":57}}}],"partialFingerprints":{"codehealthFindingId/v1":"cf847b72cb500ae429553d42b8d30ab8321aa9a23915ab9aef37f98e17546ca6"}},{"ruleId":"D1","level":"warning","message":{"text":"PcodeCompile.findInternalFunction (cyclomatic 41): PcodeCompile.findInternalFunction has cyclomatic complexity 41 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slgh_compile/PcodeCompile.java"},"region":{"startLine":928}}}],"partialFingerprints":{"codehealthFindingId/v1":"768e481764c864bdcf14d74d4aefa1291d926e98f62793f02c7522a3607788d8"}},{"ruleId":"D1","level":"warning","message":{"text":"Disassembler.disassembleInstructionBlock (cyclomatic 41): Disassembler.disassembleInstructionBlock has cyclomatic complexity 41 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/disassemble/Disassembler.java"},"region":{"startLine":907}}}],"partialFingerprints":{"codehealthFindingId/v1":"b14f597d9098f86bfa0d4da05621ea41518e50ce33457f6572878678e64206cc"}},{"ruleId":"D1","level":"warning","message":{"text":"Objc1TypeEncodings.createProperDataType (cyclomatic 41): Objc1TypeEncodings.createProperDataType has cyclomatic complexity 41 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/Objective-C/src/main/java/ghidra/app/util/bin/format/objc/objc1/Objc1TypeEncodings.java"},"region":{"startLine":234}}}],"partialFingerprints":{"codehealthFindingId/v1":"0236e383e1a85c72d37f5e8e752cf5a08fe2b3a3be937d740ae09b1ecf4a5b8b"}},{"ruleId":"D1","level":"warning","message":{"text":"MipsAddressAnalyzer.fixJumpTable (cyclomatic 40): MipsAddressAnalyzer.fixJumpTable has cyclomatic complexity 40 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Processors/MIPS/src/main/java/ghidra/app/plugin/core/analysis/MipsAddressAnalyzer.java"},"region":{"startLine":600}}}],"partialFingerprints":{"codehealthFindingId/v1":"1069987dd53dad86676bb7ecbde3e636dc6102ab6ef208153d7cf98291662fac"}},{"ruleId":"D1","level":"warning","message":{"text":"CodeManager.addInstructions (cyclomatic 39): CodeManager.addInstructions has cyclomatic complexity 39 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/code/CodeManager.java"},"region":{"startLine":408}}}],"partialFingerprints":{"codehealthFindingId/v1":"db9e14ace77d9714abfaef383ea92a29bb34d92fb262e4af0b506e6b66d34b97"}},{"ruleId":"D1","level":"warning","message":{"text":"ServerAdmin.execute (cyclomatic 39): ServerAdmin.execute has cyclomatic complexity 39 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/GhidraServer/src/main/java/ghidra/server/ServerAdmin.java"},"region":{"startLine":82}}}],"partialFingerprints":{"codehealthFindingId/v1":"45ac1da4e04723e451b318c0aa5d086b04e2bdb266d8d7521600762cc80706c5"}},{"ruleId":"D1","level":"warning","message":{"text":"Pic17c7xxAnalyzer.handleStatusModification (cyclomatic 38): Pic17c7xxAnalyzer.handleStatusModification has cyclomatic complexity 38 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Processors/PIC/src/main/java/ghidra/app/plugin/core/analysis/Pic17c7xxAnalyzer.java"},"region":{"startLine":806}}}],"partialFingerprints":{"codehealthFindingId/v1":"95f68b5e615bb4377c044a354d7ebe8b0badd1db1b6be9277e8ee99b391917a0"}},{"ruleId":"D1","level":"warning","message":{"text":"BasicCompilerSpec.isEquivalent (cyclomatic 38): BasicCompilerSpec.isEquivalent has cyclomatic complexity 38 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/lang/BasicCompilerSpec.java"},"region":{"startLine":1191}}}],"partialFingerprints":{"codehealthFindingId/v1":"02dbd4e732acc31565fa4cf0b8d1479e85c6b59f5bdaec5e068785e7e240ad15"}},{"ruleId":"D1","level":"warning","message":{"text":"GnuDemanglerParser.parseDataType (cyclomatic 37): GnuDemanglerParser.parseDataType has cyclomatic complexity 37 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/GnuDemangler/src/main/java/ghidra/app/util/demangler/gnu/GnuDemanglerParser.java"},"region":{"startLine":875}}}],"partialFingerprints":{"codehealthFindingId/v1":"0f42198de28d2c62e1b2812579f879373db3d113ba1485efea243fce15fb8800"}},{"ruleId":"D1","level":"warning","message":{"text":"DecompileProcess.readResponse (cyclomatic 37): DecompileProcess.readResponse has cyclomatic complexity 37 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/Decompiler/src/main/java/ghidra/app/decompiler/DecompileProcess.java"},"region":{"startLine":318}}}],"partialFingerprints":{"codehealthFindingId/v1":"911e0bd8c45794c6948597d2a82e607dbaf90005b6f2d7d732e605689f1d34f2"}},{"ruleId":"D1","level":"warning","message":{"text":"HighlightAndGraphAction.addDataFlowFeatureGraph (cyclomatic 37): HighlightAndGraphAction.addDataFlowFeatureGraph has cyclomatic complexity 37 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/BSimFeatureVisualizer/src/main/java/ghidra/bsfv/HighlightAndGraphAction.java"},"region":{"startLine":319}}}],"partialFingerprints":{"codehealthFindingId/v1":"0440e1f46adbba0c6e9a0ecf35a3f5f62632376ce6bf99611ab162ae75ecd82b"}},{"ruleId":"D1","level":"warning","message":{"text":"GProperties.getObjectFromJson (cyclomatic 36): GProperties.getObjectFromJson has cyclomatic complexity 36 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Generic/src/main/java/ghidra/framework/options/GProperties.java"},"region":{"startLine":317}}}],"partialFingerprints":{"codehealthFindingId/v1":"f3ae8326b56fff8df81432687c66e2d256faba2a2ade20fd1936eb029b2b7f73"}},{"ruleId":"D1","level":"warning","message":{"text":"GProperties.saveToJson (cyclomatic 36): GProperties.saveToJson has cyclomatic complexity 36 (threshold 15). To reduce it, break up the iteration: give each loop body a named function, and split a multi-phase loop into one function per phase so no single body carries the whole pipeline."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Generic/src/main/java/ghidra/framework/options/GProperties.java"},"region":{"startLine":670}}}],"partialFingerprints":{"codehealthFindingId/v1":"8491faeeda411528ad7a991c41edf1277330c2d53bddc55d6d64f21b3203d03a"}},{"ruleId":"D1","level":"warning","message":{"text":"PcodeSign.evalBinaryExpression (cyclomatic 36): PcodeSign.evalBinaryExpression has cyclomatic complexity 36 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Extensions/Lisa/src/main/java/ghidra/lisa/pcode/analyses/PcodeSign.java"},"region":{"startLine":172}}}],"partialFingerprints":{"codehealthFindingId/v1":"1bf214f74df9de5bf7816815046b5e378331ae61dd0bd3e18a858283bcbb53ef"}},{"ruleId":"D1","level":"warning","message":{"text":"Loongarch_ElfRelocationHandler.relocate (cyclomatic 35): Loongarch_ElfRelocationHandler.relocate has cyclomatic complexity 35 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Processors/Loongarch/src/main/java/ghidra/app/util/bin/format/elf/relocation/Loongarch_ElfRelocationHandler.java"},"region":{"startLine":47}}}],"partialFingerprints":{"codehealthFindingId/v1":"c046409dc1e0d93602632df25cde16b25cf52d845fbe78ac6ec44a5bd8c919ac"}},{"ruleId":"D1","level":"warning","message":{"text":"PointerDataType.getAddressValue (cyclomatic 35): PointerDataType.getAddressValue has cyclomatic complexity 35 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/PointerDataType.java"},"region":{"startLine":411}}}],"partialFingerprints":{"codehealthFindingId/v1":"137e2aca6c3abe85b2619abea151b86dca5c2d08788bc5a8bb01923ed9fba5ef"}},{"ruleId":"D1","level":"warning","message":{"text":"TokenPattern.resolveTokens (cyclomatic 34): TokenPattern.resolveTokens has cyclomatic complexity 34 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghpatexpress/TokenPattern.java"},"region":{"startLine":82}}}],"partialFingerprints":{"codehealthFindingId/v1":"41eec253ca04f63c923ad1a9904f31513dcd5352e72a9ad4ae12c9e6e897c986"}},{"ruleId":"D1","level":"warning","message":{"text":"CodeManager.getUndefinedRanges (cyclomatic 34): CodeManager.getUndefinedRanges has cyclomatic complexity 34 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/code/CodeManager.java"},"region":{"startLine":1504}}}],"partialFingerprints":{"codehealthFindingId/v1":"13fbd8fdf04550be5107c4d830c5976f2a42649af539db0c06b74a25fe0632a1"}},{"ruleId":"D1","level":"warning","message":{"text":"AddressSet.xorSets (cyclomatic 34): AddressSet.xorSets has cyclomatic complexity 34 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/address/AddressSet.java"},"region":{"startLine":1008}}}],"partialFingerprints":{"codehealthFindingId/v1":"bd2016fa03dea2b722edeaf57d0cc0dda61cb943c56c9715e4f296827067c78b"}},{"ruleId":"D1","level":"warning","message":{"text":"EquateSymbol.convertName (cyclomatic 34): EquateSymbol.convertName has cyclomatic complexity 34 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/pcode/EquateSymbol.java"},"region":{"startLine":195}}}],"partialFingerprints":{"codehealthFindingId/v1":"2f4482e27a46d7ca02f64b5fab25ecc29ce5df066b1a4ff2e7138deda9874576"}},{"ruleId":"D1","level":"warning","message":{"text":"HighFunctionDBUtil.updateDBVariable (cyclomatic 34): HighFunctionDBUtil.updateDBVariable has cyclomatic complexity 34 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/pcode/HighFunctionDBUtil.java"},"region":{"startLine":569}}}],"partialFingerprints":{"codehealthFindingId/v1":"8be00c05f5113de57699e6c7a5a521136ad29deac2895985d24c3ef00beea0c5"}},{"ruleId":"D1","level":"warning","message":{"text":"MDTypeInfoParser.parseSpecialHandlingFunction (cyclomatic 34): MDTypeInfoParser.parseSpecialHandlingFunction has cyclomatic complexity 34 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/MicrosoftDmang/src/main/java/mdemangler/typeinfo/MDTypeInfoParser.java"},"region":{"startLine":277}}}],"partialFingerprints":{"codehealthFindingId/v1":"547cdca3915dcaeab9cdefdecd3541350b2e6f24b07ff975d2c6a972057546fe"}},{"ruleId":"D1","level":"warning","message":{"text":"PcodeParity.evalBinaryExpression (cyclomatic 34): PcodeParity.evalBinaryExpression has cyclomatic complexity 34 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Extensions/Lisa/src/main/java/ghidra/lisa/pcode/analyses/PcodeParity.java"},"region":{"startLine":165}}}],"partialFingerprints":{"codehealthFindingId/v1":"08a530a96596e8d6a5b94960d67bb6b58512ae15ff1ecb04da72e0ad38d46d01"}},{"ruleId":"D1","level":"warning","message":{"text":"BitmapResource.decompress (cyclomatic 33): BitmapResource.decompress has cyclomatic complexity 33 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/BitmapResource.java"},"region":{"startLine":482}}}],"partialFingerprints":{"codehealthFindingId/v1":"15b5e1c5e9d02f59ad10d8130e09f6ca10179ef920964d0f24f4a3e1cdbbe51e"}},{"ruleId":"D1","level":"warning","message":{"text":"BasicCompilerSpec.restoreXml (cyclomatic 33): BasicCompilerSpec.restoreXml has cyclomatic complexity 33 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/lang/BasicCompilerSpec.java"},"region":{"startLine":582}}}],"partialFingerprints":{"codehealthFindingId/v1":"3ccea2f93481364d6287eabed3df07b87872eb045ab96d7764d2ffc353489ca9"}},{"ruleId":"D1","level":"warning","message":{"text":"FlowOverride.getModifiedFlowType (cyclomatic 33): FlowOverride.getModifiedFlowType has cyclomatic complexity 33 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/listing/FlowOverride.java"},"region":{"startLine":119}}}],"partialFingerprints":{"codehealthFindingId/v1":"bdbd603ec3da68cb048f112bd2fd93c74bd2903da13866a30e80727a4a308588"}},{"ruleId":"D1","level":"warning","message":{"text":"MDQualifier.parseInternal (cyclomatic 33): MDQualifier.parseInternal has cyclomatic complexity 33 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/MicrosoftDmang/src/main/java/mdemangler/naming/MDQualifier.java"},"region":{"startLine":173}}}],"partialFingerprints":{"codehealthFindingId/v1":"fbacfc2f680b2fb9de9320f7bdea6010d31dabe16257e59b2e40523dc5a92f2a"}},{"ruleId":"D1","level":"warning","message":{"text":"MDTemplateArgumentsList.parseInternal (cyclomatic 33): MDTemplateArgumentsList.parseInternal has cyclomatic complexity 33 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/MicrosoftDmang/src/main/java/mdemangler/template/MDTemplateArgumentsList.java"},"region":{"startLine":47}}}],"partialFingerprints":{"codehealthFindingId/v1":"bc1eeab3187b8ded448b85edb99bf2d1d80d12f6277f035f47ee5368c27c7e4e"}},{"ruleId":"D1","level":"warning","message":{"text":"FillOutStructureHelper.fillOutStructureDef (cyclomatic 33): FillOutStructureHelper.fillOutStructureDef has cyclomatic complexity 33 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/Decompiler/src/main/java/ghidra/app/decompiler/util/FillOutStructureHelper.java"},"region":{"startLine":492}}}],"partialFingerprints":{"codehealthFindingId/v1":"014bab3f651ab700a8eec66ba41a7ece4cb2205c962ed924063c482c945b3da2"}},{"ruleId":"D1","level":"warning","message":{"text":"PcodeInjectLibrary.isEquivalent (cyclomatic 32): PcodeInjectLibrary.isEquivalent has cyclomatic complexity 32 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/lang/PcodeInjectLibrary.java"},"region":{"startLine":432}}}],"partialFingerprints":{"codehealthFindingId/v1":"5e66d874f1b2e33d0cdc5f70a9446547ae65023bdfdc3b9cbd766b2e7f2ccdb1"}},{"ruleId":"D1","level":"warning","message":{"text":"RefTypeFactory.getDefaultStackRefType (cyclomatic 32): RefTypeFactory.getDefaultStackRefType has cyclomatic complexity 32 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/symbol/RefTypeFactory.java"},"region":{"startLine":188}}}],"partialFingerprints":{"codehealthFindingId/v1":"45e2ed736a8f038c05d7b5d6861cc20b85a8764ff888b347b30a51f27d20e342"}},{"ruleId":"D1","level":"warning","message":{"text":"ArmAnalyzer.createDataType (cyclomatic 30): ArmAnalyzer.createDataType has cyclomatic complexity 30 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Processors/ARM/src/main/java/ghidra/app/plugin/core/analysis/ArmAnalyzer.java"},"region":{"startLine":625}}}],"partialFingerprints":{"codehealthFindingId/v1":"abb3e72a8c22c76de194d4ab2ad6bd770011bcf2658fca03968d3ae4ce60d881"}},{"ruleId":"D1","level":"warning","message":{"text":"FunctionVariables.updateFunction (cyclomatic 30): FunctionVariables.updateFunction has cyclomatic complexity 30 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/function/FunctionVariables.java"},"region":{"startLine":418}}}],"partialFingerprints":{"codehealthFindingId/v1":"75823b69d846abf2e490cab5a1d4196472877e6e7703f2fee21b624131e34347"}},{"ruleId":"D1","level":"warning","message":{"text":"SwiftStructureNode.demangle (cyclomatic 30): SwiftStructureNode.demangle has cyclomatic complexity 30 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/Swift/src/main/java/ghidra/app/util/demangler/swift/nodes/SwiftStructureNode.java"},"region":{"startLine":29}}}],"partialFingerprints":{"codehealthFindingId/v1":"70b187d0e4f8a98f1e533d74edfcdf7c9192389bc745470b05e097c4b5edd841"}},{"ruleId":"D1","level":"warning","message":{"text":"FunctionVariables.insertParameter (cyclomatic 29): FunctionVariables.insertParameter has cyclomatic complexity 29 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/function/FunctionVariables.java"},"region":{"startLine":740}}}],"partialFingerprints":{"codehealthFindingId/v1":"d8381175f8dd279ed19d238ec876020776dc3ee9213bf52b11eb357f9eec6a0e"}},{"ruleId":"D1","level":"warning","message":{"text":"RefTypeFactory.getDefaultMemoryRefType (cyclomatic 29): RefTypeFactory.getDefaultMemoryRefType has cyclomatic complexity 29 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/symbol/RefTypeFactory.java"},"region":{"startLine":398}}}],"partialFingerprints":{"codehealthFindingId/v1":"434ff70a7198abf1fb10526b608fbe168955c7b23003497dc373c8b97d254327"}},{"ruleId":"D1","level":"warning","message":{"text":"SleighPreprocessor.processInternal (cyclomatic 29): SleighPreprocessor.processInternal has cyclomatic complexity 29 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/sleigh/grammar/SleighPreprocessor.java"},"region":{"startLine":96}}}],"partialFingerprints":{"codehealthFindingId/v1":"770b0c29d9abc72941a2c0794b8de9de341e3f2072307cb420826853eb1d5f8b"}},{"ruleId":"D1","level":"warning","message":{"text":"LongExpressionValue.applyBinaryOperator (cyclomatic 29): LongExpressionValue.applyBinaryOperator has cyclomatic complexity 29 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Generic/src/main/java/generic/expressions/LongExpressionValue.java"},"region":{"startLine":57}}}],"partialFingerprints":{"codehealthFindingId/v1":"1a5b892a1d028b91c6ede3e5fa24e4f086013826f113e7a8bf00887c32343469"}},{"ruleId":"D1","level":"warning","message":{"text":"BSimControlLaunchable.readOptions (cyclomatic 29): BSimControlLaunchable.readOptions has cyclomatic complexity 29 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/BSim/src/main/java/ghidra/features/bsim/query/BSimControlLaunchable.java"},"region":{"startLine":244}}}],"partialFingerprints":{"codehealthFindingId/v1":"55abcb718c4ce507a24ebcd4a5e361edb4a036b437eb3da38675cf54dcc5b4eb"}},{"ruleId":"D1","level":"warning","message":{"text":"PcodeDataflowConstantPropagation.eval (cyclomatic 29): PcodeDataflowConstantPropagation.eval has cyclomatic complexity 29 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Extensions/Lisa/src/main/java/ghidra/lisa/pcode/analyses/PcodeDataflowConstantPropagation.java"},"region":{"startLine":88}}}],"partialFingerprints":{"codehealthFindingId/v1":"ba8c28a924ad329e49c4e819e5b45354794042d02560c1df464291fc8142eb55"}},{"ruleId":"D1","level":"warning","message":{"text":"SleighHighlightingCalculator.provideHighlightingFor (cyclomatic 29): SleighHighlightingCalculator.provideHighlightingFor has cyclomatic complexity 29 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"GhidraBuild/EclipsePlugins/GhidraSleighEditor/ghidra.xtext.sleigh.ui/src/ghidra/xtext/sleigh/ui/SleighHighlightingCalculator.java"},"region":{"startLine":60}}}],"partialFingerprints":{"codehealthFindingId/v1":"6bbf4d547248b6c5d18af8b43dfe5b737f1cca8284309835404d107db8d1fa3b"}},{"ruleId":"D1","level":"warning","message":{"text":"SimpleDestReferenceIterator.getDestinations (cyclomatic 28): SimpleDestReferenceIterator.getDestinations has cyclomatic complexity 28 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/block/SimpleDestReferenceIterator.java"},"region":{"startLine":99}}}],"partialFingerprints":{"codehealthFindingId/v1":"1b2396c3f3e2536b74c905019ed52af67e0dcf7db40b7d99896db84c175368a6"}},{"ruleId":"D1","level":"warning","message":{"text":"SSHAuthenticationModule.authenticate (cyclomatic 28): SSHAuthenticationModule.authenticate has cyclomatic complexity 28 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/GhidraServer/src/main/java/ghidra/server/security/SSHAuthenticationModule.java"},"region":{"startLine":144}}}],"partialFingerprints":{"codehealthFindingId/v1":"6ea5728657e715ec4217fdea5fa41e2e63ff05e31270d75d854597bd18bf7bd9"}},{"ruleId":"D1","level":"warning","message":{"text":"PagedumpFileHeader.parse (cyclomatic 28): PagedumpFileHeader.parse has cyclomatic complexity 28 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/dump/pagedump/PagedumpFileHeader.java"},"region":{"startLine":125}}}],"partialFingerprints":{"codehealthFindingId/v1":"13a7f585178780dd57691323fa362b73e7109bc31800f4ce5db4c7038421728f"}},{"ruleId":"D1","level":"warning","message":{"text":"PcodeInterval.evalPcodeBinaryExpression (cyclomatic 28): PcodeInterval.evalPcodeBinaryExpression has cyclomatic complexity 28 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Extensions/Lisa/src/main/java/ghidra/lisa/pcode/analyses/PcodeInterval.java"},"region":{"startLine":289}}}],"partialFingerprints":{"codehealthFindingId/v1":"1398647d5347db362b9d875c98d0c78b26cb379f75ef3e045a6182f3634e6852"}},{"ruleId":"D1","level":"warning","message":{"text":"SH_ElfRelocationHandler.relocate (cyclomatic 27): SH_ElfRelocationHandler.relocate has cyclomatic complexity 27 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Processors/SuperH4/src/main/java/ghidra/app/util/bin/format/elf/relocation/SH_ElfRelocationHandler.java"},"region":{"startLine":42}}}],"partialFingerprints":{"codehealthFindingId/v1":"74bbc0f3d697563bfa7840543ddff5ce71ff8fe95abe10d41cb453a34f76cb11"}},{"ruleId":"D1","level":"warning","message":{"text":"ConstantPoolJava.getRecord (cyclomatic 27): ConstantPoolJava.getRecord has cyclomatic complexity 27 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Processors/JVM/src/main/java/ghidra/app/util/pcodeInject/ConstantPoolJava.java"},"region":{"startLine":142}}}],"partialFingerprints":{"codehealthFindingId/v1":"cb2ad2405ac58a1d3cd87c3532eeb341368eea823c21571d2d44bb0efe3101f3"}},{"ruleId":"D1","level":"warning","message":{"text":"CodeManager.addReferencesForInstruction (cyclomatic 27): CodeManager.addReferencesForInstruction has cyclomatic complexity 27 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/code/CodeManager.java"},"region":{"startLine":2604}}}],"partialFingerprints":{"codehealthFindingId/v1":"5ac4ab94506ccfac886548deedea94ff8d551d259c6ff6e86f588992340ffb60"}},{"ruleId":"D1","level":"warning","message":{"text":"ParamEntry.restoreXml (cyclomatic 27): ParamEntry.restoreXml has cyclomatic complexity 27 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/lang/ParamEntry.java"},"region":{"startLine":544}}}],"partialFingerprints":{"codehealthFindingId/v1":"50fb68991571c13b60af1093458023da799c8e43889debb162aa03604fd18215"}},{"ruleId":"D1","level":"warning","message":{"text":"VariableOffset.getObjects (cyclomatic 27): VariableOffset.getObjects has cyclomatic complexity 27 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/listing/VariableOffset.java"},"region":{"startLine":124}}}],"partialFingerprints":{"codehealthFindingId/v1":"b1126ad76323ce4d7e4b212cd56a3791bfb5b89b944b8be422218e0785c5f631"}},{"ruleId":"D1","level":"warning","message":{"text":"RefTypeFactory.getMemRefType (cyclomatic 27): RefTypeFactory.getMemRefType has cyclomatic complexity 27 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/symbol/RefTypeFactory.java"},"region":{"startLine":529}}}],"partialFingerprints":{"codehealthFindingId/v1":"a3d4748e7c8f83b4237ac4712a55239e66effdded9a172fc4c33dd05cf4b4bb9"}},{"ruleId":"D1","level":"warning","message":{"text":"AbstractDockingTest.triggerText (cyclomatic 27): AbstractDockingTest.triggerText has cyclomatic complexity 27 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Docking/src/main/java/docking/test/AbstractDockingTest.java"},"region":{"startLine":1655}}}],"partialFingerprints":{"codehealthFindingId/v1":"349792d8a2d9154424c494c6305c4d13ddf4fa61fdf1388dd50b2f8d142af35f"}},{"ruleId":"D1","level":"warning","message":{"text":"MatchInfo.getMarkupTypeForLocation (cyclomatic 27): MatchInfo.getMarkupTypeForLocation has cyclomatic complexity 27 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/VersionTracking/src/main/java/ghidra/feature/vt/gui/util/MatchInfo.java"},"region":{"startLine":271}}}],"partialFingerprints":{"codehealthFindingId/v1":"501173a1b0c711d8bd4aadc417f2ac1cf7830d2e3a8593d1d19b575026203b6c"}},{"ruleId":"D1","level":"warning","message":{"text":"SarifProgramOptions.setOptions (cyclomatic 27): SarifProgramOptions.setOptions has cyclomatic complexity 27 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/Sarif/src/main/java/sarif/SarifProgramOptions.java"},"region":{"startLine":197}}}],"partialFingerprints":{"codehealthFindingId/v1":"b54e1248d8f12bfd9af27ac0bda6aa53edc52a09dc37883e8ce0213e9d6d2705"}},{"ruleId":"D1","level":"warning","message":{"text":"ArtMethod.toDataType (cyclomatic 27): ArtMethod.toDataType has cyclomatic complexity 27 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/android/art/ArtMethod.java"},"region":{"startLine":296}}}],"partialFingerprints":{"codehealthFindingId/v1":"1f4e4231d7c2620a6a3cd29b70ffa779275e30ab2b7d0e5bdd1077addee32689"}},{"ruleId":"D1","level":"warning","message":{"text":"ArtMethod.\u003Cinit\u003E (cyclomatic 27): ArtMethod.\u003Cinit\u003E has cyclomatic complexity 27 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/android/art/ArtMethod.java"},"region":{"startLine":50}}}],"partialFingerprints":{"codehealthFindingId/v1":"c11d8c0806a217c6624099776f2a4d87bd37e92f5cbe0dbb91b55842927d330f"}},{"ruleId":"D1","level":"warning","message":{"text":"BsfvTokenHighlightMatcher.getTokenHighlight (cyclomatic 27): BsfvTokenHighlightMatcher.getTokenHighlight has cyclomatic complexity 27 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/BSimFeatureVisualizer/src/main/java/ghidra/bsfv/BsfvTokenHighlightMatcher.java"},"region":{"startLine":152}}}],"partialFingerprints":{"codehealthFindingId/v1":"1fef1d9ac7523502bc23245d13e0f1f163a160b8cfd6950364e48b381dcc0583"}},{"ruleId":"D1","level":"warning","message":{"text":"ElasticDatabase.query (cyclomatic 27): ElasticDatabase.query has cyclomatic complexity 27 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/BSim/src/main/java/ghidra/features/bsim/query/elastic/ElasticDatabase.java"},"region":{"startLine":2522}}}],"partialFingerprints":{"codehealthFindingId/v1":"58694bc516e35a4ad277cd8cb4898b466baec86c1f7792d7778b9f600a9f3c5c"}},{"ruleId":"D1","level":"warning","message":{"text":"ArmAnalyzer.recoverSwitches (cyclomatic 26): ArmAnalyzer.recoverSwitches has cyclomatic complexity 26 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Processors/ARM/src/main/java/ghidra/app/plugin/core/analysis/ArmAnalyzer.java"},"region":{"startLine":272}}}],"partialFingerprints":{"codehealthFindingId/v1":"c606e0f103fe64fc251d761017c24cecfc9846aa612603930996ddcf83f2f6f5"}},{"ruleId":"D1","level":"warning","message":{"text":"PcodeEmit.checkOverrides (cyclomatic 26): PcodeEmit.checkOverrides has cyclomatic complexity 26 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/processors/sleigh/PcodeEmit.java"},"region":{"startLine":774}}}],"partialFingerprints":{"codehealthFindingId/v1":"526ffcbf3ecd6bd9ad34978662018c115ba99ee5bd1b48aca1c27fc7aaa78ee2"}},{"ruleId":"D1","level":"warning","message":{"text":"SleighCompileOptions.processArg (cyclomatic 26): SleighCompileOptions.processArg has cyclomatic complexity 26 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slgh_compile/SleighCompileOptions.java"},"region":{"startLine":170}}}],"partialFingerprints":{"codehealthFindingId/v1":"722ad8dae33751a88a59c6d5ba8b88a54e4e9fc03d9ddefdaa8ace8b48f0e4f9"}},{"ruleId":"D1","level":"warning","message":{"text":"ProgramDB.createManagers (cyclomatic 26): ProgramDB.createManagers has cyclomatic complexity 26 (threshold 15). To reduce it, separate the branches: extract each independent case into its own named function so the top-level body reads as a short sequence of named decisions."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/ProgramDB.java"},"region":{"startLine":1624}}}],"partialFingerprints":{"codehealthFindingId/v1":"2ca11396cbb9e189d7528d8dff87d02295cc76c76224824f6891f0224d299815"}},{"ruleId":"D1","level":"warning","message":{"text":"PcodeDataTypeManager.decodeDataType (cyclomatic 26): PcodeDataTypeManager.decodeDataType has cyclomatic complexity 26 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/pcode/PcodeDataTypeManager.java"},"region":{"startLine":213}}}],"partialFingerprints":{"codehealthFindingId/v1":"5667095458322d4d1f3a9e31625985b50beefc720926a86760dcb0ad98b792c3"}},{"ruleId":"D1","level":"warning","message":{"text":"PcodeDataTypeManager.encodeType (cyclomatic 26): PcodeDataTypeManager.encodeType has cyclomatic complexity 26 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/pcode/PcodeDataTypeManager.java"},"region":{"startLine":1116}}}],"partialFingerprints":{"codehealthFindingId/v1":"e14886b6bd5ab84cedaa0d0620c8c5e882bbe567b0a23da588d928d36dca9490"}},{"ruleId":"D1","level":"warning","message":{"text":"Varnode.decode (cyclomatic 26): Varnode.decode has cyclomatic complexity 26 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/pcode/Varnode.java"},"region":{"startLine":388}}}],"partialFingerprints":{"codehealthFindingId/v1":"a370f4326a533aac10ce0f29c0e553b6fbe30bcbfecf616e4be26d6c436b0d47"}},{"ruleId":"D1","level":"warning","message":{"text":"GhidraFileData.checkin (cyclomatic 26): GhidraFileData.checkin has cyclomatic complexity 26 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Project/src/main/java/ghidra/framework/data/GhidraFileData.java"},"region":{"startLine":1587}}}],"partialFingerprints":{"codehealthFindingId/v1":"c10bd3155b446ab6bd6a3f422450bc47ed5cf75d66f6bd5864a670de85c5ff0e"}},{"ruleId":"D1","level":"warning","message":{"text":"GProperties.createElement (cyclomatic 26): GProperties.createElement has cyclomatic complexity 26 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Generic/src/main/java/ghidra/framework/options/GProperties.java"},"region":{"startLine":536}}}],"partialFingerprints":{"codehealthFindingId/v1":"61e747f54250c7f3971ab8c5f567298cd5054fc51a9c0e3b2be0f3131b44f038"}},{"ruleId":"D1","level":"warning","message":{"text":"Database.scanFiles (cyclomatic 26): Database.scanFiles has cyclomatic complexity 26 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/DB/src/main/java/db/Database.java"},"region":{"startLine":261}}}],"partialFingerprints":{"codehealthFindingId/v1":"feb1474bb6e0530a49793af8e7ef3435bb4eedfc3894c4f4ca144922f1e9f83f"}},{"ruleId":"D1","level":"warning","message":{"text":"MDString.parseByte (cyclomatic 26): MDString.parseByte has cyclomatic complexity 26 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/MicrosoftDmang/src/main/java/mdemangler/MDString.java"},"region":{"startLine":176}}}],"partialFingerprints":{"codehealthFindingId/v1":"2a308805504f9aab222a37f0a7dec90d1688c1f41120e23689e8de490104a9b2"}},{"ruleId":"D1","level":"warning","message":{"text":"Pagedump.buildKernelStructures (cyclomatic 26): Pagedump.buildKernelStructures has cyclomatic complexity 26 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/dump/pagedump/Pagedump.java"},"region":{"startLine":226}}}],"partialFingerprints":{"codehealthFindingId/v1":"e321bcc8717901c9142eeaecbad95907f9357dcc024ceb5061cc7fc5231cdf44"}},{"ruleId":"D1","level":"warning","message":{"text":"BSimControlLaunchable.changeAuthCommand (cyclomatic 26): BSimControlLaunchable.changeAuthCommand has cyclomatic complexity 26 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/BSim/src/main/java/ghidra/features/bsim/query/BSimControlLaunchable.java"},"region":{"startLine":1267}}}],"partialFingerprints":{"codehealthFindingId/v1":"06c809d6f4e25c480942f4d47d68bd84007cb9b7a3c21da06fdbc3557109b22a"}},{"ruleId":"D1","level":"warning","message":{"text":"MemoryBlockDefinition.fixupBlock (cyclomatic 25): MemoryBlockDefinition.fixupBlock has cyclomatic complexity 25 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/processors/generic/MemoryBlockDefinition.java"},"region":{"startLine":185}}}],"partialFingerprints":{"codehealthFindingId/v1":"9b85cc16b41a45e0cd475327f42983bad13abb414277e52fe90316882db76ab5"}},{"ruleId":"D1","level":"warning","message":{"text":"Disassembler.disassemble (cyclomatic 25): Disassembler.disassemble has cyclomatic complexity 25 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/disassemble/Disassembler.java"},"region":{"startLine":559}}}],"partialFingerprints":{"codehealthFindingId/v1":"a3e3f7d0b77e2a0f60d88d803427402d6551e2c4d81c1cb092dd36e98ffafc1f"}},{"ruleId":"D1","level":"warning","message":{"text":"FileViewer.handleFVEvent (cyclomatic 25): FileViewer.handleFVEvent has cyclomatic complexity 25 (threshold 15). To reduce it, separate the branches: extract each independent case into its own named function so the top-level body reads as a short sequence of named decisions."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Project/src/main/java/ghidra/framework/main/logviewer/ui/FileViewer.java"},"region":{"startLine":136}}}],"partialFingerprints":{"codehealthFindingId/v1":"d7c9bafda8cca9e56f8fe94bafd33ae9100f8250ffe7e680f89620b872404a18"}},{"ruleId":"D1","level":"warning","message":{"text":"HTMLFileParser.processTag (cyclomatic 25): HTMLFileParser.processTag has cyclomatic complexity 25 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Help/src/main/java/help/validator/HTMLFileParser.java"},"region":{"startLine":176}}}],"partialFingerprints":{"codehealthFindingId/v1":"40d39f74251a8856d0943ef8c76f8134c9102a6a98e0792d1f6efbd209ae3401"}},{"ruleId":"D1","level":"warning","message":{"text":"RustDemanglerLegacy.demangle (cyclomatic 25): RustDemanglerLegacy.demangle has cyclomatic complexity 25 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/Rust/src/main/java/ghidra/app/plugin/core/analysis/rust/demangler/RustDemanglerLegacy.java"},"region":{"startLine":23}}}],"partialFingerprints":{"codehealthFindingId/v1":"cc1522fd91ccd0ad10f301bd6fd1fe12ebe991cd6c57f7454cb26cb09cbc661a"}},{"ruleId":"D1","level":"warning","message":{"text":"PdbResearch.studyCompositeForwardReferenceAndDefinition (cyclomatic 25): PdbResearch.studyCompositeForwardReferenceAndDefinition has cyclomatic complexity 25 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/PDB/src/main/java/ghidra/app/util/pdb/pdbapplicator/PdbResearch.java"},"region":{"startLine":849}}}],"partialFingerprints":{"codehealthFindingId/v1":"222956f5fa161445b3ea3666a59b011e9a9fc401647eab34b72785dd733ca24e"}},{"ruleId":"D1","level":"warning","message":{"text":"DatabaseInformation.equals (cyclomatic 25): DatabaseInformation.equals has cyclomatic complexity 25 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/BSim/src/main/java/ghidra/features/bsim/query/description/DatabaseInformation.java"},"region":{"startLine":147}}}],"partialFingerprints":{"codehealthFindingId/v1":"1aa836d21a2d0a1bb39cffc7c26912b1087ac283e8f8c185ef44f2c557ba6fb6"}},{"ruleId":"D1","level":"warning","message":{"text":"PcodeCompile.createBitRange (cyclomatic 24): PcodeCompile.createBitRange has cyclomatic complexity 24 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slgh_compile/PcodeCompile.java"},"region":{"startLine":598}}}],"partialFingerprints":{"codehealthFindingId/v1":"92d1b695b0aafd72bc40407cdb760697eb4e9d96c1fcb25c5a59c8189d8aa6a3"}},{"ruleId":"D1","level":"warning","message":{"text":"Translate.insertSpace (cyclomatic 24): Translate.insertSpace has cyclomatic complexity 24 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/translate/Translate.java"},"region":{"startLine":349}}}],"partialFingerprints":{"codehealthFindingId/v1":"8f1a6fe83702ec62f1dd6280e64a2214793c861cf4debc875fac108886fe8d46"}},{"ruleId":"D1","level":"warning","message":{"text":"FunctionManagerDB.getReferencedVariable (cyclomatic 24): FunctionManagerDB.getReferencedVariable has cyclomatic complexity 24 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/function/FunctionManagerDB.java"},"region":{"startLine":1059}}}],"partialFingerprints":{"codehealthFindingId/v1":"a030db25a56de770ce3d0ce76dd0836bff35bd03e10cb1a466f1b3ba8855e935"}},{"ruleId":"D1","level":"warning","message":{"text":"AddressSet.deleteSets (cyclomatic 24): AddressSet.deleteSets has cyclomatic complexity 24 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/address/AddressSet.java"},"region":{"startLine":949}}}],"partialFingerprints":{"codehealthFindingId/v1":"30df9b5bfc74a47666d45851ee6707f922d01b9543776d4ac2c8f78794d309dc"}},{"ruleId":"D1","level":"warning","message":{"text":"OperandType.toString (cyclomatic 24): OperandType.toString has cyclomatic complexity 24 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/lang/OperandType.java"},"region":{"startLine":368}}}],"partialFingerprints":{"codehealthFindingId/v1":"b53430872cb3df2b12d84d0b7d2a8d31b4e06b5e3b698ebfc78079c926635e4e"}},{"ruleId":"D1","level":"warning","message":{"text":"JSONParser.convert (cyclomatic 24): JSONParser.convert has cyclomatic complexity 24 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Generic/src/main/java/generic/json/JSONParser.java"},"region":{"startLine":369}}}],"partialFingerprints":{"codehealthFindingId/v1":"0a21c9a19e138b521673ea9fdc21fd598df10fb9494d8411e47893cf4bb3774c"}},{"ruleId":"D1","level":"warning","message":{"text":"MarkupSarifMgr.processEquateReference (cyclomatic 24): MarkupSarifMgr.processEquateReference has cyclomatic complexity 24 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/Sarif/src/main/java/sarif/managers/MarkupSarifMgr.java"},"region":{"startLine":417}}}],"partialFingerprints":{"codehealthFindingId/v1":"afd7e300d765195b54b3e1216afc6dfbe54aa8734a46157ad1d3f0a6ff2501eb"}},{"ruleId":"D1","level":"warning","message":{"text":"PropertiesSarifMgr.processPropertyListEntry (cyclomatic 24): PropertiesSarifMgr.processPropertyListEntry has cyclomatic complexity 24 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/Sarif/src/main/java/sarif/managers/PropertiesSarifMgr.java"},"region":{"startLine":196}}}],"partialFingerprints":{"codehealthFindingId/v1":"9b9c21aae2011ca544d8ba685db90148380d7dd4fec0e7565988fcdc467df6e7"}},{"ruleId":"D1","level":"warning","message":{"text":"SymbolTableSarifMgr.processSymbol (cyclomatic 24): SymbolTableSarifMgr.processSymbol has cyclomatic complexity 24 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/Sarif/src/main/java/sarif/managers/SymbolTableSarifMgr.java"},"region":{"startLine":69}}}],"partialFingerprints":{"codehealthFindingId/v1":"8ecad3662605dd08560f15db0c5abcbd90a5654a0247817488396bcc9fdc55bf"}},{"ruleId":"D1","level":"warning","message":{"text":"MessageDigestFidHasher.hash (cyclomatic 24): MessageDigestFidHasher.hash has cyclomatic complexity 24 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/FunctionID/src/main/java/ghidra/feature/fid/hash/MessageDigestFidHasher.java"},"region":{"startLine":83}}}],"partialFingerprints":{"codehealthFindingId/v1":"8b0e15349e0f3a630ba9141158c3be5354e9adf986fb4c9385203793d521c1e7"}},{"ruleId":"D1","level":"warning","message":{"text":"DumpPeShim.processMemoryBlocks (cyclomatic 24): DumpPeShim.processMemoryBlocks has cyclomatic complexity 24 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/dump/cmd/DumpPeShim.java"},"region":{"startLine":141}}}],"partialFingerprints":{"codehealthFindingId/v1":"cb0136eb34617429a612eaa7685adf6a78cd63d5df61eaa343dc06223f6d384f"}},{"ruleId":"D1","level":"warning","message":{"text":"FunctionStartAction.restoreXmlAttributes (cyclomatic 24): FunctionStartAction.restoreXmlAttributes has cyclomatic complexity 24 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/BytePatterns/src/main/java/ghidra/app/analyzers/FunctionStartAnalyzer.java"},"region":{"startLine":564}}}],"partialFingerprints":{"codehealthFindingId/v1":"5178fa7cae0cd502bab16906ed87b5a9067ae94dac6b023854389298bf7ab359"}},{"ruleId":"D1","level":"warning","message":{"text":"X86_32_ElfRelocationHandler.relocate (cyclomatic 23): X86_32_ElfRelocationHandler.relocate has cyclomatic complexity 23 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Processors/x86/src/main/java/ghidra/app/util/bin/format/elf/relocation/X86_32_ElfRelocationHandler.java"},"region":{"startLine":48}}}],"partialFingerprints":{"codehealthFindingId/v1":"313b8c8fb3e345e2be65f9290d91122e32c0430fa7d65d0a58cfc27ef6e4e182"}},{"ruleId":"D1","level":"warning","message":{"text":"Pic17c7xxAnalyzer.handleBSRModification (cyclomatic 23): Pic17c7xxAnalyzer.handleBSRModification has cyclomatic complexity 23 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Processors/PIC/src/main/java/ghidra/app/plugin/core/analysis/Pic17c7xxAnalyzer.java"},"region":{"startLine":941}}}],"partialFingerprints":{"codehealthFindingId/v1":"eab42dff2034ee4ff1384091ba5fb756698c15f829b00ed524903f52a0f4c985"}},{"ruleId":"D1","level":"warning","message":{"text":"Pic17c7xxAnalyzer.handlePclathModification (cyclomatic 23): Pic17c7xxAnalyzer.handlePclathModification has cyclomatic complexity 23 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Processors/PIC/src/main/java/ghidra/app/plugin/core/analysis/Pic17c7xxAnalyzer.java"},"region":{"startLine":1020}}}],"partialFingerprints":{"codehealthFindingId/v1":"65fc867a97a0f02b806fb146513b0e325e9c2af6f468e3ccc12d2589bc44cc08"}},{"ruleId":"D1","level":"warning","message":{"text":"ConstTpl.fix (cyclomatic 23): ConstTpl.fix has cyclomatic complexity 23 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/processors/sleigh/template/ConstTpl.java"},"region":{"startLine":139}}}],"partialFingerprints":{"codehealthFindingId/v1":"c06d714694a2bc23d7614d2564278ffc8793afd3651afea06b0fd568d19a9bba"}},{"ruleId":"D1","level":"warning","message":{"text":"SleighInstructionPrototype.walkTemplates (cyclomatic 23): SleighInstructionPrototype.walkTemplates has cyclomatic complexity 23 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/processors/sleigh/SleighInstructionPrototype.java"},"region":{"startLine":201}}}],"partialFingerprints":{"codehealthFindingId/v1":"620f84a4fb4f1bc595b6b40f418ccd373cbf89674da621ec51049e0f41dbfc22"}},{"ruleId":"D1","level":"warning","message":{"text":"PseudoDisassembler.followSubFlows (cyclomatic 23): PseudoDisassembler.followSubFlows has cyclomatic complexity 23 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/util/PseudoDisassembler.java"},"region":{"startLine":387}}}],"partialFingerprints":{"codehealthFindingId/v1":"47e8b52830fe8944bd78c24679406323ea14f32405e047ff49bad6775c7da8b4"}},{"ruleId":"D1","level":"warning","message":{"text":"DataTypeWriter.doWrite (cyclomatic 23): DataTypeWriter.doWrite has cyclomatic complexity 23 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/DataTypeWriter.java"},"region":{"startLine":228}}}],"partialFingerprints":{"codehealthFindingId/v1":"b27b8cc6d3cb8e0fdedb91dac6b0f2075d5c5d68d8d32300d0af628906d31d8f"}},{"ruleId":"D1","level":"warning","message":{"text":"VariableStorage.checkVarnodes (cyclomatic 23): VariableStorage.checkVarnodes has cyclomatic complexity 23 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/listing/VariableStorage.java"},"region":{"startLine":184}}}],"partialFingerprints":{"codehealthFindingId/v1":"331c5df8b70574081882a7af350798819a9a85ef838dc80515635f5c63e215aa"}},{"ruleId":"D1","level":"warning","message":{"text":"LocalSymbolMap.grabFromFunction (cyclomatic 23): LocalSymbolMap.grabFromFunction has cyclomatic complexity 23 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/pcode/LocalSymbolMap.java"},"region":{"startLine":156}}}],"partialFingerprints":{"codehealthFindingId/v1":"3ff5ba22a91df67831aa0665615cd47aa29f0f729ab119e256c80a481495ef44"}},{"ruleId":"D1","level":"warning","message":{"text":"ParsingEnvironment.getErrorMessage (cyclomatic 23): ParsingEnvironment.getErrorMessage has cyclomatic complexity 23 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/sleigh/grammar/ParsingEnvironment.java"},"region":{"startLine":115}}}],"partialFingerprints":{"codehealthFindingId/v1":"0c42ed6263c02171463567594c55c053e8892926430b0d227722e89a15db5ae1"}},{"ruleId":"D1","level":"warning","message":{"text":"ShellUtils.parseArgs (cyclomatic 23): ShellUtils.parseArgs has cyclomatic complexity 23 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Pty/src/main/java/ghidra/pty/ShellUtils.java"},"region":{"startLine":44}}}],"partialFingerprints":{"codehealthFindingId/v1":"e9a781994196fb617b072a14ef03e80dad66742fe466c55c749acf2c4b183b4f"}},{"ruleId":"D1","level":"warning","message":{"text":"LinkHandler.followInternalLinkage (cyclomatic 23): LinkHandler.followInternalLinkage has cyclomatic complexity 23 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Project/src/main/java/ghidra/framework/data/LinkHandler.java"},"region":{"startLine":420}}}],"partialFingerprints":{"codehealthFindingId/v1":"c52950442f88a9d27ec361c1e6863bab7880f1aa06a6cfc8f443afbab7f96e8a"}},{"ruleId":"D1","level":"warning","message":{"text":"ServerConnectTask.getRepositoryServerHandle (cyclomatic 23): ServerConnectTask.getRepositoryServerHandle has cyclomatic complexity 23 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/FileSystem/src/main/java/ghidra/framework/client/ServerConnectTask.java"},"region":{"startLine":240}}}],"partialFingerprints":{"codehealthFindingId/v1":"9e98aefa55948a90d4021e2597065e169f083135130d8ecaa787e266c5a8b58a"}},{"ruleId":"D1","level":"warning","message":{"text":"Table.deleteRecords (cyclomatic 23): Table.deleteRecords has cyclomatic complexity 23 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/DB/src/main/java/db/Table.java"},"region":{"startLine":1282}}}],"partialFingerprints":{"codehealthFindingId/v1":"e62b31519316b99ffd6d82a184a9fbe805d930da9d21d744bbe8aa590c600985"}},{"ruleId":"D1","level":"warning","message":{"text":"Table.deleteRecords (cyclomatic 23): Table.deleteRecords has cyclomatic complexity 23 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/DB/src/main/java/db/Table.java"},"region":{"startLine":1155}}}],"partialFingerprints":{"codehealthFindingId/v1":"5d05c1bc01d9b9f13543ecdb371475b3fdbeb3b5b6c22fbaaa4df11b257c9190"}},{"ruleId":"D1","level":"warning","message":{"text":"PropertiesSarifMgr.processPropertyMapEntry (cyclomatic 23): PropertiesSarifMgr.processPropertyMapEntry has cyclomatic complexity 23 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/Sarif/src/main/java/sarif/managers/PropertiesSarifMgr.java"},"region":{"startLine":88}}}],"partialFingerprints":{"codehealthFindingId/v1":"c105d2f980cac3caf04cea7244ac32c99425aa054903095506015c4c0cf295ac"}},{"ruleId":"D1","level":"warning","message":{"text":"PdbParser.applyTo (cyclomatic 23): PdbParser.applyTo has cyclomatic complexity 23 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/PDB/src/main/java/ghidra/app/util/bin/format/pdb/PdbParser.java"},"region":{"startLine":336}}}],"partialFingerprints":{"codehealthFindingId/v1":"de4c9c609f80fe7f449680765e84a788ed2a01975b512b565022af025edea2cd"}},{"ruleId":"D1","level":"warning","message":{"text":"CompositeTypeApplier.precheckOrScheduleDependencies (cyclomatic 23): CompositeTypeApplier.precheckOrScheduleDependencies has cyclomatic complexity 23 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/PDB/src/main/java/ghidra/app/util/pdb/pdbapplicator/CompositeTypeApplier.java"},"region":{"startLine":497}}}],"partialFingerprints":{"codehealthFindingId/v1":"a52b366112c8a43c326458e0a1e47529c7ab01441e7cecf984f4934eab12436c"}},{"ruleId":"D1","level":"warning","message":{"text":"MDManagedProperties.parseInternal (cyclomatic 23): MDManagedProperties.parseInternal has cyclomatic complexity 23 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/MicrosoftDmang/src/main/java/mdemangler/datatype/modifier/MDManagedProperties.java"},"region":{"startLine":89}}}],"partialFingerprints":{"codehealthFindingId/v1":"13e6fdb716ce8e4f1c6da72ac6a7db0f5ce6be5902f83fafa7c1ee58572959d8"}},{"ruleId":"D1","level":"warning","message":{"text":"MicrosoftDemanglerUtil.processObjectCPP (cyclomatic 23): MicrosoftDemanglerUtil.processObjectCPP has cyclomatic complexity 23 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/MicrosoftDemangler/src/main/java/ghidra/app/util/demangler/microsoft/MicrosoftDemanglerUtil.java"},"region":{"startLine":253}}}],"partialFingerprints":{"codehealthFindingId/v1":"b62b3d6c5accccee9fe35d6ee505da2c38fc290a2b4fcf29341b364438b678f2"}},{"ruleId":"D1","level":"warning","message":{"text":"PKIAuthenticationModule.authenticate (cyclomatic 23): PKIAuthenticationModule.authenticate has cyclomatic complexity 23 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/GhidraServer/src/main/java/ghidra/server/security/PKIAuthenticationModule.java"},"region":{"startLine":93}}}],"partialFingerprints":{"codehealthFindingId/v1":"2a88c6e0ffba26e05b1ed3719d7318f726c0c5185cdd16ce66f779e142c9ff79"}},{"ruleId":"D1","level":"warning","message":{"text":"CrushedPNGUtil.getUncrushedPNGBytes (cyclomatic 23): CrushedPNGUtil.getUncrushedPNGBytes has cyclomatic complexity 23 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/ios/png/CrushedPNGUtil.java"},"region":{"startLine":23}}}],"partialFingerprints":{"codehealthFindingId/v1":"12ba6a46af96e017bc29ce5f471108d7e985f8ebf6ce0d0f8dc90f36c5d1026d"}},{"ruleId":"D1","level":"warning","message":{"text":"CrushedPNGUtil.removeRowFilters (cyclomatic 23): CrushedPNGUtil.removeRowFilters has cyclomatic complexity 23 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/ios/png/CrushedPNGUtil.java"},"region":{"startLine":318}}}],"partialFingerprints":{"codehealthFindingId/v1":"fe7f1d9e8bd86709a386c55d8fe6e16eafe44bb078610863561683060a4339fe"}},{"ruleId":"D1","level":"warning","message":{"text":"DecompInterface.initializeProcess (cyclomatic 23): DecompInterface.initializeProcess has cyclomatic complexity 23 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/Decompiler/src/main/java/ghidra/app/decompiler/DecompInterface.java"},"region":{"startLine":258}}}],"partialFingerprints":{"codehealthFindingId/v1":"2450caae8695ad82a52765dc1109bd2eb66b47b03d73a2aefc0070ec85782a92"}},{"ruleId":"D1","level":"warning","message":{"text":"PCodeCombinedGraphTask.buildGraph (cyclomatic 23): PCodeCombinedGraphTask.buildGraph has cyclomatic complexity 23 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/Decompiler/src/main/java/ghidra/app/plugin/core/decompile/actions/PCodeCombinedGraphTask.java"},"region":{"startLine":37}}}],"partialFingerprints":{"codehealthFindingId/v1":"f63303f57cc25d53c3f77752ac810c52a7478def4775b38e96288f4f3a1cbd0a"}},{"ruleId":"D1","level":"warning","message":{"text":"Pinning.ngramPinner (cyclomatic 23): Pinning.ngramPinner has cyclomatic complexity 23 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/CodeCompare/src/main/java/ghidra/features/codecompare/graphanalysis/Pinning.java"},"region":{"startLine":568}}}],"partialFingerprints":{"codehealthFindingId/v1":"54ff681fff82ca8d6fd67aa8f086e84c6de44466eb8a0023dd67f53b83f70893"}},{"ruleId":"D1","level":"warning","message":{"text":"PcodeInterval.evalBooleanBinaryExpression (cyclomatic 23): PcodeInterval.evalBooleanBinaryExpression has cyclomatic complexity 23 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Extensions/Lisa/src/main/java/ghidra/lisa/pcode/analyses/PcodeInterval.java"},"region":{"startLine":368}}}],"partialFingerprints":{"codehealthFindingId/v1":"55c991bb985777b8a0c4cfa069ccdac0154e7d3f1132e8aa77b8308e3c23dfa5"}},{"ruleId":"D1","level":"warning","message":{"text":"Translator.translate (cyclomatic 23): Translator.translate has cyclomatic complexity 23 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/target/DBTraceObjectInterface.java"},"region":{"startLine":116}}}],"partialFingerprints":{"codehealthFindingId/v1":"a4c50876dd407b49d99e9c90a7e22f90653b6ebde8ebce6629f502b12f74aee8"}},{"ruleId":"D1","level":"warning","message":{"text":"Pic17c7xxAnalyzer.markupFRegInstruction (cyclomatic 22): Pic17c7xxAnalyzer.markupFRegInstruction has cyclomatic complexity 22 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Processors/PIC/src/main/java/ghidra/app/plugin/core/analysis/Pic17c7xxAnalyzer.java"},"region":{"startLine":511}}}],"partialFingerprints":{"codehealthFindingId/v1":"f4f9b6e38af8d8ad0ef83f59dc864de3c352a343c05c7bd7737a2980bc2a7f33"}},{"ruleId":"D1","level":"warning","message":{"text":"SleighInstructionPrototype.getDynamicOperandRefType (cyclomatic 22): SleighInstructionPrototype.getDynamicOperandRefType has cyclomatic complexity 22 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/processors/sleigh/SleighInstructionPrototype.java"},"region":{"startLine":1272}}}],"partialFingerprints":{"codehealthFindingId/v1":"4739d03effab4cb7546c2afbc17fa1a2ce87f8e3589ff1406018c6d1b3c3daf0"}},{"ruleId":"D1","level":"warning","message":{"text":"SleighLanguage.parseSpaces (cyclomatic 22): SleighLanguage.parseSpaces has cyclomatic complexity 22 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/processors/sleigh/SleighLanguage.java"},"region":{"startLine":896}}}],"partialFingerprints":{"codehealthFindingId/v1":"8daacfb1c80b69f3469d3332dbe5f2966ceaf6a8221f472919e0760cf34006d1"}},{"ruleId":"D1","level":"warning","message":{"text":"Constructor.orderOperands (cyclomatic 22): Constructor.orderOperands has cyclomatic complexity 22 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghsymbol/Constructor.java"},"region":{"startLine":343}}}],"partialFingerprints":{"codehealthFindingId/v1":"2f0a4149117ed4d6546dbd7c116c71bbc3f66b9c25dc3b57d8c5ad071ab45666"}},{"ruleId":"D1","level":"warning","message":{"text":"SymbolDB.doSetNameAndNamespace (cyclomatic 22): SymbolDB.doSetNameAndNamespace has cyclomatic complexity 22 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/symbol/SymbolDB.java"},"region":{"startLine":295}}}],"partialFingerprints":{"codehealthFindingId/v1":"3d18facccb0adad36f74083a0647e712fb497f1304f7a148fb519d874bb17f37"}},{"ruleId":"D1","level":"warning","message":{"text":"DataOrganization.isEquivalent (cyclomatic 22): DataOrganization.isEquivalent has cyclomatic complexity 22 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/DataOrganization.java"},"region":{"startLine":174}}}],"partialFingerprints":{"codehealthFindingId/v1":"909bcfbda746a006eae29271a3bf61220c7779f75d41206708dada66e1db77ec"}},{"ruleId":"D1","level":"warning","message":{"text":"ModelRule.isEquivalent (cyclomatic 22): ModelRule.isEquivalent has cyclomatic complexity 22 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/lang/protorules/ModelRule.java"},"region":{"startLine":108}}}],"partialFingerprints":{"codehealthFindingId/v1":"852ade7bb473c5c23c6ba72ce5bb23028acda5e8c2c9044a6d15f40ac876425e"}},{"ruleId":"D1","level":"warning","message":{"text":"PrimitiveExtractor.extract (cyclomatic 22): PrimitiveExtractor.extract has cyclomatic complexity 22 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/lang/protorules/PrimitiveExtractor.java"},"region":{"startLine":202}}}],"partialFingerprints":{"codehealthFindingId/v1":"6b2914ba39f0376378203bdb2b40df7e8f39e7389c076e1f35eeb109c6898dab"}},{"ruleId":"D1","level":"warning","message":{"text":"PrototypeModel.isEquivalent (cyclomatic 22): PrototypeModel.isEquivalent has cyclomatic complexity 22 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/lang/PrototypeModel.java"},"region":{"startLine":808}}}],"partialFingerprints":{"codehealthFindingId/v1":"9b7e0bf250da07c53e2161f6526bdc58e00881cba1a65f18e7e4e032373d5b38"}},{"ruleId":"D1","level":"warning","message":{"text":"FunctionPrototype.encodePrototype (cyclomatic 22): FunctionPrototype.encodePrototype has cyclomatic complexity 22 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/pcode/FunctionPrototype.java"},"region":{"startLine":317}}}],"partialFingerprints":{"codehealthFindingId/v1":"3cb44d5f07babde85d489db0c1986c13d95eaa65e80202ccd20a2a48ae82cddf"}},{"ruleId":"D1","level":"warning","message":{"text":"PcodeDataTypeManager.getMetatype (cyclomatic 22): PcodeDataTypeManager.getMetatype has cyclomatic complexity 22 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/pcode/PcodeDataTypeManager.java"},"region":{"startLine":1352}}}],"partialFingerprints":{"codehealthFindingId/v1":"4abc742723c32f886056eae281d932e38da02ac55277720d5b372aa31972e2c6"}},{"ruleId":"D1","level":"warning","message":{"text":"MaximizeSpecificColumnGridLayout.getComputedColumnWidths (cyclomatic 22): MaximizeSpecificColumnGridLayout.getComputedColumnWidths has cyclomatic complexity 22 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Gui/src/main/java/ghidra/util/layout/MaximizeSpecificColumnGridLayout.java"},"region":{"startLine":155}}}],"partialFingerprints":{"codehealthFindingId/v1":"51eece52a78af9ff712cd4dccf297c525859f79d7c72bd27526092c6f677f1bf"}},{"ruleId":"D1","level":"warning","message":{"text":"LongDurationFieldKeyIterator.initialize (cyclomatic 22): LongDurationFieldKeyIterator.initialize has cyclomatic complexity 22 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/DB/src/main/java/db/Table.java"},"region":{"startLine":3505}}}],"partialFingerprints":{"codehealthFindingId/v1":"528772059b2859b27e0fb98447fa87c61d129d38193ac353b2a828f598937bf2"}},{"ruleId":"D1","level":"warning","message":{"text":"DefaultCompositeMember.alignComposite (cyclomatic 22): DefaultCompositeMember.alignComposite has cyclomatic complexity 22 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/PDB/src/main/java/ghidra/app/util/bin/format/pdb/DefaultCompositeMember.java"},"region":{"startLine":324}}}],"partialFingerprints":{"codehealthFindingId/v1":"f857ff2d4e299148ec04e846b5d1ac98ee7dae78d16ffec06e51b546777adc35"}},{"ruleId":"D1","level":"warning","message":{"text":"MDCVMod.parseManagedProperty (cyclomatic 22): MDCVMod.parseManagedProperty has cyclomatic complexity 22 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/MicrosoftDmang/src/main/java/mdemangler/datatype/modifier/MDCVMod.java"},"region":{"startLine":446}}}],"partialFingerprints":{"codehealthFindingId/v1":"d2ac78df0935557c7cb7fa6a5fb7b659ae6479f82486dfaca867907cc34a38b8"}},{"ruleId":"D1","level":"warning","message":{"text":"MDModifiedTypeParser.parseManagedProperty (cyclomatic 22): MDModifiedTypeParser.parseManagedProperty has cyclomatic complexity 22 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/MicrosoftDmang/src/main/java/mdemangler/datatype/modifier/MDModifiedTypeParser.java"},"region":{"startLine":361}}}],"partialFingerprints":{"codehealthFindingId/v1":"ebece4cac30cb1bb52f571bebc95c67ee04ee85d58c4060800c0f7ec7af69b0f"}},{"ruleId":"D1","level":"warning","message":{"text":"GhidraServer.getRepositoryServer (cyclomatic 22): GhidraServer.getRepositoryServer has cyclomatic complexity 22 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/GhidraServer/src/main/java/ghidra/server/remote/GhidraServer.java"},"region":{"startLine":263}}}],"partialFingerprints":{"codehealthFindingId/v1":"e8c454c10d086829589e3296eaa02a5c32ee1ffd89440868b4b40adf43ef5436"}},{"ruleId":"D1","level":"warning","message":{"text":"CrushedPNGUtil.applyRowFilters (cyclomatic 22): CrushedPNGUtil.applyRowFilters has cyclomatic complexity 22 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/ios/png/CrushedPNGUtil.java"},"region":{"startLine":426}}}],"partialFingerprints":{"codehealthFindingId/v1":"8e62d7656ea2a916476937b7a42ca22b7249b5cde49405c4ff0851e32a252adc"}},{"ruleId":"D1","level":"warning","message":{"text":"FuncRecord.\u003Cinit\u003E (cyclomatic 22): FuncRecord.\u003Cinit\u003E has cyclomatic complexity 22 (threshold 15). To reduce it, break up the iteration: give each loop body a named function, and split a multi-phase loop into one function per phase so no single body carries the whole pipeline."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/BytePatterns/src/main/java/ghidra/app/analyzers/FuncRecord.java"},"region":{"startLine":54}}}],"partialFingerprints":{"codehealthFindingId/v1":"d08fa3167b526ef46f5c8182ce0bd3333da4da3a10efe61b15296722806dcd99"}},{"ruleId":"D1","level":"warning","message":{"text":"AbstractSQLFunctionDatabase.doQuery (cyclomatic 22): AbstractSQLFunctionDatabase.doQuery has cyclomatic complexity 22 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/BSim/src/main/java/ghidra/features/bsim/query/client/AbstractSQLFunctionDatabase.java"},"region":{"startLine":1558}}}],"partialFingerprints":{"codehealthFindingId/v1":"611100df1b66ba6806c6a332bcf25b2099a5c1c9253740a6c3c0f3e6d0e48721"}},{"ruleId":"D1","level":"warning","message":{"text":"Z3InfixPrinter.infixHelper (cyclomatic 22): Z3InfixPrinter.infixHelper has cyclomatic complexity 22 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Extensions/SymbolicSummaryZ3/src/main/java/ghidra/pcode/emu/symz3/lib/Z3InfixPrinter.java"},"region":{"startLine":215}}}],"partialFingerprints":{"codehealthFindingId/v1":"280543a2f94e9c76aac88d087db7835cfdf01a11c7215ab35bc26b9f3dc1bf62"}},{"ruleId":"D1","level":"warning","message":{"text":"AbstractConstraintsTree.checkNodeIntegrity (cyclomatic 22): AbstractConstraintsTree.checkNodeIntegrity has cyclomatic complexity 22 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/ProposedUtils/src/main/java/ghidra/util/database/spatial/AbstractConstraintsTree.java"},"region":{"startLine":798}}}],"partialFingerprints":{"codehealthFindingId/v1":"4199f45065dd23aaecdcfe1fae5166f68d4b09f257bc28c5140bc462b1192521"}},{"ruleId":"D1","level":"warning","message":{"text":"DBTraceMemorySpace.doSetState (cyclomatic 22): DBTraceMemorySpace.doSetState has cyclomatic complexity 22 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/memory/DBTraceMemorySpace.java"},"region":{"startLine":228}}}],"partialFingerprints":{"codehealthFindingId/v1":"17d46f05f7075a977f32331cc4ca9db4276c78c55c0fbfbd4bcd44b5d468bf87"}},{"ruleId":"D1","level":"warning","message":{"text":"ArmAnalyzer.flowArmThumb (cyclomatic 21): ArmAnalyzer.flowArmThumb has cyclomatic complexity 21 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Processors/ARM/src/main/java/ghidra/app/plugin/core/analysis/ArmAnalyzer.java"},"region":{"startLine":760}}}],"partialFingerprints":{"codehealthFindingId/v1":"34cb25c3ab5bafb1ffbdc1fb4d43ef7ac4d348fa86f94ef7cdf6436ad9bf7d44"}},{"ruleId":"D1","level":"warning","message":{"text":"SleighInstructionPrototype.getStaticOperandRefType (cyclomatic 21): SleighInstructionPrototype.getStaticOperandRefType has cyclomatic complexity 21 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/processors/sleigh/SleighInstructionPrototype.java"},"region":{"startLine":1212}}}],"partialFingerprints":{"codehealthFindingId/v1":"4a3644b7c67c39e2f217a00ad25da6eacc840876382897fad3777b7b8d1401d7"}},{"ruleId":"D1","level":"warning","message":{"text":"SleighLanguageProvider.read (cyclomatic 21): SleighLanguageProvider.read has cyclomatic complexity 21 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/processors/sleigh/SleighLanguageProvider.java"},"region":{"startLine":175}}}],"partialFingerprints":{"codehealthFindingId/v1":"23fcf2543be8a040be7c75ecc4fd93266913e761b8d6b813fd7f389a1ba1cc82"}},{"ruleId":"D1","level":"warning","message":{"text":"Constructor.buildPattern (cyclomatic 21): Constructor.buildPattern has cyclomatic complexity 21 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghsymbol/Constructor.java"},"region":{"startLine":434}}}],"partialFingerprints":{"codehealthFindingId/v1":"e7132bb27eb2335284b90535dcb85493ff9a97198855c49269407bf8be917355"}},{"ruleId":"D1","level":"warning","message":{"text":"StructureDB.replace (cyclomatic 21): StructureDB.replace has cyclomatic complexity 21 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/StructureDB.java"},"region":{"startLine":1366}}}],"partialFingerprints":{"codehealthFindingId/v1":"3107c76d4ef23b880197825b058dabe461073109369a5c9b3026c99f9600b740"}},{"ruleId":"D1","level":"warning","message":{"text":"DataOrganizationImpl.restoreXml (cyclomatic 21): DataOrganizationImpl.restoreXml has cyclomatic complexity 21 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/DataOrganizationImpl.java"},"region":{"startLine":912}}}],"partialFingerprints":{"codehealthFindingId/v1":"e17280495ef69af86ba220ae4ce4f33b0af1b622d251c5aaaf587023c4a94d57"}},{"ruleId":"D1","level":"warning","message":{"text":"DataOrganizationImpl.save (cyclomatic 21): DataOrganizationImpl.save has cyclomatic complexity 21 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/DataOrganizationImpl.java"},"region":{"startLine":594}}}],"partialFingerprints":{"codehealthFindingId/v1":"7fcae1e83b41c9f3833296676e71499a90591daa5146956da4f397b24fc20df3"}},{"ruleId":"D1","level":"warning","message":{"text":"SimpleLanguageTranslator.getSimpleLanguageTranslator (cyclomatic 21): SimpleLanguageTranslator.getSimpleLanguageTranslator has cyclomatic complexity 21 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/util/SimpleLanguageTranslator.java"},"region":{"startLine":276}}}],"partialFingerprints":{"codehealthFindingId/v1":"72b708192a701fea50ca7c2526983f6e9ee29f3663b8e9265cf180b2ba4946be"}},{"ruleId":"D1","level":"warning","message":{"text":"ApplySymbols.applyTo (cyclomatic 21): ApplySymbols.applyTo has cyclomatic complexity 21 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/PDB/src/main/java/ghidra/app/util/bin/format/pdb/ApplySymbols.java"},"region":{"startLine":46}}}],"partialFingerprints":{"codehealthFindingId/v1":"389b6e711087252d52edf8f7f99d00348bc3f962ff5fc99d92562ec0a9501e40"}},{"ruleId":"D1","level":"warning","message":{"text":"DefaultCompositeMember.addUnionMember (cyclomatic 21): DefaultCompositeMember.addUnionMember has cyclomatic complexity 21 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/PDB/src/main/java/ghidra/app/util/bin/format/pdb/DefaultCompositeMember.java"},"region":{"startLine":1101}}}],"partialFingerprints":{"codehealthFindingId/v1":"fac9d5ffae28b3c50206dcfd65009b0a1fdec77f65309a65a3e7645629ed55e0"}},{"ruleId":"D1","level":"warning","message":{"text":"CppCompositeType.determineBaseSourceOrder (cyclomatic 21): CppCompositeType.determineBaseSourceOrder has cyclomatic complexity 21 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/PDB/src/main/java/ghidra/app/util/pdb/pdbapplicator/CppCompositeType.java"},"region":{"startLine":874}}}],"partialFingerprints":{"codehealthFindingId/v1":"e80fe6c520ae28354fe0e2516ce20d8a5d81a10720438097bc78d899bb35d377"}},{"ruleId":"D1","level":"warning","message":{"text":"CommandProcessor.processCommand (cyclomatic 21): CommandProcessor.processCommand has cyclomatic complexity 21 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/GhidraServer/src/main/java/ghidra/server/CommandProcessor.java"},"region":{"startLine":120}}}],"partialFingerprints":{"codehealthFindingId/v1":"6732cae29696bfc0f15a052fc878b705ad400743a63e1237aa86af00b2fac9c2"}},{"ruleId":"D1","level":"warning","message":{"text":"DexMarkupInstructionsAnalyzer.analyze (cyclomatic 21): DexMarkupInstructionsAnalyzer.analyze has cyclomatic complexity 21 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/android/dex/analyzer/DexMarkupInstructionsAnalyzer.java"},"region":{"startLine":39}}}],"partialFingerprints":{"codehealthFindingId/v1":"ed475133fc72758b26f8868fa22232fc15b32ca76f149280bf6b364071010e2f"}},{"ruleId":"D1","level":"warning","message":{"text":"CartV1File.\u003Cinit\u003E (cyclomatic 21): CartV1File.\u003Cinit\u003E has cyclomatic complexity 21 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/cart/CartV1File.java"},"region":{"startLine":131}}}],"partialFingerprints":{"codehealthFindingId/v1":"616a1a81c0327ca4e5d0cec7d475fda1c2f7508d20fc46abcf5794bcd3e856aa"}},{"ruleId":"D1","level":"warning","message":{"text":"Pinning.buildTokenMap (cyclomatic 21): Pinning.buildTokenMap has cyclomatic complexity 21 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/CodeCompare/src/main/java/ghidra/features/codecompare/graphanalysis/Pinning.java"},"region":{"startLine":726}}}],"partialFingerprints":{"codehealthFindingId/v1":"5f87a2c04193e03a4c1b584050c2d1c531a3790b0923bce66e623f728ee3cdeb"}},{"ruleId":"D1","level":"warning","message":{"text":"ExeTable.queryAllExe (cyclomatic 21): ExeTable.queryAllExe has cyclomatic complexity 21 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/BSim/src/main/java/ghidra/features/bsim/query/client/tables/ExeTable.java"},"region":{"startLine":457}}}],"partialFingerprints":{"codehealthFindingId/v1":"c1564cfef6f31f0a5b78a89c2c0826ef0fe4b493a0e67fa656e0cf6fdc42a42a"}},{"ruleId":"D1","level":"warning","message":{"text":"BSimLaunchable.run (cyclomatic 21): BSimLaunchable.run has cyclomatic complexity 21 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/BSim/src/main/java/ghidra/features/bsim/query/ingest/BSimLaunchable.java"},"region":{"startLine":392}}}],"partialFingerprints":{"codehealthFindingId/v1":"262d3c2a4739bd7f783bf153be1388d0b06b3aa8ef5ed38c294f0cf4902d0750"}},{"ruleId":"D1","level":"warning","message":{"text":"PcodeSign.assumeBinaryExpression (cyclomatic 21): PcodeSign.assumeBinaryExpression has cyclomatic complexity 21 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Extensions/Lisa/src/main/java/ghidra/lisa/pcode/analyses/PcodeSign.java"},"region":{"startLine":440}}}],"partialFingerprints":{"codehealthFindingId/v1":"f26fa0e5d078758a2cb4d77fbb07ed89eee7471bbc004d39ce2268069ad4b81a"}},{"ruleId":"D1","level":"warning","message":{"text":"PcodeInferredTypes.satisfiesBinaryExpression (cyclomatic 21): PcodeInferredTypes.satisfiesBinaryExpression has cyclomatic complexity 21 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Extensions/Lisa/src/main/java/ghidra/lisa/pcode/types/PcodeInferredTypes.java"},"region":{"startLine":241}}}],"partialFingerprints":{"codehealthFindingId/v1":"7bd83a7b95e3106eecc43b64d238512be37d5a7ffdd95fe2673fb7e5ddde08f6"}},{"ruleId":"D1","level":"warning","message":{"text":"TraceBreakpointKindSet.decode (cyclomatic 21): TraceBreakpointKindSet.decode has cyclomatic complexity 21 (threshold 15). To reduce it, separate the branches: extract each independent case into its own named function so the top-level body reads as a short sequence of named decisions."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/model/breakpoint/TraceBreakpointKind.java"},"region":{"startLine":66}}}],"partialFingerprints":{"codehealthFindingId/v1":"e05814b7ac5a1fdc3a5404f1990f97afa9b7dc39b2d44e2b5f91767549899269"}},{"ruleId":"D1","level":"warning","message":{"text":"GhidraProjectUtils.linkGhidraToProject (cyclomatic 20): GhidraProjectUtils.linkGhidraToProject has cyclomatic complexity 20 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"GhidraBuild/EclipsePlugins/GhidraDev/GhidraDevPlugin/src/main/java/ghidradev/ghidraprojectcreator/utils/GhidraProjectUtils.java"},"region":{"startLine":375}}}],"partialFingerprints":{"codehealthFindingId/v1":"302dd57686f687040ce7a7d7e5e42b23f76dd5dbb0dd94cd4773446eda3fe6d1"}},{"ruleId":"D1","level":"warning","message":{"text":"Pic12Analyzer.markupFRegInstruction (cyclomatic 20): Pic12Analyzer.markupFRegInstruction has cyclomatic complexity 20 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Processors/PIC/src/main/java/ghidra/app/plugin/core/analysis/Pic12Analyzer.java"},"region":{"startLine":294}}}],"partialFingerprints":{"codehealthFindingId/v1":"9d1418ae3e4069a2c6a9a7d5fca1538e97c777510a2b8660218f3eb1d3f9897e"}},{"ruleId":"D1","level":"warning","message":{"text":"Pic17c7xxAnalyzer.checkRegisterAccess (cyclomatic 20): Pic17c7xxAnalyzer.checkRegisterAccess has cyclomatic complexity 20 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Processors/PIC/src/main/java/ghidra/app/plugin/core/analysis/Pic17c7xxAnalyzer.java"},"region":{"startLine":742}}}],"partialFingerprints":{"codehealthFindingId/v1":"4a419ffeaa93584b14be6c0ad1df5d058cf230a6f86bf58e414d86d4d6b2b531"}},{"ruleId":"D1","level":"warning","message":{"text":"Pic18Analyzer.markupFRegInstruction (cyclomatic 20): Pic18Analyzer.markupFRegInstruction has cyclomatic complexity 20 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Processors/PIC/src/main/java/ghidra/app/plugin/core/analysis/Pic18Analyzer.java"},"region":{"startLine":508}}}],"partialFingerprints":{"codehealthFindingId/v1":"22efbab0b6836f2b52f8e529557d0e6c986136643ab1734aaa0fd5f3f3eb2ad5"}},{"ruleId":"D1","level":"warning","message":{"text":"1.evaluateContext (cyclomatic 20): 1.evaluateContext has cyclomatic complexity 20 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Processors/MIPS/src/main/java/ghidra/app/plugin/core/analysis/MipsAddressAnalyzer.java"},"region":{"startLine":268}}}],"partialFingerprints":{"codehealthFindingId/v1":"dc3ea1563384de3b387f19e0a39c6ac0da24d06e2a97679ed1e1bef529088558"}},{"ruleId":"D1","level":"warning","message":{"text":"AVR32_ElfRelocationHandler.relocate (cyclomatic 20): AVR32_ElfRelocationHandler.relocate has cyclomatic complexity 20 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Processors/Atmel/src/main/java/ghidra/app/util/bin/format/elf/relocation/AVR32_ElfRelocationHandler.java"},"region":{"startLine":47}}}],"partialFingerprints":{"codehealthFindingId/v1":"6b2a3295e921950bd41fb850faf33ebd3bcbf4e9b1d78cb4f56b24f3121b78e8"}},{"ruleId":"D1","level":"warning","message":{"text":"LanguageFixupUtil.applyPSpecFixups (cyclomatic 20): LanguageFixupUtil.applyPSpecFixups has cyclomatic complexity 20 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/processors/generic/LanguageFixupUtil.java"},"region":{"startLine":48}}}],"partialFingerprints":{"codehealthFindingId/v1":"578d5f272b6dc514b4922d8036359002f5b9e5a5f3e79ef76e90f0590cd03c55"}},{"ruleId":"D1","level":"warning","message":{"text":"ConsistencyChecker.readWriteInterference (cyclomatic 20): ConsistencyChecker.readWriteInterference has cyclomatic complexity 20 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slgh_compile/ConsistencyChecker.java"},"region":{"startLine":1034}}}],"partialFingerprints":{"codehealthFindingId/v1":"c432f2ef1a2a0a62b630e8ac6a0e1c6747fdd7a4b0ca95f41ad45c3689c9ee93"}},{"ruleId":"D1","level":"warning","message":{"text":"PcodeCompile.isInternalFunction (cyclomatic 20): PcodeCompile.isInternalFunction has cyclomatic complexity 20 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slgh_compile/PcodeCompile.java"},"region":{"startLine":1024}}}],"partialFingerprints":{"codehealthFindingId/v1":"5f363af5b57f93df2f0d078b30524829ba4a164457d59b676b07ed7913df5167"}},{"ruleId":"D1","level":"warning","message":{"text":"StructureDB.insertBitFieldAt (cyclomatic 20): StructureDB.insertBitFieldAt has cyclomatic complexity 20 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/StructureDB.java"},"region":{"startLine":423}}}],"partialFingerprints":{"codehealthFindingId/v1":"9fd74a74b76cb77aec11a25c8f49953b3189eafca94f8cea285706ef7d090c5b"}},{"ruleId":"D1","level":"warning","message":{"text":"AddressMapDB.decode (cyclomatic 20): AddressMapDB.decode has cyclomatic complexity 20 (threshold 15). To reduce it, separate the branches: extract each independent case into its own named function so the top-level body reads as a short sequence of named decisions."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/map/AddressMapDB.java"},"region":{"startLine":538}}}],"partialFingerprints":{"codehealthFindingId/v1":"7f4dff3d702cba5c13ddcd168d35481bd33fd8a12eb4cfc4e56738c1bd5be8f6"}},{"ruleId":"D1","level":"warning","message":{"text":"ReferenceDBManager.combineReferenceType (cyclomatic 20): ReferenceDBManager.combineReferenceType has cyclomatic complexity 20 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/references/ReferenceDBManager.java"},"region":{"startLine":306}}}],"partialFingerprints":{"codehealthFindingId/v1":"31cbbd9df03a151247d1d6ee33d4fdab04dd403c56f6873dc95a6688391c7d04"}},{"ruleId":"D1","level":"warning","message":{"text":"Block.calcHashes (cyclomatic 20): Block.calcHashes has cyclomatic complexity 20 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/correlate/Block.java"},"region":{"startLine":115}}}],"partialFingerprints":{"codehealthFindingId/v1":"b4938ee3a71a02bfde28769c063f89310dd18d0c8647b456ffbd7d027b22000c"}},{"ruleId":"D1","level":"warning","message":{"text":"StructureDataType.insertBitFieldAt (cyclomatic 20): StructureDataType.insertBitFieldAt has cyclomatic complexity 20 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/StructureDataType.java"},"region":{"startLine":805}}}],"partialFingerprints":{"codehealthFindingId/v1":"49bc747cfc2515fc9ca281eda0b7f642595f838a3b2dea3d47966354a0990a47"}},{"ruleId":"D1","level":"warning","message":{"text":"StructureDataType.replace (cyclomatic 20): StructureDataType.replace has cyclomatic complexity 20 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/StructureDataType.java"},"region":{"startLine":1514}}}],"partialFingerprints":{"codehealthFindingId/v1":"ccb5d16baba7240f977e1be743852c576739078d897b5e5d31ad74c676190493"}},{"ruleId":"D1","level":"warning","message":{"text":"GhidraFileData.merge (cyclomatic 20): GhidraFileData.merge has cyclomatic complexity 20 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Project/src/main/java/ghidra/framework/data/GhidraFileData.java"},"region":{"startLine":2071}}}],"partialFingerprints":{"codehealthFindingId/v1":"19e436a5f80c7f97d786a536c1ea4efbeb8005371b897056432042e9dd271dad"}},{"ruleId":"D1","level":"warning","message":{"text":"GHelpBuilder.parseArguments (cyclomatic 20): GHelpBuilder.parseArguments has cyclomatic complexity 20 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Help/src/main/java/help/GHelpBuilder.java"},"region":{"startLine":279}}}],"partialFingerprints":{"codehealthFindingId/v1":"b9e1236653b719b1ce2603ca2b3895eb5e0850079bcfea3bbade0a35a28b3439"}},{"ruleId":"D1","level":"warning","message":{"text":"JSONParser.parsePrimitive (cyclomatic 20): JSONParser.parsePrimitive has cyclomatic complexity 20 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Generic/src/main/java/generic/json/JSONParser.java"},"region":{"startLine":87}}}],"partialFingerprints":{"codehealthFindingId/v1":"ca0f87dab8fd6fa99dbf26192c6c20098b4f7658d4ddd0194b5f1d0e451c0c9e"}},{"ruleId":"D1","level":"warning","message":{"text":"MyListener.keyPressed (cyclomatic 20): MyListener.keyPressed has cyclomatic complexity 20 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Docking/src/main/java/docking/widgets/autocomplete/TextComponentAutocompleter.java"},"region":{"startLine":921}}}],"partialFingerprints":{"codehealthFindingId/v1":"fe45cd58b136e088d635d0806e0f2b978e8115f34340163a190ad61e893faa3a"}},{"ruleId":"D1","level":"warning","message":{"text":"BSimProgramCorrelatorMatching.doMatching (cyclomatic 20): BSimProgramCorrelatorMatching.doMatching has cyclomatic complexity 20 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/VersionTrackingBSim/src/main/java/ghidra/feature/vt/api/BSimProgramCorrelatorMatching.java"},"region":{"startLine":450}}}],"partialFingerprints":{"codehealthFindingId/v1":"6876a096c8da8bd413b3a6562b568e9c5e091f6a3f1363da0ac0ad8aa67c0ba2"}},{"ruleId":"D1","level":"warning","message":{"text":"PropertyUtils.methodFilter (cyclomatic 20): PropertyUtils.methodFilter has cyclomatic complexity 20 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/PyGhidra/src/main/java/ghidra/pyghidra/property/PropertyUtils.java"},"region":{"startLine":149}}}],"partialFingerprints":{"codehealthFindingId/v1":"809dfb76117187218f1943d5f348265fd1a46c895227dd4b92e0f4ab9daf87d0"}},{"ruleId":"D1","level":"warning","message":{"text":"ExtraFrameAndProcedureInformationMsSymbol.emit (cyclomatic 20): ExtraFrameAndProcedureInformationMsSymbol.emit has cyclomatic complexity 20 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/PDB/src/main/java/ghidra/app/util/bin/format/pdb2/pdbreader/symbol/ExtraFrameAndProcedureInformationMsSymbol.java"},"region":{"startLine":323}}}],"partialFingerprints":{"codehealthFindingId/v1":"b086c3bc271fcae5335b8d60b0b340e17caf701c94cba5d004fc659b9c0aa286"}},{"ruleId":"D1","level":"warning","message":{"text":"MDArgumentsList.parseInternal (cyclomatic 20): MDArgumentsList.parseInternal has cyclomatic complexity 20 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/MicrosoftDmang/src/main/java/mdemangler/functiontype/MDArgumentsList.java"},"region":{"startLine":46}}}],"partialFingerprints":{"codehealthFindingId/v1":"fcfc2b06b9ee9120a22be328efecaa9dc35199e2bcf1379c7df14c4164f3de0b"}},{"ruleId":"D1","level":"warning","message":{"text":"GnuDemanglerParser.findNamespaceStart (cyclomatic 20): GnuDemanglerParser.findNamespaceStart has cyclomatic complexity 20 (threshold 15). To reduce it, separate the branches: extract each independent case into its own named function so the top-level body reads as a short sequence of named decisions."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/GnuDemangler/src/main/java/ghidra/app/util/demangler/gnu/GnuDemanglerParser.java"},"region":{"startLine":1304}}}],"partialFingerprints":{"codehealthFindingId/v1":"36cc0618f57c2cb44c0fd2ebe404e4c9e54344e4ef11f4c9dccd8bc7e4b131ad"}},{"ruleId":"D1","level":"warning","message":{"text":"PagedumpFileHeader.toDataType (cyclomatic 20): PagedumpFileHeader.toDataType has cyclomatic complexity 20 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/dump/pagedump/PagedumpFileHeader.java"},"region":{"startLine":264}}}],"partialFingerprints":{"codehealthFindingId/v1":"be645eb81fab32dfee4209f328beb4afbf7cfb9f2e4903c0dc274a23e273ced4"}},{"ruleId":"D1","level":"warning","message":{"text":"DataTypeDependencyOrderer.createAcyclicDependencyLists (cyclomatic 20): DataTypeDependencyOrderer.createAcyclicDependencyLists has cyclomatic complexity 20 (threshold 15). To reduce it, break up the iteration: give each loop body a named function, and split a multi-phase loop into one function per phase so no single body carries the whole pipeline."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/Decompiler/src/main/java/ghidra/app/util/DataTypeDependencyOrderer.java"},"region":{"startLine":238}}}],"partialFingerprints":{"codehealthFindingId/v1":"404cc6b8aea69193ea7cae9d64ac839df25f39f408495d7a14d06548807c4d95"}},{"ruleId":"D1","level":"warning","message":{"text":"ExeTable.queryExeCount (cyclomatic 20): ExeTable.queryExeCount has cyclomatic complexity 20 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/BSim/src/main/java/ghidra/features/bsim/query/client/tables/ExeTable.java"},"region":{"startLine":358}}}],"partialFingerprints":{"codehealthFindingId/v1":"001654d29b3c5c7cab5ec71e8bc8bcef7f6656c541c6f0903509040de7943e34"}},{"ruleId":"D1","level":"warning","message":{"text":"ValueLifespanSetter.valuesEqual (cyclomatic 20): ValueLifespanSetter.valuesEqual has cyclomatic complexity 20 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/target/DBTraceObjectValue.java"},"region":{"startLine":66}}}],"partialFingerprints":{"codehealthFindingId/v1":"3b04999fd02f197951500a9f836ae8188c205d02246e4bbc5935a2d05099f558"}},{"ruleId":"D1","level":"warning","message":{"text":"RmiClient.buildValue (cyclomatic 20): RmiClient.buildValue has cyclomatic complexity 20 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/Debugger-rmi-trace/src/main/java/ghidra/app/plugin/core/debug/client/tracermi/RmiClient.java"},"region":{"startLine":491}}}],"partialFingerprints":{"codehealthFindingId/v1":"4b11176ede7536e82deac59c5bf53ff3e5768c2bcc7fb6e714ded699765cb764"}},{"ruleId":"D1","level":"warning","message":{"text":"AppConfig.getSaveFile (cyclomatic 19): AppConfig.getSaveFile has cyclomatic complexity 19 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"GhidraBuild/LaunchSupport/src/main/java/ghidra/launch/AppConfig.java"},"region":{"startLine":392}}}],"partialFingerprints":{"codehealthFindingId/v1":"d00faae499fb31901f2f345522d07d78b2141ceff5989506b2195935da6058b0"}},{"ruleId":"D1","level":"warning","message":{"text":"CreateGhidraProjectWizardPage.validate (cyclomatic 19): CreateGhidraProjectWizardPage.validate has cyclomatic complexity 19 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"GhidraBuild/EclipsePlugins/GhidraDev/GhidraDevPlugin/src/main/java/ghidradev/ghidraprojectcreator/wizards/pages/CreateGhidraProjectWizardPage.java"},"region":{"startLine":206}}}],"partialFingerprints":{"codehealthFindingId/v1":"864eb8682c63cbab1d5a7595f1f1faf9f8a87cba5e4e4ce83d0d61e504be5687"}},{"ruleId":"D1","level":"warning","message":{"text":"Pic12Analyzer.handleStatusModification (cyclomatic 19): Pic12Analyzer.handleStatusModification has cyclomatic complexity 19 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Processors/PIC/src/main/java/ghidra/app/plugin/core/analysis/Pic12Analyzer.java"},"region":{"startLine":523}}}],"partialFingerprints":{"codehealthFindingId/v1":"454dd96ef9279e681c2e31b03bc41bcc01d770e94e2f742a650f20ec151ab4d4"}},{"ruleId":"D1","level":"warning","message":{"text":"Pic17c7xxAnalyzer.handleWRegModification (cyclomatic 19): Pic17c7xxAnalyzer.handleWRegModification has cyclomatic complexity 19 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Processors/PIC/src/main/java/ghidra/app/plugin/core/analysis/Pic17c7xxAnalyzer.java"},"region":{"startLine":689}}}],"partialFingerprints":{"codehealthFindingId/v1":"3e800f03770d3c9f24a40d5d09f46a9f26000b96d2482774db4b5ac88749b738"}},{"ruleId":"D1","level":"warning","message":{"text":"HexagonUnsupportSemanticAnalyzer.added (cyclomatic 19): HexagonUnsupportSemanticAnalyzer.added has cyclomatic complexity 19 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Processors/Hexagon/src/main/java/ghidra/app/plugin/core/analysis/HexagonUnsupportSemanticAnalyzer.java"},"region":{"startLine":107}}}],"partialFingerprints":{"codehealthFindingId/v1":"9b3966ad13913418d0c7168b1e8c79633ff2b84e48a7f9b3741ece8864a924f6"}},{"ruleId":"D1","level":"warning","message":{"text":"PatternExpression.decodeExpression (cyclomatic 19): PatternExpression.decodeExpression has cyclomatic complexity 19 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/processors/sleigh/expression/PatternExpression.java"},"region":{"startLine":38}}}],"partialFingerprints":{"codehealthFindingId/v1":"48b49b1e5b8e5b91d9873273954460aa765e60472d60bf7bd4b554b19876084f"}},{"ruleId":"D1","level":"warning","message":{"text":"SleighCompile.finalizeSections (cyclomatic 19): SleighCompile.finalizeSections has cyclomatic complexity 19 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slgh_compile/SleighCompile.java"},"region":{"startLine":1516}}}],"partialFingerprints":{"codehealthFindingId/v1":"65b89288723aee04bae4a285ac7b300dcc5383a26001b83870fbdbbe73f572be"}},{"ruleId":"D1","level":"warning","message":{"text":"CodeManager.checkInstructionSet (cyclomatic 19): CodeManager.checkInstructionSet has cyclomatic complexity 19 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/code/CodeManager.java"},"region":{"startLine":301}}}],"partialFingerprints":{"codehealthFindingId/v1":"a21a410b6d91135a83c9d41e0707854f5a16d8173c77c1ffffe0123df25415b3"}},{"ruleId":"D1","level":"warning","message":{"text":"StructureDB.delete (cyclomatic 19): StructureDB.delete has cyclomatic complexity 19 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/StructureDB.java"},"region":{"startLine":614}}}],"partialFingerprints":{"codehealthFindingId/v1":"74c30332e45b31d29cf13d4ba798fcc7d3a6c1f712c34c50da66f1e3f1cdbc5c"}},{"ruleId":"D1","level":"warning","message":{"text":"SpecExtension.parseExtension (cyclomatic 19): SpecExtension.parseExtension has cyclomatic complexity 19 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/SpecExtension.java"},"region":{"startLine":427}}}],"partialFingerprints":{"codehealthFindingId/v1":"e1e370081af6d7f5b4b9d3d9eca4a600f7df5121fcb1cc6b72edcb53db628596"}},{"ruleId":"D1","level":"warning","message":{"text":"HighFunctionDBUtil.writeUnionFacet (cyclomatic 19): HighFunctionDBUtil.writeUnionFacet has cyclomatic complexity 19 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/pcode/HighFunctionDBUtil.java"},"region":{"startLine":893}}}],"partialFingerprints":{"codehealthFindingId/v1":"e9a49a1f044451c25162580aca2bf21c576223f99a4c8f7ace1fdea20485d4ac"}},{"ruleId":"D1","level":"warning","message":{"text":"PcodeDataTypeManager.encodePointer (cyclomatic 19): PcodeDataTypeManager.encodePointer has cyclomatic complexity 19 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/pcode/PcodeDataTypeManager.java"},"region":{"startLine":371}}}],"partialFingerprints":{"codehealthFindingId/v1":"4e0368916b912d248b6f1fba8dcfabcf8f4edce28773f61d43347119ea010cd4"}},{"ruleId":"D1","level":"warning","message":{"text":"IllegalCharCppTransformer.simplify (cyclomatic 19): IllegalCharCppTransformer.simplify has cyclomatic complexity 19 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/symbol/IllegalCharCppTransformer.java"},"region":{"startLine":70}}}],"partialFingerprints":{"codehealthFindingId/v1":"308cd5c6cead27fac73565e6eafa7b96c62b62118c0ceb61cf8603e84d284c84"}},{"ruleId":"D1","level":"warning","message":{"text":"GhidraFolderData.refreshFolders (cyclomatic 19): GhidraFolderData.refreshFolders has cyclomatic complexity 19 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Project/src/main/java/ghidra/framework/data/GhidraFolderData.java"},"region":{"startLine":567}}}],"partialFingerprints":{"codehealthFindingId/v1":"cbbffebf41713754725ac074262025f8dc638de799d19329da28c59f27022062"}},{"ruleId":"D1","level":"warning","message":{"text":"TOCItem.equals (cyclomatic 19): TOCItem.equals has cyclomatic complexity 19 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Help/src/main/java/help/validator/model/TOCItem.java"},"region":{"startLine":160}}}],"partialFingerprints":{"codehealthFindingId/v1":"aafe238939724e8726f03e5c074de736e99fa0a55540567aae378dd6cf0d895e"}},{"ruleId":"D1","level":"warning","message":{"text":"LayoutColorMapFactory.getLayoutColorMap (cyclomatic 19): LayoutColorMapFactory.getLayoutColorMap has cyclomatic complexity 19 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Docking/src/main/java/docking/widgets/fieldpanel/internal/LayoutColorMapFactory.java"},"region":{"startLine":27}}}],"partialFingerprints":{"codehealthFindingId/v1":"a1626ed2a720aef2402d7ae4a12acae6333b04ab7040f8b2840712c436fb99b1"}},{"ruleId":"D1","level":"warning","message":{"text":"Table.isConsistent (cyclomatic 19): Table.isConsistent has cyclomatic complexity 19 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/DB/src/main/java/db/Table.java"},"region":{"startLine":376}}}],"partialFingerprints":{"codehealthFindingId/v1":"361616798d8a56e9a16c35007a152b52178e307007c6d5bee6168817d432e25d"}},{"ruleId":"D1","level":"warning","message":{"text":"FieldKeyRecordIterator.\u003Cinit\u003E (cyclomatic 19): FieldKeyRecordIterator.\u003Cinit\u003E has cyclomatic complexity 19 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/DB/src/main/java/db/Table.java"},"region":{"startLine":2360}}}],"partialFingerprints":{"codehealthFindingId/v1":"c8788aaef09060d185e2d3557b4203c9a5b92009f17b0e1ea80813c3485be151"}},{"ruleId":"D1","level":"warning","message":{"text":"FunctionSignatureStringable.tryToSetNames (cyclomatic 19): FunctionSignatureStringable.tryToSetNames has cyclomatic complexity 19 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/VersionTracking/src/main/java/ghidra/feature/vt/api/stringable/FunctionSignatureStringable.java"},"region":{"startLine":1106}}}],"partialFingerprints":{"codehealthFindingId/v1":"5df6bc422393ace79f838f73260e3ae84c5fc630ef1f3d04b28eb3a4454287fb"}},{"ruleId":"D1","level":"warning","message":{"text":"PdbParser.verifyPdbSignature (cyclomatic 19): PdbParser.verifyPdbSignature has cyclomatic complexity 19 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/PDB/src/main/java/ghidra/app/util/bin/format/pdb/PdbParser.java"},"region":{"startLine":591}}}],"partialFingerprints":{"codehealthFindingId/v1":"b34f7423bac1b71e48cd401b85851fb39b27de685ddbb30e9557c884890a0475"}},{"ruleId":"D1","level":"warning","message":{"text":"ObjcMessageAnalyzer.getNameForVarnode (cyclomatic 19): ObjcMessageAnalyzer.getNameForVarnode has cyclomatic complexity 19 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/Objective-C/src/main/java/ghidra/app/plugin/core/analysis/ObjcMessageAnalyzer.java"},"region":{"startLine":586}}}],"partialFingerprints":{"codehealthFindingId/v1":"5b68e0030321024eb8181b83dc333cddb9cc32479e7d27f369f9c6f1a50c91a1"}},{"ruleId":"D1","level":"warning","message":{"text":"ExeTable.updateExecutable (cyclomatic 19): ExeTable.updateExecutable has cyclomatic complexity 19 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/BSim/src/main/java/ghidra/features/bsim/query/client/tables/ExeTable.java"},"region":{"startLine":599}}}],"partialFingerprints":{"codehealthFindingId/v1":"bfdb2b89bd67a7c728783f0b2da582462ede86b09124ce4195fb23035124bb99"}},{"ruleId":"D1","level":"warning","message":{"text":"LisaTaintState.processSimpleState (cyclomatic 19): LisaTaintState.processSimpleState has cyclomatic complexity 19 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Extensions/Lisa/src/main/java/ghidra/lisa/gui/LisaTaintState.java"},"region":{"startLine":325}}}],"partialFingerprints":{"codehealthFindingId/v1":"4926ea7b299c67ed6c2be7c249f36062a4e94b62b1ab874a7bd13f2bf2308c43"}},{"ruleId":"D1","level":"warning","message":{"text":"DebuggerModulesProvider.activatedSelectCurrent (cyclomatic 19): DebuggerModulesProvider.activatedSelectCurrent has cyclomatic complexity 19 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/gui/modules/DebuggerModulesProvider.java"},"region":{"startLine":1057}}}],"partialFingerprints":{"codehealthFindingId/v1":"3de5257a38dec7fa1d8d7ddd57ee7d5975b9cd4200f51470bdae78efe420d913"}},{"ruleId":"D1","level":"warning","message":{"text":"VmState.recordState (cyclomatic 19): VmState.recordState has cyclomatic complexity 19 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/Debugger-jpda/src/main/java/ghidra/dbg/jdi/rmi/jpda/JdiHooks.java"},"region":{"startLine":69}}}],"partialFingerprints":{"codehealthFindingId/v1":"3f8821ceedc91f98bd2f3b089a6e49d82ed779578771b1ff98aae5d433789a38"}},{"ruleId":"D1","level":"warning","message":{"text":"GhidraModuleUtils.configureModuleSource (cyclomatic 18): GhidraModuleUtils.configureModuleSource has cyclomatic complexity 18 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"GhidraBuild/EclipsePlugins/GhidraDev/GhidraDevPlugin/src/main/java/ghidradev/ghidraprojectcreator/utils/GhidraModuleUtils.java"},"region":{"startLine":133}}}],"partialFingerprints":{"codehealthFindingId/v1":"48f96537293ce1d66cc9441fc749466c368eb4497251cd45afa4fbef87923771"}},{"ruleId":"D1","level":"warning","message":{"text":"Pic12Analyzer.handleFSRModification (cyclomatic 18): Pic12Analyzer.handleFSRModification has cyclomatic complexity 18 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Processors/PIC/src/main/java/ghidra/app/plugin/core/analysis/Pic12Analyzer.java"},"region":{"startLine":587}}}],"partialFingerprints":{"codehealthFindingId/v1":"e50994074be5c55e577bb15bef3bc64a06ce58c475c09943f619fb7156301e35"}},{"ruleId":"D1","level":"warning","message":{"text":"ClassifyFloatOpBehavior.evaluate (cyclomatic 18): ClassifyFloatOpBehavior.evaluate has cyclomatic complexity 18 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Processors/Hexagon/src/main/java/ghidra/program/emulation/HexagonEmulateInstructionStateModifier.java"},"region":{"startLine":67}}}],"partialFingerprints":{"codehealthFindingId/v1":"15ff9bf4cc95a5026333488a05aeaec088ef472792991d0380748b9799822897"}},{"ruleId":"D1","level":"warning","message":{"text":"HexagonFp64.dfmpyhh (cyclomatic 18): HexagonFp64.dfmpyhh has cyclomatic complexity 18 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Processors/Hexagon/src/main/java/ghidra/program/emulation/HexagonFp64.java"},"region":{"startLine":101}}}],"partialFingerprints":{"codehealthFindingId/v1":"5606358ada22c46ba0c71cd7066ed421391775b7177981aafcd8b9ce63598eb5"}},{"ruleId":"D1","level":"warning","message":{"text":"SIMD_COPY.evaluate (cyclomatic 18): SIMD_COPY.evaluate has cyclomatic complexity 18 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Processors/AARCH64/src/main/java/ghidra/program/emulation/AARCH64EmulateInstructionStateModifier.java"},"region":{"startLine":876}}}],"partialFingerprints":{"codehealthFindingId/v1":"4f10d42fe02a3e19958f7c4bb4fe70e03e409c7829afc0fe098627663e853ea8"}},{"ruleId":"D1","level":"warning","message":{"text":"1SwitchEvaluator.evaluateReference (cyclomatic 18): 1SwitchEvaluator.evaluateReference has cyclomatic complexity 18 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Processors/68000/src/main/java/ghidra/app/plugin/core/analysis/Motorola68KAnalyzer.java"},"region":{"startLine":243}}}],"partialFingerprints":{"codehealthFindingId/v1":"004369d42a777b07c7135be5a33b4927d3937b6cf49152f541f36bc8b259037c"}},{"ruleId":"D1","level":"warning","message":{"text":"ConstructorPcodeTemplate.optimize (cyclomatic 18): ConstructorPcodeTemplate.optimize has cyclomatic complexity 18 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/processors/generic/ConstructorPcodeTemplate.java"},"region":{"startLine":72}}}],"partialFingerprints":{"codehealthFindingId/v1":"9b6a58e4469fdf85beae432317a6490fa0c98aa25708a6028bd2f78d762831b2"}},{"ruleId":"D1","level":"warning","message":{"text":"SleighLanguage.loadIndex (cyclomatic 18): SleighLanguage.loadIndex has cyclomatic complexity 18 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/processors/sleigh/SleighLanguage.java"},"region":{"startLine":1272}}}],"partialFingerprints":{"codehealthFindingId/v1":"1ac508888b63e3bdc1e228b7dc1ec7ab212ab260e52e8951587960a58ab72ddf"}},{"ruleId":"D1","level":"warning","message":{"text":"DecisionNode.orderPatterns (cyclomatic 18): DecisionNode.orderPatterns has cyclomatic complexity 18 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghsymbol/DecisionNode.java"},"region":{"startLine":281}}}],"partialFingerprints":{"codehealthFindingId/v1":"f85c9428df964510b6fa0c99363d78fb72945879012d87fa2c496c7773a1e3e1"}},{"ruleId":"D1","level":"warning","message":{"text":"SymbolTable.purge (cyclomatic 18): SymbolTable.purge has cyclomatic complexity 18 (threshold 15). To reduce it, separate the branches: extract each independent case into its own named function so the top-level body reads as a short sequence of named decisions."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghsymbol/SymbolTable.java"},"region":{"startLine":215}}}],"partialFingerprints":{"codehealthFindingId/v1":"7eb39a5786138fde88b73919ff1ade6ef30a466d9ae12d32bf901c378b5a642c"}},{"ruleId":"D1","level":"warning","message":{"text":"ArrayDB.dataTypeReplaced (cyclomatic 18): ArrayDB.dataTypeReplaced has cyclomatic complexity 18 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/ArrayDB.java"},"region":{"startLine":256}}}],"partialFingerprints":{"codehealthFindingId/v1":"f21b836c561f25e4a0880fa2907a6c658ffe60c717d3c4470be39e3e09df23c0"}},{"ruleId":"D1","level":"warning","message":{"text":"DataTypeManagerDB.initializeAdapters (cyclomatic 18): DataTypeManagerDB.initializeAdapters has cyclomatic complexity 18 (threshold 15). To reduce it, separate the branches: extract each independent case into its own named function so the top-level body reads as a short sequence of named decisions."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/DataTypeManagerDB.java"},"region":{"startLine":421}}}],"partialFingerprints":{"codehealthFindingId/v1":"eb38d320a8088999565218d5dddbbdeb56e135b08d0c3d3ebcd5fc966da80396"}},{"ruleId":"D1","level":"warning","message":{"text":"StructureDB.replaceComponents (cyclomatic 18): StructureDB.replaceComponents has cyclomatic complexity 18 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/StructureDB.java"},"region":{"startLine":2148}}}],"partialFingerprints":{"codehealthFindingId/v1":"5baa15e0acb017171ba65cde7cf75645ba223a1d85e5d08602146f9dc076bc27"}},{"ruleId":"D1","level":"warning","message":{"text":"ExternalManagerDB.addExtLocation (cyclomatic 18): ExternalManagerDB.addExtLocation has cyclomatic complexity 18 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/external/ExternalManagerDB.java"},"region":{"startLine":264}}}],"partialFingerprints":{"codehealthFindingId/v1":"93ecc47a5a59167081c70bc8116598caeb259b06d8221ee9092e11a90d1f5f78"}},{"ruleId":"D1","level":"warning","message":{"text":"AddressMapDB.encodeAbsolute (cyclomatic 18): AddressMapDB.encodeAbsolute has cyclomatic complexity 18 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/map/AddressMapDB.java"},"region":{"startLine":346}}}],"partialFingerprints":{"codehealthFindingId/v1":"f168ddc56d5764400716376407a9669882afecf1023562495f4e196e188f0ef0"}},{"ruleId":"D1","level":"warning","message":{"text":"MemoryMapDB.match (cyclomatic 18): MemoryMapDB.match has cyclomatic complexity 18 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/mem/MemoryMapDB.java"},"region":{"startLine":1177}}}],"partialFingerprints":{"codehealthFindingId/v1":"7dcf6529e931d51f4f0f3b5ed15c851583ec28afe8950938911a5eaa50044251"}},{"ruleId":"D1","level":"warning","message":{"text":"DBPropertyMapManager.loadPropertyMaps (cyclomatic 18): DBPropertyMapManager.loadPropertyMaps has cyclomatic complexity 18 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/properties/DBPropertyMapManager.java"},"region":{"startLine":142}}}],"partialFingerprints":{"codehealthFindingId/v1":"bb76cff4f710be84e8573fb8956000b86bef841d45c0342c2b896953adad3f42"}},{"ruleId":"D1","level":"warning","message":{"text":"ReferenceDBManager.addRef (cyclomatic 18): ReferenceDBManager.addRef has cyclomatic complexity 18 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/references/ReferenceDBManager.java"},"region":{"startLine":351}}}],"partialFingerprints":{"codehealthFindingId/v1":"f62e6c81a43f3d6910a37d1d0c6563ac8e994588d52601d847ab9f3cf353dba0"}},{"ruleId":"D1","level":"warning","message":{"text":"ProgramDB.\u003Cinit\u003E (cyclomatic 18): ProgramDB.\u003Cinit\u003E has cyclomatic complexity 18 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/ProgramDB.java"},"region":{"startLine":316}}}],"partialFingerprints":{"codehealthFindingId/v1":"7ce74d75e2abfdbf58b9e32313a54ff882a73a905b454e03eba36b0363462130"}},{"ruleId":"D1","level":"warning","message":{"text":"SimpleBlockModel.getCodeBlockAt (cyclomatic 18): SimpleBlockModel.getCodeBlockAt has cyclomatic complexity 18 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/block/SimpleBlockModel.java"},"region":{"startLine":158}}}],"partialFingerprints":{"codehealthFindingId/v1":"dc5d8de15f78925955d57657f318e2a14a90aa5f24ebff4981490502dfc10cc6"}},{"ruleId":"D1","level":"warning","message":{"text":"DataOrganizationImpl.encode (cyclomatic 18): DataOrganizationImpl.encode has cyclomatic complexity 18 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/DataOrganizationImpl.java"},"region":{"startLine":803}}}],"partialFingerprints":{"codehealthFindingId/v1":"dc9545ec6b60a19a260e181b4ae4d0ddb59cf92f9f0abc11bc3aac80c725cb46"}},{"ruleId":"D1","level":"warning","message":{"text":"StructureDataType.replaceComponents (cyclomatic 18): StructureDataType.replaceComponents has cyclomatic complexity 18 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/StructureDataType.java"},"region":{"startLine":1744}}}],"partialFingerprints":{"codehealthFindingId/v1":"fb2f521971952492002eb9e74f6278f2359bd84b93487416ac53aeb832e96f33"}},{"ruleId":"D1","level":"warning","message":{"text":"PcodeDataTypeManager.getMetatype (cyclomatic 18): PcodeDataTypeManager.getMetatype has cyclomatic complexity 18 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/pcode/PcodeDataTypeManager.java"},"region":{"startLine":1299}}}],"partialFingerprints":{"codehealthFindingId/v1":"84e5f8d060df1b06c98c249a92db871e6f42b77b2489c87afbb199dad8382c83"}},{"ruleId":"D1","level":"warning","message":{"text":"RefTypeFactory.getDefaultFlowType (cyclomatic 18): RefTypeFactory.getDefaultFlowType has cyclomatic complexity 18 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/symbol/RefTypeFactory.java"},"region":{"startLine":299}}}],"partialFingerprints":{"codehealthFindingId/v1":"42ca6550db41e621f6b0f239f70712d9ae3de4ffe7fd8ec7f6764c0023bde2d9"}},{"ruleId":"D1","level":"warning","message":{"text":"OldLanguage.parseAddressSpaces (cyclomatic 18): OldLanguage.parseAddressSpaces has cyclomatic complexity 18 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/util/OldLanguage.java"},"region":{"startLine":453}}}],"partialFingerprints":{"codehealthFindingId/v1":"9298216395da6c21e3c86ccdd6451d973b7f413440e8c0bd8f28e108a22fb1f6"}},{"ruleId":"D1","level":"warning","message":{"text":"OldLanguage.parseOldLanguage (cyclomatic 18): OldLanguage.parseOldLanguage has cyclomatic complexity 18 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/util/OldLanguage.java"},"region":{"startLine":225}}}],"partialFingerprints":{"codehealthFindingId/v1":"fbe98837f54608de11bc0a026ea37c686a5abedc8d1d44dde14b395061c9ee67"}},{"ruleId":"D1","level":"warning","message":{"text":"GhidraFileData.addToVersionControl (cyclomatic 18): GhidraFileData.addToVersionControl has cyclomatic complexity 18 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Project/src/main/java/ghidra/framework/data/GhidraFileData.java"},"region":{"startLine":1268}}}],"partialFingerprints":{"codehealthFindingId/v1":"3d45d7882f7e6ba9f76ef0505257aa352dfc1734dcf3c4d4e92c0a94c895ad39"}},{"ruleId":"D1","level":"warning","message":{"text":"DataTreeNode.generateChildren (cyclomatic 18): DataTreeNode.generateChildren has cyclomatic complexity 18 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Project/src/main/java/ghidra/framework/main/datatree/DataTreeNode.java"},"region":{"startLine":270}}}],"partialFingerprints":{"codehealthFindingId/v1":"5ff987c6d495eeb265de2e8cc322574ed5ca938357e8cc665d4caf436993b433"}},{"ruleId":"D1","level":"warning","message":{"text":"VisualEdgeRenderer.drawSimpleEdge (cyclomatic 18): VisualEdgeRenderer.drawSimpleEdge has cyclomatic complexity 18 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Graph/src/main/java/ghidra/graph/viewer/edge/VisualEdgeRenderer.java"},"region":{"startLine":216}}}],"partialFingerprints":{"codehealthFindingId/v1":"79fba6e11f2d9d430579288b3900b007ef0de630a44e47ea62fe1261e18a2b29"}},{"ruleId":"D1","level":"warning","message":{"text":"Node.searchValue (cyclomatic 18): Node.searchValue has cyclomatic complexity 18 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Generic/src/main/java/ghidra/generic/util/datastruct/TreeValueSortedMap.java"},"region":{"startLine":483}}}],"partialFingerprints":{"codehealthFindingId/v1":"5ad25ccd9fdff17d59c64a7102952254032fcbc20004151d5b4c193fffa7bec0"}},{"ruleId":"D1","level":"warning","message":{"text":"NumericUtilities.convertHexStringToMaskedValue (cyclomatic 18): NumericUtilities.convertHexStringToMaskedValue has cyclomatic complexity 18 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Generic/src/main/java/ghidra/util/NumericUtilities.java"},"region":{"startLine":569}}}],"partialFingerprints":{"codehealthFindingId/v1":"d86480db41d4df4c7c48ddde8a771e3e996db321fabc117ab46b544c3a265da8"}},{"ruleId":"D1","level":"warning","message":{"text":"TargetClassDescriptor.\u003Cinit\u003E (cyclomatic 18): TargetClassDescriptor.\u003Cinit\u003E has cyclomatic complexity 18 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/Swift/src/main/java/ghidra/app/util/bin/format/swift/types/TargetClassDescriptor.java"},"region":{"startLine":62}}}],"partialFingerprints":{"codehealthFindingId/v1":"1101379574092e2faa07276fb33228b45028e4c3c3cadf30d6131aacc3f7d835"}},{"ruleId":"D1","level":"warning","message":{"text":"DataTypesSarifMgr.findDataType (cyclomatic 18): DataTypesSarifMgr.findDataType has cyclomatic complexity 18 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/Sarif/src/main/java/sarif/managers/DataTypesSarifMgr.java"},"region":{"startLine":565}}}],"partialFingerprints":{"codehealthFindingId/v1":"a69e0e3fee19c4eee35b2e49b352a6ef98d7c16ab5edee2837da49e299f0a728"}},{"ruleId":"D1","level":"warning","message":{"text":"SarifUtils.locationToAddress (cyclomatic 18): SarifUtils.locationToAddress has cyclomatic complexity 18 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/Sarif/src/main/java/sarif/SarifUtils.java"},"region":{"startLine":146}}}],"partialFingerprints":{"codehealthFindingId/v1":"ec002e49b421bf36d6bec207872f3ab28b51c6e004d8af6a14be671a851fc2f8"}},{"ruleId":"D1","level":"warning","message":{"text":"PdbParser.createData (cyclomatic 18): PdbParser.createData has cyclomatic complexity 18 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/PDB/src/main/java/ghidra/app/util/bin/format/pdb/PdbParser.java"},"region":{"startLine":809}}}],"partialFingerprints":{"codehealthFindingId/v1":"0780093d11ac2f95ef91d48ae6682106961b8c9330d4a0d511a795969c998972"}},{"ruleId":"D1","level":"warning","message":{"text":"DataSymbolApplier.createData (cyclomatic 18): DataSymbolApplier.createData has cyclomatic complexity 18 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/PDB/src/main/java/ghidra/app/util/pdb/pdbapplicator/DataSymbolApplier.java"},"region":{"startLine":117}}}],"partialFingerprints":{"codehealthFindingId/v1":"cba1dc3b164952ced88ac470ae3083830d67cd911b45a8cbc40ef098ed839eea"}},{"ruleId":"D1","level":"warning","message":{"text":"ObjcMessageAnalyzer.fixMsgSendSignatures (cyclomatic 18): ObjcMessageAnalyzer.fixMsgSendSignatures has cyclomatic complexity 18 (threshold 15). To reduce it, separate the branches: extract each independent case into its own named function so the top-level body reads as a short sequence of named decisions."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/Objective-C/src/main/java/ghidra/app/plugin/core/analysis/ObjcMessageAnalyzer.java"},"region":{"startLine":221}}}],"partialFingerprints":{"codehealthFindingId/v1":"5bbb6a55794ae80307c8d66be26c62ce9bedc149e9374e49b6953bbae31758fc"}},{"ruleId":"D1","level":"warning","message":{"text":"CartFileSystem.getFileAttributes (cyclomatic 18): CartFileSystem.getFileAttributes has cyclomatic complexity 18 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/cart/CartFileSystem.java"},"region":{"startLine":241}}}],"partialFingerprints":{"codehealthFindingId/v1":"fdd49961c1718eab2d52ac6a465cce65595091f5ead66090127830c0d7938e0f"}},{"ruleId":"D1","level":"warning","message":{"text":"ExtractedMacho.fixupSegment (cyclomatic 18): ExtractedMacho.fixupSegment has cyclomatic complexity 18 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/ios/ExtractedMacho.java"},"region":{"startLine":312}}}],"partialFingerprints":{"codehealthFindingId/v1":"8d795bccfb413cd4a9ebc84cdda73ca8a7f2e8fe4c902b0db891b165f0c952aa"}},{"ruleId":"D1","level":"warning","message":{"text":"DecompilerParameterIdCmd.analyzeFunction (cyclomatic 18): DecompilerParameterIdCmd.analyzeFunction has cyclomatic complexity 18 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/Decompiler/src/main/java/ghidra/app/cmd/function/DecompilerParameterIdCmd.java"},"region":{"startLine":168}}}],"partialFingerprints":{"codehealthFindingId/v1":"e44af9b03e20cc9b52a9b51be7f464f74f0a4d482bf1b5eff79f1df0fb597f79"}},{"ruleId":"D1","level":"warning","message":{"text":"CodeCompareAddressCorrelation.processCodeCompare (cyclomatic 18): CodeCompareAddressCorrelation.processCodeCompare has cyclomatic complexity 18 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/CodeCompare/src/main/java/ghidra/features/codecompare/correlator/CodeCompareAddressCorrelation.java"},"region":{"startLine":126}}}],"partialFingerprints":{"codehealthFindingId/v1":"f9f996a4474ff86506415517c160bdb538ea89b19841b3ed5e043b238553a424"}},{"ruleId":"D1","level":"warning","message":{"text":"BSimQuery.restoreQuery (cyclomatic 18): BSimQuery.restoreQuery has cyclomatic complexity 18 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/BSim/src/main/java/ghidra/features/bsim/query/protocol/BSimQuery.java"},"region":{"startLine":98}}}],"partialFingerprints":{"codehealthFindingId/v1":"ef68ab47b301bab19b57817c60ffe5a03333ed0af332d95e9e6dd90316e42e1e"}},{"ruleId":"D1","level":"warning","message":{"text":"BSimPostgresDataSource.connect (cyclomatic 18): BSimPostgresDataSource.connect has cyclomatic complexity 18 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/BSim/src/main/java/ghidra/features/bsim/query/BSimPostgresDBConnectionManager.java"},"region":{"startLine":283}}}],"partialFingerprints":{"codehealthFindingId/v1":"e3c4feac57ad122937f1eb1bff401a23ddd5a7eea9e1f610963f492192df9c18"}},{"ruleId":"D1","level":"warning","message":{"text":"DebuggerStaticMappingProvider.activatedAdd (cyclomatic 18): DebuggerStaticMappingProvider.activatedAdd has cyclomatic complexity 18 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/gui/modules/DebuggerStaticMappingProvider.java"},"region":{"startLine":285}}}],"partialFingerprints":{"codehealthFindingId/v1":"171581eff12875f7aef437a100786a5f361afd23b69928d53688a599d2b481ae"}},{"ruleId":"D1","level":"warning","message":{"text":"RmiClient.argToObject (cyclomatic 18): RmiClient.argToObject has cyclomatic complexity 18 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/Debugger-rmi-trace/src/main/java/ghidra/app/plugin/core/debug/client/tracermi/RmiClient.java"},"region":{"startLine":674}}}],"partialFingerprints":{"codehealthFindingId/v1":"688e4e80de1ee0b267b187678c4514dacfba368300b9dc95c98f416c7a941862"}},{"ruleId":"D1","level":"warning","message":{"text":"RmiClient.argToType (cyclomatic 18): RmiClient.argToType has cyclomatic complexity 18 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/Debugger-rmi-trace/src/main/java/ghidra/app/plugin/core/debug/client/tracermi/RmiClient.java"},"region":{"startLine":731}}}],"partialFingerprints":{"codehealthFindingId/v1":"4c88b925e4d96f74fef33c8e3f892851ca0fa7338b4c45495516b87c6077c5df"}},{"ruleId":"D1","level":"warning","message":{"text":"AbstractTraceRmiLaunchOffer.launchProgram (cyclomatic 18): AbstractTraceRmiLaunchOffer.launchProgram has cyclomatic complexity 18 (threshold 15). To reduce it, separate the branches: extract each independent case into its own named function so the top-level body reads as a short sequence of named decisions."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/Debugger-rmi-trace/src/main/java/ghidra/app/plugin/core/debug/gui/tracermi/launcher/AbstractTraceRmiLaunchOffer.java"},"region":{"startLine":682}}}],"partialFingerprints":{"codehealthFindingId/v1":"702b6237a0757c1b3f4726f8d703efc5c41b41c2b97479c8a2079e30286f306b"}},{"ruleId":"D1","level":"warning","message":{"text":"TraceRmiLauncherServicePlugin.tryProgramJvmClass (cyclomatic 18): TraceRmiLauncherServicePlugin.tryProgramJvmClass has cyclomatic complexity 18 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/Debugger-rmi-trace/src/main/java/ghidra/app/plugin/core/debug/gui/tracermi/launcher/TraceRmiLauncherServicePlugin.java"},"region":{"startLine":158}}}],"partialFingerprints":{"codehealthFindingId/v1":"007f64fafd4cef60fce2ac2a1304f0079a12a85a05db0251c1c77a4685f41518"}},{"ruleId":"D1","level":"warning","message":{"text":"PowerPCAddressAnalyzer.recoverSwitches (cyclomatic 17): PowerPCAddressAnalyzer.recoverSwitches has cyclomatic complexity 17 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Processors/PowerPC/src/main/java/ghidra/app/plugin/core/analysis/PowerPCAddressAnalyzer.java"},"region":{"startLine":382}}}],"partialFingerprints":{"codehealthFindingId/v1":"577ddd34c828b4cb886bbd43b62b5f7598e45a1020349b0a478f570426037fb2"}},{"ruleId":"D1","level":"warning","message":{"text":"Pic18Analyzer.handleBSRModification (cyclomatic 17): Pic18Analyzer.handleBSRModification has cyclomatic complexity 17 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Processors/PIC/src/main/java/ghidra/app/plugin/core/analysis/Pic18Analyzer.java"},"region":{"startLine":648}}}],"partialFingerprints":{"codehealthFindingId/v1":"ce68bddb4e58ec81a7b79a8e6812e162139855d98583ddc84cafe3d6fd546ed0"}},{"ruleId":"D1","level":"warning","message":{"text":"PicSwitchAnalyzer.handleAddSwitch (cyclomatic 17): PicSwitchAnalyzer.handleAddSwitch has cyclomatic complexity 17 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Processors/PIC/src/main/java/ghidra/app/plugin/core/analysis/PicSwitchAnalyzer.java"},"region":{"startLine":155}}}],"partialFingerprints":{"codehealthFindingId/v1":"cb5e0ed1f888cfd78f46edeb74fcfc512315d47b31cf630091364e8d4c9c41a8"}},{"ruleId":"D1","level":"warning","message":{"text":"Hexagon_ElfRelocationHandler.relocate (cyclomatic 17): Hexagon_ElfRelocationHandler.relocate has cyclomatic complexity 17 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Processors/Hexagon/src/main/java/ghidra/app/util/bin/format/elf/relocation/Hexagon_ElfRelocationHandler.java"},"region":{"startLine":48}}}],"partialFingerprints":{"codehealthFindingId/v1":"638fa0d3058a3fb8da29d55881a39a0cb0c385746450e1545c827b86cbfb72ca"}},{"ruleId":"D1","level":"warning","message":{"text":"1SwitchEvaluator.evaluateReference (cyclomatic 17): 1SwitchEvaluator.evaluateReference has cyclomatic complexity 17 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Processors/ARM/src/main/java/ghidra/app/plugin/core/analysis/ArmAnalyzer.java"},"region":{"startLine":392}}}],"partialFingerprints":{"codehealthFindingId/v1":"a70219a21322e3590bbdd5edfad052d9315283ece3bb275fc6c9f3f30e8beb96"}},{"ruleId":"D1","level":"warning","message":{"text":"AARCH64_MachoRelocationHandler.relocate (cyclomatic 17): AARCH64_MachoRelocationHandler.relocate has cyclomatic complexity 17 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Processors/AARCH64/src/main/java/ghidra/app/util/bin/format/macho/relocation/AARCH64_MachoRelocationHandler.java"},"region":{"startLine":46}}}],"partialFingerprints":{"codehealthFindingId/v1":"bdad9ae9a3dc1140d1aa2d1564012d4901d4221740462cd51e3072b2ac58ea09"}},{"ruleId":"D1","level":"warning","message":{"text":"ConstTpl.decode (cyclomatic 17): ConstTpl.decode has cyclomatic complexity 17 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/processors/sleigh/template/ConstTpl.java"},"region":{"startLine":285}}}],"partialFingerprints":{"codehealthFindingId/v1":"bbc7652f0c173d86621be2d0685aa07c4ca6be52866ccf81581ee8572a90c47e"}},{"ruleId":"D1","level":"warning","message":{"text":"SymbolPathParser.naiveParse (cyclomatic 17): SymbolPathParser.naiveParse has cyclomatic complexity 17 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/util/SymbolPathParser.java"},"region":{"startLine":89}}}],"partialFingerprints":{"codehealthFindingId/v1":"858fed1a924b9de8a2a477dda19c29fb1e846e05133ba7b434900f31817c02d3"}},{"ruleId":"D1","level":"warning","message":{"text":"FloatFormat.decodeHostFloat (cyclomatic 17): FloatFormat.decodeHostFloat has cyclomatic complexity 17 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcode/floatformat/FloatFormat.java"},"region":{"startLine":397}}}],"partialFingerprints":{"codehealthFindingId/v1":"20709cc6f5fc4ead19fe38005fc807f49a668defb45b389d32dd127b274008de"}},{"ruleId":"D1","level":"warning","message":{"text":"DataTypeArchiveTransformer.transformDataType (cyclomatic 17): DataTypeArchiveTransformer.transformDataType has cyclomatic complexity 17 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/DataTypeArchiveTransformer.java"},"region":{"startLine":512}}}],"partialFingerprints":{"codehealthFindingId/v1":"3ed3817d94be6c191859aa5f1ba93f65c5946e96af7f6ba349500f6d393df582"}},{"ruleId":"D1","level":"warning","message":{"text":"DataTypeArchiveTransformer.validate (cyclomatic 17): DataTypeArchiveTransformer.validate has cyclomatic complexity 17 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/DataTypeArchiveTransformer.java"},"region":{"startLine":113}}}],"partialFingerprints":{"codehealthFindingId/v1":"b9e58e04f653752397ff55f57eafc7b4f7d28d5f38a090a7fef7fc321c0893c4"}},{"ruleId":"D1","level":"warning","message":{"text":"DataTypeManagerDB.resolve (cyclomatic 17): DataTypeManagerDB.resolve has cyclomatic complexity 17 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/DataTypeManagerDB.java"},"region":{"startLine":1194}}}],"partialFingerprints":{"codehealthFindingId/v1":"042bc41a75c4d42ca1e7db86543baa60bcbb891a01e076a16443e826fbeeae8f"}},{"ruleId":"D1","level":"warning","message":{"text":"StructureDB.isEquivalent (cyclomatic 17): StructureDB.isEquivalent has cyclomatic complexity 17 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/StructureDB.java"},"region":{"startLine":1961}}}],"partialFingerprints":{"codehealthFindingId/v1":"cb565255607a2f453bd598a201502df1e5628f0959e2d782103f1b1133a150f1"}},{"ruleId":"D1","level":"warning","message":{"text":"FunctionManagerDB.createFunction (cyclomatic 17): FunctionManagerDB.createFunction has cyclomatic complexity 17 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/function/FunctionManagerDB.java"},"region":{"startLine":225}}}],"partialFingerprints":{"codehealthFindingId/v1":"30ec20015a360b59011ca2b9c7d6a112cecc7a705533a2ace23281a206a0cdc5"}},{"ruleId":"D1","level":"warning","message":{"text":"AddressMapDB.getBaseAddressIndex (cyclomatic 17): AddressMapDB.getBaseAddressIndex has cyclomatic complexity 17 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/map/AddressMapDB.java"},"region":{"startLine":416}}}],"partialFingerprints":{"codehealthFindingId/v1":"19c9e36eedba49e38f0bd5e400cc951724f648c259687e4808218ed47e8f46ae"}},{"ruleId":"D1","level":"warning","message":{"text":"ReferenceDBManager.moveAddressRange (cyclomatic 17): ReferenceDBManager.moveAddressRange has cyclomatic complexity 17 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/references/ReferenceDBManager.java"},"region":{"startLine":1378}}}],"partialFingerprints":{"codehealthFindingId/v1":"b2b41a89e4b79acf1298e8efdf20b4191510309e24ca1a15463c93c539eb691d"}},{"ruleId":"D1","level":"warning","message":{"text":"SourceFileManagerDB.addSourceMapEntry (cyclomatic 17): SourceFileManagerDB.addSourceMapEntry has cyclomatic complexity 17 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/sourcemap/SourceFileManagerDB.java"},"region":{"startLine":386}}}],"partialFingerprints":{"codehealthFindingId/v1":"0101e5f6db928d7e79789e31b61355e86942cbc892c32c91a956c6dc0bd2dc84"}},{"ruleId":"D1","level":"warning","message":{"text":"SharedRangeMapDB.add (cyclomatic 17): SharedRangeMapDB.add has cyclomatic complexity 17 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/util/SharedRangeMapDB.java"},"region":{"startLine":126}}}],"partialFingerprints":{"codehealthFindingId/v1":"c7995b13296a094e4d09a919c4af341fcf334edb22292a661444a26b5535e357"}},{"ruleId":"D1","level":"warning","message":{"text":"ProgramDB.repairARMContext (cyclomatic 17): ProgramDB.repairARMContext has cyclomatic complexity 17 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/ProgramDB.java"},"region":{"startLine":2183}}}],"partialFingerprints":{"codehealthFindingId/v1":"cf0666874b1dedacde3547818cd2055c4ab5cea313d9c6a09ef772f43ad756f0"}},{"ruleId":"D1","level":"warning","message":{"text":"FollowFlow.followInstruction (cyclomatic 17): FollowFlow.followInstruction has cyclomatic complexity 17 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/block/FollowFlow.java"},"region":{"startLine":526}}}],"partialFingerprints":{"codehealthFindingId/v1":"7b1a96dcaa92e7e935a33a220cb03643da225b4b7fa8b7aefcc24a2ed38ebb52"}},{"ruleId":"D1","level":"warning","message":{"text":"StandAloneDataTypeManager.initializeOtherAdapters (cyclomatic 17): StandAloneDataTypeManager.initializeOtherAdapters has cyclomatic complexity 17 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/StandAloneDataTypeManager.java"},"region":{"startLine":327}}}],"partialFingerprints":{"codehealthFindingId/v1":"cbd6994ea8c5d25084642852a92a404c1bd312fccdb2a5431960d87414ac9a47"}},{"ruleId":"D1","level":"warning","message":{"text":"StructureDataType.delete (cyclomatic 17): StructureDataType.delete has cyclomatic complexity 17 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/StructureDataType.java"},"region":{"startLine":341}}}],"partialFingerprints":{"codehealthFindingId/v1":"483ef6fb77bce8de0e95c6e2e59327b3891c24111c3c10f92c24e36bb22081de"}},{"ruleId":"D1","level":"warning","message":{"text":"PrototypeModel.encode (cyclomatic 17): PrototypeModel.encode has cyclomatic complexity 17 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/lang/PrototypeModel.java"},"region":{"startLine":501}}}],"partialFingerprints":{"codehealthFindingId/v1":"bf023d0ddd5fda02dd94b7b4dffcee81c73bb80313cbf942ba824a5bedcf9e76"}},{"ruleId":"D1","level":"warning","message":{"text":"PrototypeModel.restoreXml (cyclomatic 17): PrototypeModel.restoreXml has cyclomatic complexity 17 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/lang/PrototypeModel.java"},"region":{"startLine":668}}}],"partialFingerprints":{"codehealthFindingId/v1":"b9b99396287727f9e07fab2afadcc7445775d419ab10cd41638e955063396f98"}},{"ruleId":"D1","level":"warning","message":{"text":"DynamicHash.uniqueHash (cyclomatic 17): DynamicHash.uniqueHash has cyclomatic complexity 17 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/pcode/DynamicHash.java"},"region":{"startLine":433}}}],"partialFingerprints":{"codehealthFindingId/v1":"890889a4c3c03ae3b1d2e3d7877b7875872db7912491fc2ffba6f8bdb3babca4"}},{"ruleId":"D1","level":"warning","message":{"text":"SimpleDiffUtility.getCompatibleAddress (cyclomatic 17): SimpleDiffUtility.getCompatibleAddress has cyclomatic complexity 17 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/util/SimpleDiffUtility.java"},"region":{"startLine":206}}}],"partialFingerprints":{"codehealthFindingId/v1":"5883d310ac53aa51e9bec302ed6a5171fd2d1fef47fbd217a77de7f4c6130034"}},{"ruleId":"D1","level":"warning","message":{"text":"RedBlackTree.swapPosition (cyclomatic 17): RedBlackTree.swapPosition has cyclomatic complexity 17 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Generic/src/main/java/generic/stl/RedBlackTree.java"},"region":{"startLine":564}}}],"partialFingerprints":{"codehealthFindingId/v1":"7dfbf3340075a5e487f756c3b2f9cdf68f9ea94bf228f40cfb589fa208a661d6"}},{"ruleId":"D1","level":"warning","message":{"text":"RedBlackKeySet.swapPosition (cyclomatic 17): RedBlackKeySet.swapPosition has cyclomatic complexity 17 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Generic/src/main/java/ghidra/util/datastruct/RedBlackKeySet.java"},"region":{"startLine":566}}}],"partialFingerprints":{"codehealthFindingId/v1":"50cb459ff03078f8e173e283c1ea4b3dfad524c4f3cde832839ef597bc578e4e"}},{"ruleId":"D1","level":"warning","message":{"text":"RedBlackLongKeySet.swapPosition (cyclomatic 17): RedBlackLongKeySet.swapPosition has cyclomatic complexity 17 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Generic/src/main/java/ghidra/util/datastruct/RedBlackLongKeySet.java"},"region":{"startLine":553}}}],"partialFingerprints":{"codehealthFindingId/v1":"7772ac3c89f32e1e311c5d3408cb1bd88e4702106904695f4086b24d541dbb5e"}},{"ruleId":"D1","level":"warning","message":{"text":"RedBlackTree.swapPosition (cyclomatic 17): RedBlackTree.swapPosition has cyclomatic complexity 17 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Generic/src/main/java/ghidra/util/datastruct/RedBlackTree.java"},"region":{"startLine":546}}}],"partialFingerprints":{"codehealthFindingId/v1":"e4b497ceb22506e1e945eae22039133befce1239ce57cfd5a60c81603c250bd3"}},{"ruleId":"D1","level":"warning","message":{"text":"GhidraObjectInputFilter.checkInput (cyclomatic 17): GhidraObjectInputFilter.checkInput has cyclomatic complexity 17 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/FileSystem/src/main/java/ghidra/framework/remote/GhidraObjectInputFilter.java"},"region":{"startLine":169}}}],"partialFingerprints":{"codehealthFindingId/v1":"3d92ecb2c5386d9e6a22d1f518236f7d32ea45213a7a2bdddac949de21f72e8a"}},{"ruleId":"D1","level":"warning","message":{"text":"IndexedLocalFileSystem.readIndex (cyclomatic 17): IndexedLocalFileSystem.readIndex has cyclomatic complexity 17 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/FileSystem/src/main/java/ghidra/framework/store/local/IndexedLocalFileSystem.java"},"region":{"startLine":472}}}],"partialFingerprints":{"codehealthFindingId/v1":"eb17aa8e278877c0f97efc1559c923cff18d79504b6f70f5f581577aaa7c94d1"}},{"ruleId":"D1","level":"warning","message":{"text":"DockingAction.getHelpInfo (cyclomatic 17): DockingAction.getHelpInfo has cyclomatic complexity 17 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Docking/src/main/java/docking/action/DockingAction.java"},"region":{"startLine":501}}}],"partialFingerprints":{"codehealthFindingId/v1":"4e05d38ec2214899fd645ea0a9b6cd1d1631f9b15b7d930153fd290455eb9c55"}},{"ruleId":"D1","level":"warning","message":{"text":"PdbDataTypeParser.findDataType (cyclomatic 17): PdbDataTypeParser.findDataType has cyclomatic complexity 17 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/PDB/src/main/java/ghidra/app/util/bin/format/pdb/PdbDataTypeParser.java"},"region":{"startLine":170}}}],"partialFingerprints":{"codehealthFindingId/v1":"ac5dc2375f4e20881290834762065c93be0ae02cbd219a68aed58bde28590a12"}},{"ruleId":"D1","level":"warning","message":{"text":"MDMangObjectParser.parseObjectReserved (cyclomatic 17): MDMangObjectParser.parseObjectReserved has cyclomatic complexity 17 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/MicrosoftDmang/src/main/java/mdemangler/object/MDMangObjectParser.java"},"region":{"startLine":183}}}],"partialFingerprints":{"codehealthFindingId/v1":"a56e86c573d7c0d5b886a02a3e663d326938587d570e0bfd5bd288388b5e27e5"}},{"ruleId":"D1","level":"warning","message":{"text":"MicrosoftDemanglerUtil.processFunction (cyclomatic 17): MicrosoftDemanglerUtil.processFunction has cyclomatic complexity 17 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/MicrosoftDemangler/src/main/java/ghidra/app/util/demangler/microsoft/MicrosoftDemanglerUtil.java"},"region":{"startLine":437}}}],"partialFingerprints":{"codehealthFindingId/v1":"665bdb9cdd77895b147c5798322cc2c4bdf4c8e682a450631939f8e1ba47de00"}},{"ruleId":"D1","level":"warning","message":{"text":"FGController.createDefaultFormat (cyclomatic 17): FGController.createDefaultFormat has cyclomatic complexity 17 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/FunctionGraph/src/main/java/ghidra/app/plugin/core/functiongraph/mvc/FGController.java"},"region":{"startLine":216}}}],"partialFingerprints":{"codehealthFindingId/v1":"7ca9a3d1b7e9162f4071ff06db4c3404c8940f41ceb942f17b3c685ef0959771"}},{"ruleId":"D1","level":"warning","message":{"text":"Img3TagFactory.get (cyclomatic 17): Img3TagFactory.get has cyclomatic complexity 17 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/ios/img3/tag/Img3TagFactory.java"},"region":{"startLine":27}}}],"partialFingerprints":{"codehealthFindingId/v1":"ba7b803057ab5e7b65a0f493743822a4a4672600be7ccf4cdb273f240792d73d"}},{"ruleId":"D1","level":"warning","message":{"text":"ForceUnionAction.determineFacet (cyclomatic 17): ForceUnionAction.determineFacet has cyclomatic complexity 17 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/Decompiler/src/main/java/ghidra/app/plugin/core/decompile/actions/ForceUnionAction.java"},"region":{"startLine":167}}}],"partialFingerprints":{"codehealthFindingId/v1":"1358d21aa46c2637462c849e5d096d8e0257db668610e8b6653a53840d5d3962"}},{"ruleId":"D1","level":"warning","message":{"text":"ByteViewerComponent.keyPressed (cyclomatic 17): ByteViewerComponent.keyPressed has cyclomatic complexity 17 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/ByteViewer/src/main/java/ghidra/app/plugin/core/byteviewer/ByteViewerComponent.java"},"region":{"startLine":254}}}],"partialFingerprints":{"codehealthFindingId/v1":"008d82f82875977cff00d46c82be5e6ef61e139fc727f6d3871139f54169683a"}},{"ruleId":"D1","level":"warning","message":{"text":"FunctionStartAction.checkAfterName (cyclomatic 17): FunctionStartAction.checkAfterName has cyclomatic complexity 17 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/BytePatterns/src/main/java/ghidra/app/analyzers/FunctionStartAnalyzer.java"},"region":{"startLine":379}}}],"partialFingerprints":{"codehealthFindingId/v1":"352981f17cfff6310ff601d9972b8f70c6da7562f86d5997da5723d364a7ce4c"}},{"ruleId":"D1","level":"warning","message":{"text":"FunctionBitPatternInfo.\u003Cinit\u003E (cyclomatic 17): FunctionBitPatternInfo.\u003Cinit\u003E has cyclomatic complexity 17 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/BytePatterns/src/main/java/ghidra/bitpatterns/info/FunctionBitPatternInfo.java"},"region":{"startLine":80}}}],"partialFingerprints":{"codehealthFindingId/v1":"319f80c7c2a2e0388af8e3cabd15cf164543a0930d63d3a4b2beac38fbb871f2"}},{"ruleId":"D1","level":"warning","message":{"text":"PcodeNonRedundantPowersetOfInterval.assumeBinaryExpression (cyclomatic 17): PcodeNonRedundantPowersetOfInterval.assumeBinaryExpression has cyclomatic complexity 17 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Extensions/Lisa/src/main/java/ghidra/lisa/pcode/analyses/PcodeNonRedundantPowersetOfInterval.java"},"region":{"startLine":147}}}],"partialFingerprints":{"codehealthFindingId/v1":"58bf99448c18caf27351e909419484a239dc3ae6283b6ee101b85dd067d48530"}},{"ruleId":"D1","level":"warning","message":{"text":"AbstractRectangle2DQuery.testNode (cyclomatic 17): AbstractRectangle2DQuery.testNode has cyclomatic complexity 17 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/ProposedUtils/src/main/java/ghidra/util/database/spatial/rect/AbstractRectangle2DQuery.java"},"region":{"startLine":137}}}],"partialFingerprints":{"codehealthFindingId/v1":"536d1f603b989eb63067284b7edf6aed559f70e72fdd4818cfb1af2ca2716d91"}},{"ruleId":"D1","level":"warning","message":{"text":"DBTraceInstructionsView.checkInstructionSet (cyclomatic 17): DBTraceInstructionsView.checkInstructionSet has cyclomatic complexity 17 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/listing/DBTraceInstructionsView.java"},"region":{"startLine":498}}}],"partialFingerprints":{"codehealthFindingId/v1":"69abf0faa82762977bb3a4d65339c5f0e5215bfde5207aa6575616ee42487a40"}},{"ruleId":"D1","level":"warning","message":{"text":"TraceObjectSchema.searchForCanonicalContainer (cyclomatic 17): TraceObjectSchema.searchForCanonicalContainer has cyclomatic complexity 17 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/model/target/schema/TraceObjectSchema.java"},"region":{"startLine":692}}}],"partialFingerprints":{"codehealthFindingId/v1":"3f29cf1fe8e98d5e4827bc36e0ca6b9a6c77fb05173a7e3a0eb04409f276ea90"}},{"ruleId":"D1","level":"warning","message":{"text":"FridaDebuggerPlatformOpinion.getOffers (cyclomatic 17): FridaDebuggerPlatformOpinion.getOffers has cyclomatic complexity 17 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/platform/frida/FridaDebuggerPlatformOpinion.java"},"region":{"startLine":91}}}],"partialFingerprints":{"codehealthFindingId/v1":"7f508a980e20d2afef714dec0ef609d36af290924f3a6c93fe1831b12eb157ea"}},{"ruleId":"D1","level":"warning","message":{"text":"LldbDebuggerPlatformOpinion.getOffers (cyclomatic 17): LldbDebuggerPlatformOpinion.getOffers has cyclomatic complexity 17 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/platform/lldb/LldbDebuggerPlatformOpinion.java"},"region":{"startLine":91}}}],"partialFingerprints":{"codehealthFindingId/v1":"2dbb77bd554eabd0fc565f040aa495ad4c15810c49acced13797ade313649b28"}},{"ruleId":"D1","level":"warning","message":{"text":"StackUnwinder.pcOrSp (cyclomatic 17): StackUnwinder.pcOrSp has cyclomatic complexity 17 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/stack/StackUnwinder.java"},"region":{"startLine":238}}}],"partialFingerprints":{"codehealthFindingId/v1":"e3374e00069005aa853053f0faef958c0f946eaae148baffec510b8bc21a1699"}},{"ruleId":"D1","level":"warning","message":{"text":"JdiMethods.set_class_filter (cyclomatic 17): JdiMethods.set_class_filter has cyclomatic complexity 17 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/Debugger-jpda/src/main/java/ghidra/dbg/jdi/rmi/jpda/JdiMethods.java"},"region":{"startLine":1238}}}],"partialFingerprints":{"codehealthFindingId/v1":"73c0eca42d303ee5095c7497c838f2052f9380ccfd36fcfb56eb9d77f36413b5"}},{"ruleId":"D1","level":"warning","message":{"text":"DmgServer.main (cyclomatic 17): DmgServer.main has cyclomatic complexity 17 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"GPL/DMG/src/dmg/java/mobiledevices/dmg/server/DmgServer.java"},"region":{"startLine":55}}}],"partialFingerprints":{"codehealthFindingId/v1":"97342cb318bf526b1b52c00644e922fb3af156368a282238d6ff775880f24374"}},{"ruleId":"D1","level":"warning","message":{"text":"LaunchSupport.main (cyclomatic 16): LaunchSupport.main has cyclomatic complexity 16 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"GhidraBuild/LaunchSupport/src/main/java/LaunchSupport.java"},"region":{"startLine":55}}}],"partialFingerprints":{"codehealthFindingId/v1":"46eebd5c304fdbf91b6fec6a57c7649fa6d4f69cc3db65c884430faa15ff744e"}},{"ruleId":"D1","level":"warning","message":{"text":"GhidraProjectCreatorPreferencePage.createContents (cyclomatic 16): GhidraProjectCreatorPreferencePage.createContents has cyclomatic complexity 16 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"GhidraBuild/EclipsePlugins/GhidraDev/GhidraDevPlugin/src/main/java/ghidradev/ghidraprojectcreator/preferences/GhidraProjectCreatorPreferencePage.java"},"region":{"startLine":67}}}],"partialFingerprints":{"codehealthFindingId/v1":"854a8410ac4e1966855295f11699662b02ee70fc9462deb27b425a2d68cff9d3"}},{"ruleId":"D1","level":"warning","message":{"text":"EnablePythonWizardPage.validate (cyclomatic 16): EnablePythonWizardPage.validate has cyclomatic complexity 16 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"GhidraBuild/EclipsePlugins/GhidraDev/GhidraDevPlugin/src/main/java/ghidradev/ghidraprojectcreator/wizards/pages/EnablePythonWizardPage.java"},"region":{"startLine":230}}}],"partialFingerprints":{"codehealthFindingId/v1":"bd78832fc8d58de22d2652b20872b09fd9001879217396b1c0b7f13202172496"}},{"ruleId":"D1","level":"warning","message":{"text":"Pic17c7xxAnalyzer.blockAdded (cyclomatic 16): Pic17c7xxAnalyzer.blockAdded has cyclomatic complexity 16 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Processors/PIC/src/main/java/ghidra/app/plugin/core/analysis/Pic17c7xxAnalyzer.java"},"region":{"startLine":409}}}],"partialFingerprints":{"codehealthFindingId/v1":"03fab544da6ed3dac36a4fe6739d356d30133760f1ad3a6e4d4005187918cec7"}},{"ruleId":"D1","level":"warning","message":{"text":"MipsSymbolAnalyzer.added (cyclomatic 16): MipsSymbolAnalyzer.added has cyclomatic complexity 16 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Processors/MIPS/src/main/java/ghidra/app/plugin/core/analysis/MipsSymbolAnalyzer.java"},"region":{"startLine":48}}}],"partialFingerprints":{"codehealthFindingId/v1":"a46d6d074b034756affa4baf66f8a4519ec6cde79e6a1df47db57a4a602ff0af"}},{"ruleId":"D1","level":"warning","message":{"text":"HexagonThunkAnalyzer.createThunk (cyclomatic 16): HexagonThunkAnalyzer.createThunk has cyclomatic complexity 16 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Processors/Hexagon/src/main/java/ghidra/app/plugin/core/analysis/HexagonThunkAnalyzer.java"},"region":{"startLine":203}}}],"partialFingerprints":{"codehealthFindingId/v1":"f383c8ee1365ebc8ff4a0e75703e0dcc16ca2ebe40edbd67a62e536190f81d41"}},{"ruleId":"D1","level":"warning","message":{"text":"ARM_MachoRelocationHandler.relocate (cyclomatic 16): ARM_MachoRelocationHandler.relocate has cyclomatic complexity 16 (threshold 15). To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Where every arm is uniform \u2014 the same kind of value, with no behaviour of its own \u2014 a table keyed by the case is the shorter form; wherever the arms carry different data or different behaviour, keep them as cases, because collapsing those trades an explicit, reviewable set of cases for nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Processors/ARM/src/main/java/ghidra/app/util/bin/format/macho/relocation/ARM_MachoRelocationHandler.java"},"region":{"startLine":48}}}],"partialFingerprints":{"codehealthFindingId/v1":"4d8f4de877caf2d8a0a6463193482816a24dc744b9bf7668564d0957dc210e12"}},{"ruleId":"D1","level":"warning","message":{"text":"1.evaluateContext (cyclomatic 16): 1.evaluateContext has cyclomatic complexity 16 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Processors/68000/src/main/java/ghidra/app/plugin/core/analysis/Motorola68KAnalyzer.java"},"region":{"startLine":71}}}],"partialFingerprints":{"codehealthFindingId/v1":"202b209dc86493d6f099033f15b814d881fc27f09c66dc0c1331c6661321a0cd"}},{"ruleId":"D1","level":"warning","message":{"text":"SpecExtensionPanel.importExtension (cyclomatic 16): SpecExtensionPanel.importExtension has cyclomatic complexity 16 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/processors/sleigh/SpecExtensionPanel.java"},"region":{"startLine":485}}}],"partialFingerprints":{"codehealthFindingId/v1":"55446e989afeda2f51a565e4969d123a55af816c01fe9d23a3360bcdfaeea7f5"}},{"ruleId":"D1","level":"warning","message":{"text":"StructureDB.replaceAtOffset (cyclomatic 16): StructureDB.replaceAtOffset has cyclomatic complexity 16 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/StructureDB.java"},"region":{"startLine":1471}}}],"partialFingerprints":{"codehealthFindingId/v1":"8d351b09296b1a8e2024b87c778d227db81acd23f1453020f1061e485bd5d3b4"}},{"ruleId":"D1","level":"warning","message":{"text":"MemoryMapDB.findBytes (cyclomatic 16): MemoryMapDB.findBytes has cyclomatic complexity 16 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/mem/MemoryMapDB.java"},"region":{"startLine":1092}}}],"partialFingerprints":{"codehealthFindingId/v1":"65f7d2e2a28826ed32f33638cf4643006c908973c72da017109ecb324a494298"}},{"ruleId":"D1","level":"warning","message":{"text":"DataTypeArchiveContentHandler.getDomainObject (cyclomatic 16): DataTypeArchiveContentHandler.getDomainObject has cyclomatic complexity 16 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/DataTypeArchiveContentHandler.java"},"region":{"startLine":175}}}],"partialFingerprints":{"codehealthFindingId/v1":"2f273d7d55fbec13384b6eabda6272851bc6344ee426d0aa05949fe138c8e76d"}},{"ruleId":"D1","level":"warning","message":{"text":"Disassembler.pseudoDisassembleBlock (cyclomatic 16): Disassembler.pseudoDisassembleBlock has cyclomatic complexity 16 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/disassemble/Disassembler.java"},"region":{"startLine":778}}}],"partialFingerprints":{"codehealthFindingId/v1":"fbd3d4837c9765d976acb0865985ea076dd42197d84b6e7d2d1a54ac1d9f5ae4"}},{"ruleId":"D1","level":"warning","message":{"text":"DisassemblerQueue.instructionSetAddedToProgram (cyclomatic 16): DisassemblerQueue.instructionSetAddedToProgram has cyclomatic complexity 16 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/disassemble/DisassemblerQueue.java"},"region":{"startLine":201}}}],"partialFingerprints":{"codehealthFindingId/v1":"deecf2f22c2d690e6387688ceb6c52f4554edb1a0f56ba1a26647cea3ae8e997"}},{"ruleId":"D1","level":"warning","message":{"text":"AlignedComponentPacker.alignAndPackBitField (cyclomatic 16): AlignedComponentPacker.alignAndPackBitField has cyclomatic complexity 16 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/AlignedComponentPacker.java"},"region":{"startLine":326}}}],"partialFingerprints":{"codehealthFindingId/v1":"4be5320b5e17c76834aa11d14421b739bca1a85c5292460ad4d90e5a90ab9114"}},{"ruleId":"D1","level":"warning","message":{"text":"BaseRecognizerOverride.getErrorMessage (cyclomatic 16): BaseRecognizerOverride.getErrorMessage has cyclomatic complexity 16 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/sleigh/grammar/BaseRecognizerOverride.java"},"region":{"startLine":35}}}],"partialFingerprints":{"codehealthFindingId/v1":"e4aaa82e7757829bfc90f37b11075880920a8380d17264e55fdff3dbcc6aa249"}},{"ruleId":"D1","level":"warning","message":{"text":"DefaultProject.restore (cyclomatic 16): DefaultProject.restore has cyclomatic complexity 16 (threshold 15). To reduce it, separate the branches: extract each independent case into its own named function so the top-level body reads as a short sequence of named decisions."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Project/src/main/java/ghidra/framework/project/DefaultProject.java"},"region":{"startLine":435}}}],"partialFingerprints":{"codehealthFindingId/v1":"8e7ad9f847853c9ad57b60159bf1bcc1de0a94c3ad3c4394c5224f765f682cfc"}},{"ruleId":"D1","level":"warning","message":{"text":"TOCItem.isEquivalent (cyclomatic 16): TOCItem.isEquivalent has cyclomatic complexity 16 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Help/src/main/java/help/validator/model/TOCItem.java"},"region":{"startLine":219}}}],"partialFingerprints":{"codehealthFindingId/v1":"de5cb2e6619263cb91a7166de0d44e1199882b851786c307155e39cd051464b2"}},{"ruleId":"D1","level":"warning","message":{"text":"HTMLUtilities.friendlyEncodeHTML (cyclomatic 16): HTMLUtilities.friendlyEncodeHTML has cyclomatic complexity 16 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Gui/src/main/java/ghidra/util/HTMLUtilities.java"},"region":{"startLine":582}}}],"partialFingerprints":{"codehealthFindingId/v1":"3eacbde77e5dddc62b96e5f7992b0825f380a10832e4835caed95dfb47fdbb13"}},{"ruleId":"D1","level":"warning","message":{"text":"HelpLocation.equals (cyclomatic 16): HelpLocation.equals has cyclomatic complexity 16 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Gui/src/main/java/ghidra/util/HelpLocation.java"},"region":{"startLine":241}}}],"partialFingerprints":{"codehealthFindingId/v1":"016b5d6f8ef736f34eb9f79777fac00634e39657f7b8ec6fad292fb24dda5fe6"}},{"ruleId":"D1","level":"warning","message":{"text":"DirectedGraph.CopyEdgeAttributes (cyclomatic 16): DirectedGraph.CopyEdgeAttributes has cyclomatic complexity 16 (threshold 15). To reduce it, break up the iteration: give each loop body a named function, and split a multi-phase loop into one function per phase so no single body carries the whole pipeline."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Generic/src/main/java/ghidra/util/graph/DirectedGraph.java"},"region":{"startLine":992}}}],"partialFingerprints":{"codehealthFindingId/v1":"73d6f7ba845e5c80a4085d2246b6d4b4345c9786146fb005715cc15dfabb9af7"}},{"ruleId":"D1","level":"warning","message":{"text":"DirectedGraph.CopyVertexAttributes (cyclomatic 16): DirectedGraph.CopyVertexAttributes has cyclomatic complexity 16 (threshold 15). To reduce it, break up the iteration: give each loop body a named function, and split a multi-phase loop into one function per phase so no single body carries the whole pipeline."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Generic/src/main/java/ghidra/util/graph/DirectedGraph.java"},"region":{"startLine":1076}}}],"partialFingerprints":{"codehealthFindingId/v1":"d3933bf44c001325880b1db6cf597285b1de85d05ff7c2c15432df544120194d"}},{"ruleId":"D1","level":"warning","message":{"text":"RepositoryServerAdapter.connect (cyclomatic 16): RepositoryServerAdapter.connect has cyclomatic complexity 16 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/FileSystem/src/main/java/ghidra/framework/client/RepositoryServerAdapter.java"},"region":{"startLine":140}}}],"partialFingerprints":{"codehealthFindingId/v1":"aa2e90204b08a7b509cd94a2629647bcad1ae044a9881daef56c36e4ff5d00a1"}},{"ruleId":"D1","level":"warning","message":{"text":"KeyBindingUtils.parseKeyStroke (cyclomatic 16): KeyBindingUtils.parseKeyStroke has cyclomatic complexity 16 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Docking/src/main/java/docking/actions/KeyBindingUtils.java"},"region":{"startLine":761}}}],"partialFingerprints":{"codehealthFindingId/v1":"bca453d82159b607168d69f6846ce60ffd0cdd4e5228f895b8121539f353507d"}},{"ruleId":"D1","level":"warning","message":{"text":"SplitPanelLayout.layoutContainer (cyclomatic 16): SplitPanelLayout.layoutContainer has cyclomatic complexity 16 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Docking/src/main/java/docking/SplitPanel.java"},"region":{"startLine":70}}}],"partialFingerprints":{"codehealthFindingId/v1":"a2ccdeb173bdda1681706cf4bc5e26167a3ad1033bd0b505a0934490390f8484"}},{"ruleId":"D1","level":"warning","message":{"text":"BufferMgr.doSave (cyclomatic 16): BufferMgr.doSave has cyclomatic complexity 16 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/DB/src/main/java/db/buffers/BufferMgr.java"},"region":{"startLine":1965}}}],"partialFingerprints":{"codehealthFindingId/v1":"c029cd4c8e20108f563f89845695abbd63d03503f615d91406f37d956b15e3d1"}},{"ruleId":"D1","level":"warning","message":{"text":"LongDurationLongKeyIterator.initialize (cyclomatic 16): LongDurationLongKeyIterator.initialize has cyclomatic complexity 16 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/DB/src/main/java/db/Table.java"},"region":{"startLine":2829}}}],"partialFingerprints":{"codehealthFindingId/v1":"beea8f51864ad399c68522e64ff0ad8174067d164aa9a72293d291648b17916c"}},{"ruleId":"D1","level":"warning","message":{"text":"FunctionSignatureStringable.equals (cyclomatic 16): FunctionSignatureStringable.equals has cyclomatic complexity 16 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/VersionTracking/src/main/java/ghidra/feature/vt/api/stringable/FunctionSignatureStringable.java"},"region":{"startLine":440}}}],"partialFingerprints":{"codehealthFindingId/v1":"bc6feb418e3f0a3f0f9cc08076b1a8cb7deafb92f8d15074fad2135d132bb1a3"}},{"ruleId":"D1","level":"warning","message":{"text":"VTDualListingHighlightProvider.createHighlights (cyclomatic 16): VTDualListingHighlightProvider.createHighlights has cyclomatic complexity 16 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/VersionTracking/src/main/java/ghidra/feature/vt/gui/duallisting/VTDualListingHighlightProvider.java"},"region":{"startLine":132}}}],"partialFingerprints":{"codehealthFindingId/v1":"a56e31b2a2496f0a285992173aee03bdf21f4452c9ae13498cb06d68b8509393"}},{"ruleId":"D1","level":"warning","message":{"text":"GnuDemanglerParser.tokenizeParameters (cyclomatic 16): GnuDemanglerParser.tokenizeParameters has cyclomatic complexity 16 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/GnuDemangler/src/main/java/ghidra/app/util/demangler/gnu/GnuDemanglerParser.java"},"region":{"startLine":734}}}],"partialFingerprints":{"codehealthFindingId/v1":"b8d085448d896a9e1bb7cc9b492b2dad326d625a0f68e41efd660e06196fccee"}},{"ruleId":"D1","level":"warning","message":{"text":"IHDRChunk.calculateBitsPerPalette (cyclomatic 16): IHDRChunk.calculateBitsPerPalette has cyclomatic complexity 16 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/ios/png/IHDRChunk.java"},"region":{"startLine":96}}}],"partialFingerprints":{"codehealthFindingId/v1":"48b1c9e126c13e8666884a10b23bbe17a1bd7aa4ea3ed57965806fffcded84d7"}},{"ruleId":"D1","level":"warning","message":{"text":"OldJad.decompile (cyclomatic 16): OldJad.decompile has cyclomatic complexity 16 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/FileFormats/src/main/java/ghidra/file/jad/OldJad.java"},"region":{"startLine":49}}}],"partialFingerprints":{"codehealthFindingId/v1":"73be3c2b56942ec9d017b56d51533de373a7d63c6126a6d1328424a731effa09"}},{"ruleId":"D1","level":"warning","message":{"text":"AbstractTaintState.queryIndex (cyclomatic 16): AbstractTaintState.queryIndex has cyclomatic complexity 16 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/DecompilerDependent/src/main/java/ghidra/app/plugin/core/decompiler/taint/AbstractTaintState.java"},"region":{"startLine":240}}}],"partialFingerprints":{"codehealthFindingId/v1":"cc4853a9777983bcdd25635f35b82b301935e9ecfeb63a6aed4fd6b70b26b0fb"}},{"ruleId":"D1","level":"warning","message":{"text":"TaintQueryResult.matches (cyclomatic 16): TaintQueryResult.matches has cyclomatic complexity 16 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/DecompilerDependent/src/main/java/ghidra/app/plugin/core/decompiler/taint/TaintQueryResult.java"},"region":{"startLine":79}}}],"partialFingerprints":{"codehealthFindingId/v1":"fa4f6f7bff420d3a1e15b11901be63042ac1da5e71a1d458416a07260c190d52"}},{"ruleId":"D1","level":"warning","message":{"text":"DecompilerParallelConventionAnalysisCmd.analyzeFunction (cyclomatic 16): DecompilerParallelConventionAnalysisCmd.analyzeFunction has cyclomatic complexity 16 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/Decompiler/src/main/java/ghidra/app/cmd/function/DecompilerParallelConventionAnalysisCmd.java"},"region":{"startLine":129}}}],"partialFingerprints":{"codehealthFindingId/v1":"ab5f94c331540fa936c281028938d326ba563b2eb242b4638fe4571c537a60d2"}},{"ruleId":"D1","level":"warning","message":{"text":"TreeSearch.searchForward (cyclomatic 16): TreeSearch.searchForward has cyclomatic complexity 16 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/Decompiler/src/main/java/ghidra/app/plugin/core/decompile/actions/CreatePointerRelative.java"},"region":{"startLine":286}}}],"partialFingerprints":{"codehealthFindingId/v1":"ebf6cf94246d2c98fe34dfd5466c52af1e4833226e99add017743459b77a4288"}},{"ruleId":"D1","level":"warning","message":{"text":"ExecutableRecord.diffForUpdate (cyclomatic 16): ExecutableRecord.diffForUpdate has cyclomatic complexity 16 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/BSim/src/main/java/ghidra/features/bsim/query/description/ExecutableRecord.java"},"region":{"startLine":851}}}],"partialFingerprints":{"codehealthFindingId/v1":"f853b7cc03d03331668f91e09cdd697320216f07b9bfe01f1f7a682ece027683"}},{"ruleId":"D1","level":"warning","message":{"text":"ElasticDatabase.createExeFilter (cyclomatic 16): ElasticDatabase.createExeFilter has cyclomatic complexity 16 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/BSim/src/main/java/ghidra/features/bsim/query/elastic/ElasticDatabase.java"},"region":{"startLine":2756}}}],"partialFingerprints":{"codehealthFindingId/v1":"3af88d37490781f5fdc042e5c575b434977c94ace25130b2bef6462393eacd80"}},{"ruleId":"D1","level":"warning","message":{"text":"ElasticDatabase.escape (cyclomatic 16): ElasticDatabase.escape has cyclomatic complexity 16 (threshold 15). To reduce it, separate the branches: extract each independent case into its own named function so the top-level body reads as a short sequence of named decisions."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/BSim/src/main/java/ghidra/features/bsim/query/elastic/ElasticDatabase.java"},"region":{"startLine":74}}}],"partialFingerprints":{"codehealthFindingId/v1":"79b5b18928def7a7358ecad6a4159c4a6ee2a017327a4b90abd9ec632c194425"}},{"ruleId":"D1","level":"warning","message":{"text":"BSimLaunchable.readOptions (cyclomatic 16): BSimLaunchable.readOptions has cyclomatic complexity 16 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/BSim/src/main/java/ghidra/features/bsim/query/ingest/BSimLaunchable.java"},"region":{"startLine":289}}}],"partialFingerprints":{"codehealthFindingId/v1":"73f189566f0b0473659333ddb0b2a1fe829af155056044d2f7934326f30c4a63"}},{"ruleId":"D1","level":"warning","message":{"text":"SignatureTask.decompile (cyclomatic 16): SignatureTask.decompile has cyclomatic complexity 16 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/BSim/src/main/java/ghidra/features/bsim/query/GenSignatures.java"},"region":{"startLine":676}}}],"partialFingerprints":{"codehealthFindingId/v1":"2a4be462f35e15c50440fe1eb759f3eb7ef997c283a8d91deedc4fd39dcba63c"}},{"ruleId":"D1","level":"warning","message":{"text":"DynamicStaticSynchronizationPlugin.doCheckCurrentModuleMissing (cyclomatic 16): DynamicStaticSynchronizationPlugin.doCheckCurrentModuleMissing has cyclomatic complexity 16 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/service/modules/DynamicStaticSynchronizationPlugin.java"},"region":{"startLine":640}}}],"partialFingerprints":{"codehealthFindingId/v1":"2db40914d2fe600d303978f3886032e169b57ceb739c086b867e4d1b63cd1e77"}},{"ruleId":"D1","level":"warning","message":{"text":"IsfDataTypeWriter.getIsfObject (cyclomatic 16): IsfDataTypeWriter.getIsfObject has cyclomatic complexity 16 (threshold 15). To reduce it, split the body: these branches sit side by side rather than nested inside one another, so extracting each one on its own would leave a function per branch. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/Debugger-isf/src/main/java/ghidra/program/model/data/ISF/IsfDataTypeWriter.java"},"region":{"startLine":371}}}],"partialFingerprints":{"codehealthFindingId/v1":"a42d375e9269fc60a8e6d413033af80eb511898693d81bcde781426430c08ae1"}},{"ruleId":"D2","level":"warning","message":{"text":"SleighLanguage.read (cognitive 371): SleighLanguage.read has cognitive complexity 371 (threshold 15). Drivers by points: if/else 248, loops 99, error handling 20, boolean chains 4 (nesting depth added 311). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/processors/sleigh/SleighLanguage.java"},"region":{"startLine":554}}}],"partialFingerprints":{"codehealthFindingId/v1":"5835f9e8d1a652311a270f3aa75b86e0be867acc98ebe2e51d5e8346d01360f5"}},{"ruleId":"D2","level":"warning","message":{"text":"MicrosoftDemanglerUtil.processDataType (cognitive 304): MicrosoftDemanglerUtil.processDataType has cognitive complexity 304 (threshold 15). Drivers by points: if/else 277, loops 27 (nesting depth added 235). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/MicrosoftDemangler/src/main/java/ghidra/app/util/demangler/microsoft/MicrosoftDemanglerUtil.java"},"region":{"startLine":627}}}],"partialFingerprints":{"codehealthFindingId/v1":"59bfebec5c4156176490cb7f32fdd69770627b829e0bf0995d5b423a6838b88f"}},{"ruleId":"D2","level":"warning","message":{"text":"DepthFirstSearch.\u003Cinit\u003E (cognitive 245): DepthFirstSearch.\u003Cinit\u003E has cognitive complexity 245 (threshold 15). Drivers by points: if/else 171, loops 67, boolean chains 7 (nesting depth added 190). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Generic/src/main/java/ghidra/util/graph/DepthFirstSearch.java"},"region":{"startLine":50}}}],"partialFingerprints":{"codehealthFindingId/v1":"7a2c90b301e7d73388afbc9a2236d9cfda31f126fa34d5ea65490e8e07364cb8"}},{"ruleId":"D2","level":"warning","message":{"text":"GhidraServer.main (cognitive 245): GhidraServer.main has cognitive complexity 245 (threshold 15). Drivers by points: if/else 166, error handling 38, ternaries 21, boolean chains 12, loops 8 (nesting depth added 161). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/GhidraServer/src/main/java/ghidra/server/remote/GhidraServer.java"},"region":{"startLine":521}}}],"partialFingerprints":{"codehealthFindingId/v1":"e64c07402e9e8f0703feccbd5fb5c4c8551469f021d300a34da74f58ae038563"}},{"ruleId":"D2","level":"warning","message":{"text":"GProperties.saveToJson (cognitive 226): GProperties.saveToJson has cognitive complexity 226 (threshold 15). Drivers by points: loops 173, if/else 53 (nesting depth added 190). To reduce it, break up the iteration: give each loop body a named function, and split a multi-phase loop into one function per phase so no single body carries the whole pipeline."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Generic/src/main/java/ghidra/framework/options/GProperties.java"},"region":{"startLine":670}}}],"partialFingerprints":{"codehealthFindingId/v1":"1dd22255729f261fd4756b94c9f5c7579a4e36cd3644518ebef7859106c0b93b"}},{"ruleId":"D2","level":"warning","message":{"text":"MIPS_ElfRelocationHandler.relocate (cognitive 219): MIPS_ElfRelocationHandler.relocate has cognitive complexity 219 (threshold 15). Drivers by points: if/else 204, boolean chains 9, ternaries 5, match/switch 1 (nesting depth added 112). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Processors/MIPS/src/main/java/ghidra/app/util/bin/format/elf/relocation/MIPS_ElfRelocationHandler.java"},"region":{"startLine":60}}}],"partialFingerprints":{"codehealthFindingId/v1":"cd72fa38e874b59b6a6cb602c4c28eed6b9b047925ac78fe1f09c6c58add9a6e"}},{"ruleId":"D2","level":"warning","message":{"text":"GProperties.processElement (cognitive 161): GProperties.processElement has cognitive complexity 161 (threshold 15). Drivers by points: if/else 88, loops 63, error handling 9, boolean chains 1 (nesting depth added 115). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Generic/src/main/java/ghidra/framework/options/GProperties.java"},"region":{"startLine":146}}}],"partialFingerprints":{"codehealthFindingId/v1":"f417281deeb62666be791e45dc8aa51674475818f1ac9808ad2b815646815a23"}},{"ruleId":"D2","level":"warning","message":{"text":"PseudoDisassembler.checkValidSubroutine (cognitive 149): PseudoDisassembler.checkValidSubroutine has cognitive complexity 149 (threshold 15). Drivers by points: if/else 110, loops 18, boolean chains 15, error handling 6 (nesting depth added 89). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/util/PseudoDisassembler.java"},"region":{"startLine":609}}}],"partialFingerprints":{"codehealthFindingId/v1":"443196ea55b7ac7b1a33c16f8268f7f29a998ef08bb45384280186c413419f89"}},{"ruleId":"D2","level":"warning","message":{"text":"Pic17c7xxAnalyzer.handleStatusModification (cognitive 122): Pic17c7xxAnalyzer.handleStatusModification has cognitive complexity 122 (threshold 15). Drivers by points: if/else 112, boolean chains 10 (nesting depth added 78). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Processors/PIC/src/main/java/ghidra/app/plugin/core/analysis/Pic17c7xxAnalyzer.java"},"region":{"startLine":806}}}],"partialFingerprints":{"codehealthFindingId/v1":"a5d847012b0918e106457bff40a2f032977f7603dec17507f5e7cacbb5be4456"}},{"ruleId":"D2","level":"warning","message":{"text":"CodeManager.addInstructions (cognitive 115): CodeManager.addInstructions has cognitive complexity 115 (threshold 15). Drivers by points: if/else 80, error handling 14, loops 10, boolean chains 6, ternaries 5 (nesting depth added 75). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/code/CodeManager.java"},"region":{"startLine":408}}}],"partialFingerprints":{"codehealthFindingId/v1":"c343b11e0dd5d98a2afb1e508286b7ab52b9a40a7b67220c7267aea0a86d50ed"}},{"ruleId":"D2","level":"warning","message":{"text":"BitmapResource.decompress (cognitive 115): BitmapResource.decompress has cognitive complexity 115 (threshold 15). Drivers by points: if/else 77, loops 18, match/switch 11, error handling 7, boolean chains 2 (nesting depth added 86). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/BitmapResource.java"},"region":{"startLine":482}}}],"partialFingerprints":{"codehealthFindingId/v1":"b21d07c0abfc9797f5afece4c6b0c8ce4b0606458adf8c1bbab461fd34077104"}},{"ruleId":"D2","level":"warning","message":{"text":"SimpleDiffUtility.getMatchingExternalSymbol (cognitive 108): SimpleDiffUtility.getMatchingExternalSymbol has cognitive complexity 108 (threshold 15). Drivers by points: if/else 84, loops 11, boolean chains 9, ternaries 4 (nesting depth added 62). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/util/SimpleDiffUtility.java"},"region":{"startLine":628}}}],"partialFingerprints":{"codehealthFindingId/v1":"bb640bd0ac968639db1fd49042123032b0c183ef34e02b18e85fea5d89fd227c"}},{"ruleId":"D2","level":"warning","message":{"text":"ConsistencyChecker.sizeRestriction (cognitive 101): ConsistencyChecker.sizeRestriction has cognitive complexity 101 (threshold 15). Drivers by points: if/else 90, boolean chains 10, match/switch 1 (nesting depth added 44). The drivers above price the dispatch low by construction \u2014 a dispatch is charged once however many cases it lists, while each branch inside an arm is charged in full \u2014 so most of this count is what the case bodies hold, and the arms are where it can be reduced. To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slgh_compile/ConsistencyChecker.java"},"region":{"startLine":70}}}],"partialFingerprints":{"codehealthFindingId/v1":"6664334d091b6bee1e3ea259237990aab133344a1aabe874cbd487301515376f"}},{"ruleId":"D2","level":"warning","message":{"text":"HighFunctionDBUtil.updateDBVariable (cognitive 99): HighFunctionDBUtil.updateDBVariable has cognitive complexity 99 (threshold 15). Drivers by points: if/else 76, error handling 11, loops 8, boolean chains 4 (nesting depth added 60). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/pcode/HighFunctionDBUtil.java"},"region":{"startLine":569}}}],"partialFingerprints":{"codehealthFindingId/v1":"0248bb4c5b7d332aed4ffd43437b026c223a33f80135bb4de43f583cd221b17b"}},{"ruleId":"D2","level":"warning","message":{"text":"PdbResearch.studyCompositeForwardReferenceAndDefinition (cognitive 96): PdbResearch.studyCompositeForwardReferenceAndDefinition has cognitive complexity 96 (threshold 15). Drivers by points: if/else 75, ternaries 11, boolean chains 5, loops 5 (nesting depth added 69). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/PDB/src/main/java/ghidra/app/util/pdb/pdbapplicator/PdbResearch.java"},"region":{"startLine":849}}}],"partialFingerprints":{"codehealthFindingId/v1":"0b75d0eaeed81a2d1b0a98e75512ec24e4227867b3025564ba8749cc749a545a"}},{"ruleId":"D2","level":"warning","message":{"text":"GnuDemanglerParser.parseDataType (cognitive 94): GnuDemanglerParser.parseDataType has cognitive complexity 94 (threshold 15). Drivers by points: if/else 90, boolean chains 3, loops 1 (nesting depth added 53). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/GnuDemangler/src/main/java/ghidra/app/util/demangler/gnu/GnuDemanglerParser.java"},"region":{"startLine":875}}}],"partialFingerprints":{"codehealthFindingId/v1":"deb625ad406be34cfafb375c30da3e03b61659b1220067ae4fbfb97e568b5fb9"}},{"ruleId":"D2","level":"warning","message":{"text":"PcodeParity.evalBinaryExpression (cognitive 94): PcodeParity.evalBinaryExpression has cognitive complexity 94 (threshold 15). Drivers by points: if/else 48, ternaries 35, boolean chains 11 (nesting depth added 61). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Extensions/Lisa/src/main/java/ghidra/lisa/pcode/analyses/PcodeParity.java"},"region":{"startLine":165}}}],"partialFingerprints":{"codehealthFindingId/v1":"42cbf284328cd417def6eff4d34cb7759276f6f333088edcba944704404ddc96"}},{"ruleId":"D2","level":"warning","message":{"text":"PcodeStability.assign (cognitive 93): PcodeStability.assign has cognitive complexity 93 (threshold 15). Drivers by points: if/else 75, boolean chains 13, ternaries 5 (nesting depth added 49). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Extensions/Lisa/src/main/java/ghidra/lisa/pcode/analyses/PcodeStability.java"},"region":{"startLine":467}}}],"partialFingerprints":{"codehealthFindingId/v1":"882c55415606074d75a96df39634344fb39315cfa8680ee102b520a6aec1c4ec"}},{"ruleId":"D2","level":"warning","message":{"text":"Minidump.buildStructures (cognitive 92): Minidump.buildStructures has cognitive complexity 92 (threshold 15). Drivers by points: if/else 66, loops 24, boolean chains 2 (nesting depth added 48). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/dump/mdmp/Minidump.java"},"region":{"startLine":145}}}],"partialFingerprints":{"codehealthFindingId/v1":"64b38d061fff0457fe5c4aae1c3593d187fdf48f1cab5441ecb191af7ab9c7e0"}},{"ruleId":"D2","level":"warning","message":{"text":"CodeManager.getUndefinedRanges (cognitive 90): CodeManager.getUndefinedRanges has cognitive complexity 90 (threshold 15). Drivers by points: if/else 62, error handling 14, boolean chains 6, ternaries 5, loops 3 (nesting depth added 53). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/code/CodeManager.java"},"region":{"startLine":1504}}}],"partialFingerprints":{"codehealthFindingId/v1":"42a1a463164a22b35b57552b9312a767e289c30124ae6f5f152c07321e09222d"}},{"ruleId":"D2","level":"warning","message":{"text":"SleighPreprocessor.processInternal (cognitive 89): SleighPreprocessor.processInternal has cognitive complexity 89 (threshold 15). Drivers by points: if/else 82, ternaries 5, boolean chains 1, loops 1 (nesting depth added 57). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/sleigh/grammar/SleighPreprocessor.java"},"region":{"startLine":96}}}],"partialFingerprints":{"codehealthFindingId/v1":"10c41063b378f27124c2d90ab6c7444b1babac40a30f8c8e56b9411aa063a3ba"}},{"ruleId":"D2","level":"warning","message":{"text":"BasicCompilerSpec.restoreXml (cognitive 88): BasicCompilerSpec.restoreXml has cognitive complexity 88 (threshold 15). Drivers by points: if/else 87, loops 1 (nesting depth added 55). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/lang/BasicCompilerSpec.java"},"region":{"startLine":582}}}],"partialFingerprints":{"codehealthFindingId/v1":"f2dd9f9c9c8b5d0600b72015dd17c9c7a1bc023d17fe6a9b413043f28b58b706"}},{"ruleId":"D2","level":"warning","message":{"text":"SleighHighlightingCalculator.provideHighlightingFor (cognitive 87): SleighHighlightingCalculator.provideHighlightingFor has cognitive complexity 87 (threshold 15). Drivers by points: if/else 82, boolean chains 4, loops 1 (nesting depth added 59). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"GhidraBuild/EclipsePlugins/GhidraSleighEditor/ghidra.xtext.sleigh.ui/src/ghidra/xtext/sleigh/ui/SleighHighlightingCalculator.java"},"region":{"startLine":60}}}],"partialFingerprints":{"codehealthFindingId/v1":"7220590521f3cb7ceb68f6c43431708b3de9285781e9b387f04f439fe29d49c1"}},{"ruleId":"D2","level":"warning","message":{"text":"Disassembler.disassembleInstructionBlock (cognitive 86): Disassembler.disassembleInstructionBlock has cognitive complexity 86 (threshold 15). Drivers by points: if/else 72, boolean chains 10, error handling 3, loops 1 (nesting depth added 45). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/disassemble/Disassembler.java"},"region":{"startLine":907}}}],"partialFingerprints":{"codehealthFindingId/v1":"7a50b74996b531b71c0dc3a4cceeb7f9773dc9aedbc7de747e50c5897533260c"}},{"ruleId":"D2","level":"warning","message":{"text":"RefTypeFactory.getDefaultStackRefType (cognitive 84): RefTypeFactory.getDefaultStackRefType has cognitive complexity 84 (threshold 15). Drivers by points: if/else 61, loops 9, boolean chains 7, ternaries 7 (nesting depth added 52). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/symbol/RefTypeFactory.java"},"region":{"startLine":188}}}],"partialFingerprints":{"codehealthFindingId/v1":"2fa5d83123291244c541467729d743b6d318167c47bd9a3c2b59721e31dc8016"}},{"ruleId":"D2","level":"warning","message":{"text":"DecompileOptions.encode (cognitive 80): DecompileOptions.encode has cognitive complexity 80 (threshold 15). Drivers by points: ternaries 45, if/else 34, boolean chains 1 (nesting depth added 22). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/Decompiler/src/main/java/ghidra/app/decompiler/DecompileOptions.java"},"region":{"startLine":863}}}],"partialFingerprints":{"codehealthFindingId/v1":"e1fd37915f263faf3635a7f6c27ae5a483f0195df3355caae750dcd0abd821a5"}},{"ruleId":"D2","level":"warning","message":{"text":"FlowOverride.getModifiedFlowType (cognitive 78): FlowOverride.getModifiedFlowType has cognitive complexity 78 (threshold 15). Drivers by points: if/else 70, boolean chains 8 (nesting depth added 46). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/listing/FlowOverride.java"},"region":{"startLine":119}}}],"partialFingerprints":{"codehealthFindingId/v1":"5914492c3961a6de731447f81b5370f4c1c3db056f4a9d83160ac74fb4bbce1d"}},{"ruleId":"D2","level":"warning","message":{"text":"MipsAddressAnalyzer.fixJumpTable (cognitive 73): MipsAddressAnalyzer.fixJumpTable has cognitive complexity 73 (threshold 15). Drivers by points: if/else 60, boolean chains 12, loops 1 (nesting depth added 33). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Processors/MIPS/src/main/java/ghidra/app/plugin/core/analysis/MipsAddressAnalyzer.java"},"region":{"startLine":600}}}],"partialFingerprints":{"codehealthFindingId/v1":"ca11c1cdc513649c002c11f15e5ec27d16f99e574cdf61481dacd7fcf6080726"}},{"ruleId":"D2","level":"warning","message":{"text":"Pic17c7xxAnalyzer.handlePclathModification (cognitive 72): Pic17c7xxAnalyzer.handlePclathModification has cognitive complexity 72 (threshold 15). Drivers by points: if/else 68, boolean chains 4 (nesting depth added 46). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Processors/PIC/src/main/java/ghidra/app/plugin/core/analysis/Pic17c7xxAnalyzer.java"},"region":{"startLine":1020}}}],"partialFingerprints":{"codehealthFindingId/v1":"9ad759ea2cea55401342bcb2fcc50e93b647ff402068c9c6ae42d68133b69861"}},{"ruleId":"D2","level":"warning","message":{"text":"FillOutStructureHelper.fillOutStructureDef (cognitive 69): FillOutStructureHelper.fillOutStructureDef has cognitive complexity 69 (threshold 15). Drivers by points: if/else 56, loops 4, ternaries 4, match/switch 3, boolean chains 2 (nesting depth added 47). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/Decompiler/src/main/java/ghidra/app/decompiler/util/FillOutStructureHelper.java"},"region":{"startLine":492}}}],"partialFingerprints":{"codehealthFindingId/v1":"7685b761b81bf19c136ee731dcc7dd1353a94fabeb0798152beeb966cbf9c835"}},{"ruleId":"D2","level":"warning","message":{"text":"Pic17c7xxAnalyzer.handleBSRModification (cognitive 68): Pic17c7xxAnalyzer.handleBSRModification has cognitive complexity 68 (threshold 15). Drivers by points: if/else 63, boolean chains 5 (nesting depth added 42). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Processors/PIC/src/main/java/ghidra/app/plugin/core/analysis/Pic17c7xxAnalyzer.java"},"region":{"startLine":941}}}],"partialFingerprints":{"codehealthFindingId/v1":"36c5bc23c86ce60e091e2432dc29f389ee0fa0b0a7716659dbd1502e8e13c128"}},{"ruleId":"D2","level":"warning","message":{"text":"MessageDigestFidHasher.hash (cognitive 67): MessageDigestFidHasher.hash has cognitive complexity 67 (threshold 15). Drivers by points: if/else 45, loops 15, error handling 6, boolean chains 1 (nesting depth added 42). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/FunctionID/src/main/java/ghidra/feature/fid/hash/MessageDigestFidHasher.java"},"region":{"startLine":83}}}],"partialFingerprints":{"codehealthFindingId/v1":"e256416751ed596e9776f8c9896209b3d5f540e946f8b5dddfa6b912a59fbd16"}},{"ruleId":"D2","level":"warning","message":{"text":"PcodeSign.evalBinaryExpression (cognitive 67): PcodeSign.evalBinaryExpression has cognitive complexity 67 (threshold 15). Drivers by points: if/else 51, boolean chains 10, ternaries 6 (nesting depth added 27). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Extensions/Lisa/src/main/java/ghidra/lisa/pcode/analyses/PcodeSign.java"},"region":{"startLine":172}}}],"partialFingerprints":{"codehealthFindingId/v1":"3dbd47e6e1c465fb04b48ada205e4ebfdbb1512afd25c590f533ff9f6abf75cd"}},{"ruleId":"D2","level":"warning","message":{"text":"Pic12Analyzer.handleFSRModification (cognitive 65): Pic12Analyzer.handleFSRModification has cognitive complexity 65 (threshold 15). Drivers by points: if/else 64, boolean chains 1 (nesting depth added 44). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Processors/PIC/src/main/java/ghidra/app/plugin/core/analysis/Pic12Analyzer.java"},"region":{"startLine":587}}}],"partialFingerprints":{"codehealthFindingId/v1":"2c2eac771e657e88bf9ea588e5993f4738d3acbc63a70b515c957e50d4d971c0"}},{"ruleId":"D2","level":"warning","message":{"text":"ARM_ElfRelocationHandler.relocate (cognitive 64): ARM_ElfRelocationHandler.relocate has cognitive complexity 64 (threshold 15). Drivers by points: if/else 52, boolean chains 6, ternaries 4, match/switch 2 (nesting depth added 27). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Processors/ARM/src/main/java/ghidra/app/util/bin/format/elf/relocation/ARM_ElfRelocationHandler.java"},"region":{"startLine":55}}}],"partialFingerprints":{"codehealthFindingId/v1":"e6222b546e1919f57c713eba06e14c3aa7eed56884263539b12d430d509864f8"}},{"ruleId":"D2","level":"warning","message":{"text":"JSONParser.parse (cognitive 64): JSONParser.parse has cognitive complexity 64 (threshold 15). Drivers by points: if/else 45, loops 8, ternaries 6, boolean chains 3, match/switch 2 (nesting depth added 40). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Generic/src/main/java/generic/json/JSONParser.java"},"region":{"startLine":193}}}],"partialFingerprints":{"codehealthFindingId/v1":"8349adeb55c0930cd114ca0b1365cc521fbe61184e814792ac5ef239cf006b65"}},{"ruleId":"D2","level":"warning","message":{"text":"HighlightAndGraphAction.addDataFlowFeatureGraph (cognitive 64): HighlightAndGraphAction.addDataFlowFeatureGraph has cognitive complexity 64 (threshold 15). Drivers by points: if/else 50, ternaries 7, loops 3, boolean chains 2, match/switch 2 (nesting depth added 34). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/BSimFeatureVisualizer/src/main/java/ghidra/bsfv/HighlightAndGraphAction.java"},"region":{"startLine":319}}}],"partialFingerprints":{"codehealthFindingId/v1":"decb6ea11f13f725685f0f6e91dbd21925434bb976d31eed4ff7da763a3b9593"}},{"ruleId":"D2","level":"warning","message":{"text":"ArmAnalyzer.recoverSwitches (cognitive 63): ArmAnalyzer.recoverSwitches has cognitive complexity 63 (threshold 15). Drivers by points: if/else 40, loops 14, boolean chains 5, error handling 4 (nesting depth added 38). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Processors/ARM/src/main/java/ghidra/app/plugin/core/analysis/ArmAnalyzer.java"},"region":{"startLine":272}}}],"partialFingerprints":{"codehealthFindingId/v1":"fee9b58106e6bc6db6a3c8bdc79928f70b68c5e5b8e65ef769a24a110f48bb70"}},{"ruleId":"D2","level":"warning","message":{"text":"ArtMethod.toDataType (cognitive 63): ArtMethod.toDataType has cognitive complexity 63 (threshold 15). Drivers by points: if/else 61, boolean chains 2 (nesting depth added 36). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/android/art/ArtMethod.java"},"region":{"startLine":296}}}],"partialFingerprints":{"codehealthFindingId/v1":"9b22a14e783a7a104bfbc56ab2c9257f13718e31fdb24d9b0b26fe94cfdf1563"}},{"ruleId":"D2","level":"warning","message":{"text":"ArtMethod.\u003Cinit\u003E (cognitive 63): ArtMethod.\u003Cinit\u003E has cognitive complexity 63 (threshold 15). Drivers by points: if/else 61, boolean chains 2 (nesting depth added 36). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/android/art/ArtMethod.java"},"region":{"startLine":50}}}],"partialFingerprints":{"codehealthFindingId/v1":"746dd431f24acff4d7f0579ff505a81eaa955f75a14c0c9dc4fb959f81590743"}},{"ruleId":"D2","level":"warning","message":{"text":"Pinning.ngramPinner (cognitive 63): Pinning.ngramPinner has cognitive complexity 63 (threshold 15). Drivers by points: if/else 33, loops 26, boolean chains 4 (nesting depth added 41). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/CodeCompare/src/main/java/ghidra/features/codecompare/graphanalysis/Pinning.java"},"region":{"startLine":568}}}],"partialFingerprints":{"codehealthFindingId/v1":"d772406a07690420623eff5f0a65bd572975ed0721943dd904ea4b8e6ec1f822"}},{"ruleId":"D2","level":"warning","message":{"text":"Varnode.decode (cognitive 62): Varnode.decode has cognitive complexity 62 (threshold 15). Drivers by points: if/else 56, boolean chains 2, error handling 2, loops 2 (nesting depth added 36). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/pcode/Varnode.java"},"region":{"startLine":388}}}],"partialFingerprints":{"codehealthFindingId/v1":"da4d504d6f73b77f7b29813f7ce36984dced8f66d292bd943e6af08bcba9198b"}},{"ruleId":"D2","level":"warning","message":{"text":"FuncRecord.\u003Cinit\u003E (cognitive 62): FuncRecord.\u003Cinit\u003E has cognitive complexity 62 (threshold 15). Drivers by points: loops 29, if/else 26, boolean chains 4, error handling 3 (nesting depth added 41). To reduce it, break up the iteration: give each loop body a named function, and split a multi-phase loop into one function per phase so no single body carries the whole pipeline."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/BytePatterns/src/main/java/ghidra/app/analyzers/FuncRecord.java"},"region":{"startLine":54}}}],"partialFingerprints":{"codehealthFindingId/v1":"6a92a7b5615ac725ad59c1070dc27829f81636baadeb2d9640ed0fd5eff00b02"}},{"ruleId":"D2","level":"warning","message":{"text":"PointerDataType.getAddressValue (cognitive 61): PointerDataType.getAddressValue has cognitive complexity 61 (threshold 15). Drivers by points: if/else 56, boolean chains 3, error handling 1, ternaries 1 (nesting depth added 24). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/PointerDataType.java"},"region":{"startLine":411}}}],"partialFingerprints":{"codehealthFindingId/v1":"ff115f7ce4ef4ccde812604368d2d14fcfc26b6506c10826be232d71334e61de"}},{"ruleId":"D2","level":"warning","message":{"text":"PropertiesSarifMgr.processPropertyMapEntry (cognitive 61): PropertiesSarifMgr.processPropertyMapEntry has cognitive complexity 61 (threshold 15). Drivers by points: if/else 58, boolean chains 3 (nesting depth added 38). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/Sarif/src/main/java/sarif/managers/PropertiesSarifMgr.java"},"region":{"startLine":88}}}],"partialFingerprints":{"codehealthFindingId/v1":"995b8908dba716263791c41ca8aa80c059a307a4fe8c178b95e078b3b387f936"}},{"ruleId":"D2","level":"warning","message":{"text":"IllegalCharCppTransformer.simplify (cognitive 60): IllegalCharCppTransformer.simplify has cognitive complexity 60 (threshold 15). Drivers by points: if/else 55, boolean chains 4, loops 1 (nesting depth added 42). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/symbol/IllegalCharCppTransformer.java"},"region":{"startLine":70}}}],"partialFingerprints":{"codehealthFindingId/v1":"ce7d625f1a749cb9ad00c8825f64320e7d426876c2c4f03bdcf1b978b6e0987e"}},{"ruleId":"D2","level":"warning","message":{"text":"FieldKeyRecordIterator.\u003Cinit\u003E (cognitive 60): FieldKeyRecordIterator.\u003Cinit\u003E has cognitive complexity 60 (threshold 15). Drivers by points: if/else 40, ternaries 18, boolean chains 2 (nesting depth added 37). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/DB/src/main/java/db/Table.java"},"region":{"startLine":2360}}}],"partialFingerprints":{"codehealthFindingId/v1":"5f27719147bfd25f22f1adf24c88d1353e1c665d422b6e2f1e4b6731b00dbb0c"}},{"ruleId":"D2","level":"warning","message":{"text":"LongDurationFieldKeyIterator.initialize (cognitive 60): LongDurationFieldKeyIterator.initialize has cognitive complexity 60 (threshold 15). Drivers by points: if/else 44, ternaries 14, boolean chains 2 (nesting depth added 36). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/DB/src/main/java/db/Table.java"},"region":{"startLine":3505}}}],"partialFingerprints":{"codehealthFindingId/v1":"9877b65a3f64c8e898b2b12af42c98c92c24a245fb4fe7b55f06d874debec60b"}},{"ruleId":"D2","level":"warning","message":{"text":"CrushedPNGUtil.removeRowFilters (cognitive 60): CrushedPNGUtil.removeRowFilters has cognitive complexity 60 (threshold 15). Drivers by points: if/else 38, loops 19, match/switch 2, boolean chains 1 (nesting depth added 40). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/ios/png/CrushedPNGUtil.java"},"region":{"startLine":318}}}],"partialFingerprints":{"codehealthFindingId/v1":"0677617bd2f30c0f70cac4527a59c4d74e25cd1710fde7e1a18ed3d57c027d36"}},{"ruleId":"D2","level":"warning","message":{"text":"TokenPattern.resolveTokens (cognitive 59): TokenPattern.resolveTokens has cognitive complexity 59 (threshold 15). Drivers by points: if/else 46, loops 10, boolean chains 2, ternaries 1 (nesting depth added 23). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghpatexpress/TokenPattern.java"},"region":{"startLine":82}}}],"partialFingerprints":{"codehealthFindingId/v1":"18a7a0527c07e53304fa7f2e0dd26a78a2d8dee08fa6c46507a25dae15dd654a"}},{"ruleId":"D2","level":"warning","message":{"text":"CompositeTypeApplier.precheckOrScheduleDependencies (cognitive 59): CompositeTypeApplier.precheckOrScheduleDependencies has cognitive complexity 59 (threshold 15). Drivers by points: if/else 49, loops 10 (nesting depth added 35). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/PDB/src/main/java/ghidra/app/util/pdb/pdbapplicator/CompositeTypeApplier.java"},"region":{"startLine":497}}}],"partialFingerprints":{"codehealthFindingId/v1":"5fae734085d55b99bfbbe16a34b937d6aa0485c80e9ddd0a1807f0b7faa18861"}},{"ruleId":"D2","level":"warning","message":{"text":"CrushedPNGUtil.applyRowFilters (cognitive 59): CrushedPNGUtil.applyRowFilters has cognitive complexity 59 (threshold 15). Drivers by points: if/else 37, loops 19, match/switch 2, boolean chains 1 (nesting depth added 40). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/ios/png/CrushedPNGUtil.java"},"region":{"startLine":426}}}],"partialFingerprints":{"codehealthFindingId/v1":"ef2c1bb3cb08d50d64e0f09189ffa621716f735de33385c48b2fe17200eaeea3"}},{"ruleId":"D2","level":"warning","message":{"text":"SleighLanguage.loadIndex (cognitive 58): SleighLanguage.loadIndex has cognitive complexity 58 (threshold 15). Drivers by points: if/else 57, loops 1 (nesting depth added 38). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/processors/sleigh/SleighLanguage.java"},"region":{"startLine":1272}}}],"partialFingerprints":{"codehealthFindingId/v1":"2b05f2575e4b1b6f0f98700e47ad073d23f8e3b49c90b68ed1abdc0c01c1cc63"}},{"ruleId":"D2","level":"warning","message":{"text":"RefTypeFactory.getDefaultMemoryRefType (cognitive 58): RefTypeFactory.getDefaultMemoryRefType has cognitive complexity 58 (threshold 15). Drivers by points: if/else 45, loops 8, boolean chains 5 (nesting depth added 30). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/symbol/RefTypeFactory.java"},"region":{"startLine":398}}}],"partialFingerprints":{"codehealthFindingId/v1":"1cfcedb133c2946b82aa94ff4cbe95b794099741a564509888833041a5bb45ce"}},{"ruleId":"D2","level":"warning","message":{"text":"SpecExtension.parseExtension (cognitive 57): SpecExtension.parseExtension has cognitive complexity 57 (threshold 15). Drivers by points: if/else 34, error handling 20, loops 3 (nesting depth added 38). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/SpecExtension.java"},"region":{"startLine":427}}}],"partialFingerprints":{"codehealthFindingId/v1":"c8ae62126c93250d75a84cc156109c351c18dec73f5621b7185b6796b6919dcf"}},{"ruleId":"D2","level":"warning","message":{"text":"RefTypeFactory.getMemRefType (cognitive 57): RefTypeFactory.getMemRefType has cognitive complexity 57 (threshold 15). Drivers by points: if/else 40, boolean chains 12, loops 5 (nesting depth added 30). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/symbol/RefTypeFactory.java"},"region":{"startLine":529}}}],"partialFingerprints":{"codehealthFindingId/v1":"a8641712089c8faeb1c9d7e7b37f36c78ee427fad3aeb7b2ecb7ddf25a3cab87"}},{"ruleId":"D2","level":"warning","message":{"text":"GhidraServer.getRepositoryServer (cognitive 57): GhidraServer.getRepositoryServer has cognitive complexity 57 (threshold 15). Drivers by points: if/else 40, error handling 15, boolean chains 2 (nesting depth added 35). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/GhidraServer/src/main/java/ghidra/server/remote/GhidraServer.java"},"region":{"startLine":263}}}],"partialFingerprints":{"codehealthFindingId/v1":"57099b6f1ac5824f9de92e2db98184296ba246092e06142e0539039d75de3a02"}},{"ruleId":"D2","level":"warning","message":{"text":"PseudoDisassembler.followSubFlows (cognitive 56): PseudoDisassembler.followSubFlows has cognitive complexity 56 (threshold 15). Drivers by points: if/else 39, loops 13, error handling 3, boolean chains 1 (nesting depth added 33). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/util/PseudoDisassembler.java"},"region":{"startLine":387}}}],"partialFingerprints":{"codehealthFindingId/v1":"2c5129964442afc6b8edeb264bb809072f9d57542982c81d77b015d8ef9c28e0"}},{"ruleId":"D2","level":"warning","message":{"text":"SimpleDestReferenceIterator.getDestinations (cognitive 56): SimpleDestReferenceIterator.getDestinations has cognitive complexity 56 (threshold 15). Drivers by points: if/else 35, ternaries 8, loops 7, boolean chains 6 (nesting depth added 28). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/block/SimpleDestReferenceIterator.java"},"region":{"startLine":99}}}],"partialFingerprints":{"codehealthFindingId/v1":"94bc5caf05c63512c6432caef4a792bf87db28c3139a8208d7f4f0cff0e972c0"}},{"ruleId":"D2","level":"warning","message":{"text":"VariableOffset.getObjects (cognitive 56): VariableOffset.getObjects has cognitive complexity 56 (threshold 15). Drivers by points: if/else 38, ternaries 9, boolean chains 7, loops 2 (nesting depth added 28). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/listing/VariableOffset.java"},"region":{"startLine":124}}}],"partialFingerprints":{"codehealthFindingId/v1":"59d4d794aa74248fe30b7d5b836907bc03edcec33018a50cd57a7357355431f4"}},{"ruleId":"D2","level":"warning","message":{"text":"MyListener.keyPressed (cognitive 56): MyListener.keyPressed has cognitive complexity 56 (threshold 15). Drivers by points: if/else 55, boolean chains 1 (nesting depth added 37). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Docking/src/main/java/docking/widgets/autocomplete/TextComponentAutocompleter.java"},"region":{"startLine":921}}}],"partialFingerprints":{"codehealthFindingId/v1":"225a284b7fa8423acae322e26143de75f98004e14161d7ec05d210bfe990192e"}},{"ruleId":"D2","level":"warning","message":{"text":"ServerAdmin.execute (cognitive 56): ServerAdmin.execute has cognitive complexity 56 (threshold 15). Drivers by points: if/else 37, boolean chains 7, error handling 5, loops 4, match/switch 2, ternaries 1 (nesting depth added 25). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/GhidraServer/src/main/java/ghidra/server/ServerAdmin.java"},"region":{"startLine":82}}}],"partialFingerprints":{"codehealthFindingId/v1":"34d08212652ef92921d6842401bb108187b9480c4a91770c381a7f73a6fd5da2"}},{"ruleId":"D2","level":"warning","message":{"text":"GHelpBuilder.parseArguments (cognitive 55): GHelpBuilder.parseArguments has cognitive complexity 55 (threshold 15). Drivers by points: if/else 41, loops 14 (nesting depth added 35). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Help/src/main/java/help/GHelpBuilder.java"},"region":{"startLine":279}}}],"partialFingerprints":{"codehealthFindingId/v1":"cb929165970ebce1e7e7ff69d97b239968ff8cff26570c2f22c4e074bb9dd6e8"}},{"ruleId":"D2","level":"warning","message":{"text":"MaximizeSpecificColumnGridLayout.getComputedColumnWidths (cognitive 55): MaximizeSpecificColumnGridLayout.getComputedColumnWidths has cognitive complexity 55 (threshold 15). Drivers by points: if/else 30, loops 16, ternaries 7, boolean chains 2 (nesting depth added 34). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Gui/src/main/java/ghidra/util/layout/MaximizeSpecificColumnGridLayout.java"},"region":{"startLine":155}}}],"partialFingerprints":{"codehealthFindingId/v1":"1bc2aeabdd14486bdb071b9f6f6fb5daae120dca475c06cb5c238528dfa8e555"}},{"ruleId":"D2","level":"warning","message":{"text":"AddressSet.xorSets (cognitive 54): AddressSet.xorSets has cognitive complexity 54 (threshold 15). Drivers by points: ternaries 48, loops 3, match/switch 2, boolean chains 1 (nesting depth added 31). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/address/AddressSet.java"},"region":{"startLine":1008}}}],"partialFingerprints":{"codehealthFindingId/v1":"b1bbebae4f9f2e7c7c649ddc7fe13f4ebeb4d979d0dd32acc2bda761357ac1bb"}},{"ruleId":"D2","level":"warning","message":{"text":"CrushedPNGUtil.getUncrushedPNGBytes (cognitive 54): CrushedPNGUtil.getUncrushedPNGBytes has cognitive complexity 54 (threshold 15). Drivers by points: if/else 39, loops 12, boolean chains 3 (nesting depth added 29). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/ios/png/CrushedPNGUtil.java"},"region":{"startLine":23}}}],"partialFingerprints":{"codehealthFindingId/v1":"01744e99fb376d2fc32e5344f6c704632a41e32b0bf5e59cc27d2f097364ebfc"}},{"ruleId":"D2","level":"warning","message":{"text":"ExecutableScorer.pairFunctions (cognitive 54): ExecutableScorer.pairFunctions has cognitive complexity 54 (threshold 15). Drivers by points: if/else 33, loops 21 (nesting depth added 39). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/BSim/src/main/java/ghidra/features/bsim/query/client/ExecutableScorer.java"},"region":{"startLine":354}}}],"partialFingerprints":{"codehealthFindingId/v1":"199334cfde977989389d57cc39220a0be81c7d1e766efd0421ffcb2b7f861d1f"}},{"ruleId":"D2","level":"warning","message":{"text":"PcodeDataflowConstantPropagation.eval (cognitive 54): PcodeDataflowConstantPropagation.eval has cognitive complexity 54 (threshold 15). Drivers by points: if/else 43, boolean chains 4, ternaries 3, error handling 2, loops 2 (nesting depth added 26). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Extensions/Lisa/src/main/java/ghidra/lisa/pcode/analyses/PcodeDataflowConstantPropagation.java"},"region":{"startLine":88}}}],"partialFingerprints":{"codehealthFindingId/v1":"f015271f05d51b19f7defbe0d90c61030bee52b5fef48ea102397407f99618b5"}},{"ruleId":"D2","level":"warning","message":{"text":"Pic12Analyzer.handleStatusModification (cognitive 53): Pic12Analyzer.handleStatusModification has cognitive complexity 53 (threshold 15). Drivers by points: if/else 50, boolean chains 3 (nesting depth added 32). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Processors/PIC/src/main/java/ghidra/app/plugin/core/analysis/Pic12Analyzer.java"},"region":{"startLine":523}}}],"partialFingerprints":{"codehealthFindingId/v1":"be225a249ede92c560b4c37a1de356a503b8493128d30f94d5ce361ad9ad1664"}},{"ruleId":"D2","level":"warning","message":{"text":"ConstructorPcodeTemplate.optimize (cognitive 52): ConstructorPcodeTemplate.optimize has cognitive complexity 52 (threshold 15). Drivers by points: if/else 49, error handling 2, loops 1 (nesting depth added 35). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/processors/generic/ConstructorPcodeTemplate.java"},"region":{"startLine":72}}}],"partialFingerprints":{"codehealthFindingId/v1":"34d1e72bb742db75c17e56ca956e37feea668d8fa5e74c9ffe775f39550a5332"}},{"ruleId":"D2","level":"warning","message":{"text":"Pic18Analyzer.handleBSRModification (cognitive 51): Pic18Analyzer.handleBSRModification has cognitive complexity 51 (threshold 15). Drivers by points: if/else 49, boolean chains 2 (nesting depth added 32). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Processors/PIC/src/main/java/ghidra/app/plugin/core/analysis/Pic18Analyzer.java"},"region":{"startLine":648}}}],"partialFingerprints":{"codehealthFindingId/v1":"f9cb0b6de0a8c7ca51f9df101e6ab4c8d42703e4839e56dc65b04dc9c5fc1ef4"}},{"ruleId":"D2","level":"warning","message":{"text":"1.evaluateContext (cognitive 51): 1.evaluateContext has cognitive complexity 51 (threshold 15). Drivers by points: if/else 41, boolean chains 5, error handling 5 (nesting depth added 31). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Processors/MIPS/src/main/java/ghidra/app/plugin/core/analysis/MipsAddressAnalyzer.java"},"region":{"startLine":268}}}],"partialFingerprints":{"codehealthFindingId/v1":"3a34fbe96b4c6d1963e1ef9d13b3d9c4722081b2bf38aaf58c5563a734e99ed7"}},{"ruleId":"D2","level":"warning","message":{"text":"Constructor.decode (cognitive 51): Constructor.decode has cognitive complexity 51 (threshold 15). Drivers by points: if/else 41, loops 9, boolean chains 1 (nesting depth added 35). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/processors/sleigh/Constructor.java"},"region":{"startLine":313}}}],"partialFingerprints":{"codehealthFindingId/v1":"38a4f55cf90160a713ab2327ffd7c7fd44720a5225afc03d2d801f1999fa7910"}},{"ruleId":"D2","level":"warning","message":{"text":"FunctionVariables.insertParameter (cognitive 51): FunctionVariables.insertParameter has cognitive complexity 51 (threshold 15). Drivers by points: if/else 40, loops 5, boolean chains 3, ternaries 3 (nesting depth added 22). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/function/FunctionVariables.java"},"region":{"startLine":740}}}],"partialFingerprints":{"codehealthFindingId/v1":"0c78750c37f5dd110517f365f8e453a7c53b223f3f912aa5a44c079924df0cce"}},{"ruleId":"D2","level":"warning","message":{"text":"CodeManager.addReferencesForInstruction (cognitive 50): CodeManager.addReferencesForInstruction has cognitive complexity 50 (threshold 15). Drivers by points: if/else 35, loops 8, boolean chains 7 (nesting depth added 24). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/code/CodeManager.java"},"region":{"startLine":2604}}}],"partialFingerprints":{"codehealthFindingId/v1":"b8167b76918ef92beec22344cd3b649ebccd8ca81c0961900a47f0eb474af106"}},{"ruleId":"D2","level":"warning","message":{"text":"CodeManager.checkInstructionSet (cognitive 50): CodeManager.checkInstructionSet has cognitive complexity 50 (threshold 15). Drivers by points: if/else 37, error handling 6, boolean chains 4, loops 3 (nesting depth added 30). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/code/CodeManager.java"},"region":{"startLine":301}}}],"partialFingerprints":{"codehealthFindingId/v1":"1743d58d2fa245fa154ff9ee10713b4f74cb9f174511ead83f9a9ea3aab55c50"}},{"ruleId":"D2","level":"warning","message":{"text":"PdbParser.applyTo (cognitive 50): PdbParser.applyTo has cognitive complexity 50 (threshold 15). Drivers by points: if/else 46, error handling 2, boolean chains 1, loops 1 (nesting depth added 28). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/PDB/src/main/java/ghidra/app/util/bin/format/pdb/PdbParser.java"},"region":{"startLine":336}}}],"partialFingerprints":{"codehealthFindingId/v1":"324d0e0c9e66f99a14ca37359797af9bd35f471e738821224b0779780029d4ad"}},{"ruleId":"D2","level":"warning","message":{"text":"MicrosoftDemanglerUtil.processObjectCPP (cognitive 50): MicrosoftDemanglerUtil.processObjectCPP has cognitive complexity 50 (threshold 15). Drivers by points: if/else 50 (nesting depth added 24). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/MicrosoftDemangler/src/main/java/ghidra/app/util/demangler/microsoft/MicrosoftDemanglerUtil.java"},"region":{"startLine":253}}}],"partialFingerprints":{"codehealthFindingId/v1":"b84fe86e409ccb585d8d2d41d3801b176d21c75b43879fb6666d0bc09ebc8cd6"}},{"ruleId":"D2","level":"warning","message":{"text":"ServerConnectTask.getRepositoryServerHandle (cognitive 49): ServerConnectTask.getRepositoryServerHandle has cognitive complexity 49 (threshold 15). Drivers by points: if/else 39, loops 5, error handling 3, boolean chains 2 (nesting depth added 25). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/FileSystem/src/main/java/ghidra/framework/client/ServerConnectTask.java"},"region":{"startLine":240}}}],"partialFingerprints":{"codehealthFindingId/v1":"b9d0dcd9cb91496a939de4b89a6839d85bbcdcf9b5313bcc69c9f1e2161fa8c6"}},{"ruleId":"D2","level":"warning","message":{"text":"Database.scanFiles (cognitive 49): Database.scanFiles has cognitive complexity 49 (threshold 15). Drivers by points: if/else 32, loops 13, boolean chains 3, ternaries 1 (nesting depth added 22). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/DB/src/main/java/db/Database.java"},"region":{"startLine":261}}}],"partialFingerprints":{"codehealthFindingId/v1":"135db074afadd32a30a0115126ad13761a8de07e23a304cb0f80cde807bfbc82"}},{"ruleId":"D2","level":"warning","message":{"text":"FunctionStartAction.checkAfterName (cognitive 49): FunctionStartAction.checkAfterName has cognitive complexity 49 (threshold 15). Drivers by points: if/else 48, boolean chains 1 (nesting depth added 33). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/BytePatterns/src/main/java/ghidra/app/analyzers/FunctionStartAnalyzer.java"},"region":{"startLine":379}}}],"partialFingerprints":{"codehealthFindingId/v1":"0901340d62fb3b49460fab876aa3b3f0669cb3c4d47e0be2ad244bcf43b7d566"}},{"ruleId":"D2","level":"warning","message":{"text":"ParsingEnvironment.getErrorMessage (cognitive 48): ParsingEnvironment.getErrorMessage has cognitive complexity 48 (threshold 15). Drivers by points: if/else 40, ternaries 5, error handling 3 (nesting depth added 23). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/sleigh/grammar/ParsingEnvironment.java"},"region":{"startLine":115}}}],"partialFingerprints":{"codehealthFindingId/v1":"39bf40d849eb42de45b627d8a033304dce41cb776ae01cb063b1a10505f51d08"}},{"ruleId":"D2","level":"warning","message":{"text":"DirectedGraph.CopyEdgeAttributes (cognitive 48): DirectedGraph.CopyEdgeAttributes has cognitive complexity 48 (threshold 15). Drivers by points: loops 27, error handling 15, if/else 6 (nesting depth added 33). To reduce it, break up the iteration: give each loop body a named function, and split a multi-phase loop into one function per phase so no single body carries the whole pipeline."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Generic/src/main/java/ghidra/util/graph/DirectedGraph.java"},"region":{"startLine":992}}}],"partialFingerprints":{"codehealthFindingId/v1":"fce9c5a44f4377e1dec2ef5feff7bcbb3baf3787da32fa14d79117adc5f26a2e"}},{"ruleId":"D2","level":"warning","message":{"text":"DirectedGraph.CopyVertexAttributes (cognitive 48): DirectedGraph.CopyVertexAttributes has cognitive complexity 48 (threshold 15). Drivers by points: loops 27, error handling 15, if/else 6 (nesting depth added 33). To reduce it, break up the iteration: give each loop body a named function, and split a multi-phase loop into one function per phase so no single body carries the whole pipeline."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Generic/src/main/java/ghidra/util/graph/DirectedGraph.java"},"region":{"startLine":1076}}}],"partialFingerprints":{"codehealthFindingId/v1":"5007f7ee0f86e77970add7cb034c93e88f084a240263b12d58e47f78a2da250a"}},{"ruleId":"D2","level":"warning","message":{"text":"BSimProgramCorrelatorMatching.doMatching (cognitive 48): BSimProgramCorrelatorMatching.doMatching has cognitive complexity 48 (threshold 15). Drivers by points: if/else 35, loops 10, boolean chains 3 (nesting depth added 28). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/VersionTrackingBSim/src/main/java/ghidra/feature/vt/api/BSimProgramCorrelatorMatching.java"},"region":{"startLine":450}}}],"partialFingerprints":{"codehealthFindingId/v1":"b86beebcb2bfe5e242d6a7990adb4c2251b46b3c5b976a8a8565586741570923"}},{"ruleId":"D2","level":"warning","message":{"text":"MarkupSarifMgr.processEquateReference (cognitive 48): MarkupSarifMgr.processEquateReference has cognitive complexity 48 (threshold 15). Drivers by points: if/else 34, loops 7, error handling 5, boolean chains 2 (nesting depth added 23). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/Sarif/src/main/java/sarif/managers/MarkupSarifMgr.java"},"region":{"startLine":417}}}],"partialFingerprints":{"codehealthFindingId/v1":"5a78b2f5401fc82671a793af00161fe7c9a46b6880b264f0725354e609851f41"}},{"ruleId":"D2","level":"warning","message":{"text":"PcodeInjectLibrary.isEquivalent (cognitive 47): PcodeInjectLibrary.isEquivalent has cognitive complexity 47 (threshold 15). Drivers by points: if/else 33, loops 8, boolean chains 6 (nesting depth added 14). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/lang/PcodeInjectLibrary.java"},"region":{"startLine":432}}}],"partialFingerprints":{"codehealthFindingId/v1":"8731fce5678e9673770487f7b3457636160045959a0a5578d186e964f8001df1"}},{"ruleId":"D2","level":"warning","message":{"text":"OldLanguage.parseOldLanguage (cognitive 47): OldLanguage.parseOldLanguage has cognitive complexity 47 (threshold 15). Drivers by points: if/else 46, loops 1 (nesting depth added 29). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/util/OldLanguage.java"},"region":{"startLine":225}}}],"partialFingerprints":{"codehealthFindingId/v1":"46558bccbc0db1da6f7fbe9f800e137e5cf8cc03cb8ae85bf1b6d16b395345ac"}},{"ruleId":"D2","level":"warning","message":{"text":"ConsistencyChecker.findValidRule (cognitive 46): ConsistencyChecker.findValidRule has cognitive complexity 46 (threshold 15). Drivers by points: if/else 36, loops 9, boolean chains 1 (nesting depth added 31). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slgh_compile/ConsistencyChecker.java"},"region":{"startLine":1139}}}],"partialFingerprints":{"codehealthFindingId/v1":"34ec0a63d718a201be0ce43554e012f579fdd86d6edbb3b9716c2c2cae3ec7d9"}},{"ruleId":"D2","level":"warning","message":{"text":"LocalSymbolMap.grabFromFunction (cognitive 46): LocalSymbolMap.grabFromFunction has cognitive complexity 46 (threshold 15). Drivers by points: if/else 37, loops 4, boolean chains 3, ternaries 2 (nesting depth added 23). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/pcode/LocalSymbolMap.java"},"region":{"startLine":156}}}],"partialFingerprints":{"codehealthFindingId/v1":"e16ff9214336151cc9b072fb5760297a5792da56a30f027ed8c2b044d690e715"}},{"ruleId":"D2","level":"warning","message":{"text":"SimpleDiffUtility.getCompatibleAddress (cognitive 46): SimpleDiffUtility.getCompatibleAddress has cognitive complexity 46 (threshold 15). Drivers by points: if/else 43, boolean chains 3 (nesting depth added 30). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/util/SimpleDiffUtility.java"},"region":{"startLine":206}}}],"partialFingerprints":{"codehealthFindingId/v1":"522635e8376317626c7439ae30145fe3582dac63a3560e2d01923f795c542290"}},{"ruleId":"D2","level":"warning","message":{"text":"DumpPeShim.processMemoryBlocks (cognitive 46): DumpPeShim.processMemoryBlocks has cognitive complexity 46 (threshold 15). Drivers by points: if/else 32, boolean chains 6, ternaries 6, error handling 1, loops 1 (nesting depth added 22). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/dump/cmd/DumpPeShim.java"},"region":{"startLine":141}}}],"partialFingerprints":{"codehealthFindingId/v1":"1ac5e03364bf2c22a18a31c7c46bd820c4f85c01bb1f8cda7fd8c216dba42c33"}},{"ruleId":"D2","level":"warning","message":{"text":"ExeTable.updateExecutable (cognitive 46): ExeTable.updateExecutable has cognitive complexity 46 (threshold 15). Drivers by points: if/else 42, loops 3, boolean chains 1 (nesting depth added 22). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/BSim/src/main/java/ghidra/features/bsim/query/client/tables/ExeTable.java"},"region":{"startLine":599}}}],"partialFingerprints":{"codehealthFindingId/v1":"82204081c74bce19a01570806b4dc754952e652a314650260730c3d9eae0a2eb"}},{"ruleId":"D2","level":"warning","message":{"text":"StructureDB.replace (cognitive 45): StructureDB.replace has cognitive complexity 45 (threshold 15). Drivers by points: if/else 28, loops 10, boolean chains 4, error handling 2, ternaries 1 (nesting depth added 23). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/StructureDB.java"},"region":{"startLine":1366}}}],"partialFingerprints":{"codehealthFindingId/v1":"fb12f7a77cb83ebdfedcedb0ec6d1f7e4244c12aa747cc1a966cae04d845dd73"}},{"ruleId":"D2","level":"warning","message":{"text":"BasicCompilerSpec.isEquivalent (cognitive 45): BasicCompilerSpec.isEquivalent has cognitive complexity 45 (threshold 15). Drivers by points: if/else 43, loops 2 (nesting depth added 8). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/lang/BasicCompilerSpec.java"},"region":{"startLine":1191}}}],"partialFingerprints":{"codehealthFindingId/v1":"09ff3be82da86a12a3767ebf32936a0ebe5f22c5ede7456c8d0ced31f96fd034"}},{"ruleId":"D2","level":"warning","message":{"text":"VariableStorage.checkVarnodes (cognitive 45): VariableStorage.checkVarnodes has cognitive complexity 45 (threshold 15). Drivers by points: if/else 36, boolean chains 5, loops 4 (nesting depth added 21). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/listing/VariableStorage.java"},"region":{"startLine":184}}}],"partialFingerprints":{"codehealthFindingId/v1":"89e8b6d92a4ed5188a0142e3da3eb4c5214b00e5b3e505663ef45acafa16ba01"}},{"ruleId":"D2","level":"warning","message":{"text":"MDString.parseByte (cognitive 45): MDString.parseByte has cognitive complexity 45 (threshold 15). Drivers by points: if/else 35, boolean chains 5, match/switch 5 (nesting depth added 28). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/MicrosoftDmang/src/main/java/mdemangler/MDString.java"},"region":{"startLine":176}}}],"partialFingerprints":{"codehealthFindingId/v1":"a343da0f9bac78371918ead3e0de6f82209a8176906cac2d0e507c76613f60a2"}},{"ruleId":"D2","level":"warning","message":{"text":"MipsSymbolAnalyzer.added (cognitive 44): MipsSymbolAnalyzer.added has cognitive complexity 44 (threshold 15). Drivers by points: if/else 27, error handling 14, boolean chains 2, loops 1 (nesting depth added 29). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Processors/MIPS/src/main/java/ghidra/app/plugin/core/analysis/MipsSymbolAnalyzer.java"},"region":{"startLine":48}}}],"partialFingerprints":{"codehealthFindingId/v1":"21d17bc75bd0942cc6b47283895ef124c8d2f9a1b11fa59988c59e22f78ba47a"}},{"ruleId":"D2","level":"warning","message":{"text":"HexagonUnsupportSemanticAnalyzer.added (cognitive 44): HexagonUnsupportSemanticAnalyzer.added has cognitive complexity 44 (threshold 15). Drivers by points: if/else 32, loops 6, boolean chains 4, error handling 2 (nesting depth added 26). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Processors/Hexagon/src/main/java/ghidra/app/plugin/core/analysis/HexagonUnsupportSemanticAnalyzer.java"},"region":{"startLine":107}}}],"partialFingerprints":{"codehealthFindingId/v1":"bed92d06e9f5da4acf5253ae7b47b6cddcc6f23535545a1e70b14e1ad0cc9a92"}},{"ruleId":"D2","level":"warning","message":{"text":"SleighCompile.finalizeSections (cognitive 44): SleighCompile.finalizeSections has cognitive complexity 44 (threshold 15). Drivers by points: if/else 39, loops 5 (nesting depth added 25). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slgh_compile/SleighCompile.java"},"region":{"startLine":1516}}}],"partialFingerprints":{"codehealthFindingId/v1":"ad96a0c72747fb4ba6f5cc91fe5b90f4848bf8e6192ecaaaa80cacc76f505c0b"}},{"ruleId":"D2","level":"warning","message":{"text":"MemoryMapDB.findBytes (cognitive 44): MemoryMapDB.findBytes has cognitive complexity 44 (threshold 15). Drivers by points: if/else 29, loops 9, error handling 4, boolean chains 2 (nesting depth added 27). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/mem/MemoryMapDB.java"},"region":{"startLine":1092}}}],"partialFingerprints":{"codehealthFindingId/v1":"3f30e6b211be5f52458efe22950356a868333c1074d078a13cdc3423a2611e75"}},{"ruleId":"D2","level":"warning","message":{"text":"Block.calcHashes (cognitive 44): Block.calcHashes has cognitive complexity 44 (threshold 15). Drivers by points: if/else 31, loops 8, boolean chains 3, ternaries 2 (nesting depth added 23). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/correlate/Block.java"},"region":{"startLine":115}}}],"partialFingerprints":{"codehealthFindingId/v1":"05e70034fb7b1d58cc2b846922a6b34f1c7ce2c9708acd12f1ca2cb5734fdcc3"}},{"ruleId":"D2","level":"warning","message":{"text":"StructureDataType.replace (cognitive 44): StructureDataType.replace has cognitive complexity 44 (threshold 15). Drivers by points: if/else 28, loops 10, boolean chains 4, error handling 1, ternaries 1 (nesting depth added 23). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/StructureDataType.java"},"region":{"startLine":1514}}}],"partialFingerprints":{"codehealthFindingId/v1":"fc76365ab1c47725282ced2df23477832e3b190e0ba21b2c5e3588f4802b6e1b"}},{"ruleId":"D2","level":"warning","message":{"text":"LinkHandler.followInternalLinkage (cognitive 44): LinkHandler.followInternalLinkage has cognitive complexity 44 (threshold 15). Drivers by points: if/else 33, error handling 4, boolean chains 3, ternaries 3, loops 1 (nesting depth added 21). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Project/src/main/java/ghidra/framework/data/LinkHandler.java"},"region":{"startLine":420}}}],"partialFingerprints":{"codehealthFindingId/v1":"6b13a11a7372dc05c957672c835e235d8926f9a771e00f42e13be2262dd6b737"}},{"ruleId":"D2","level":"warning","message":{"text":"DefaultCompositeMember.alignComposite (cognitive 44): DefaultCompositeMember.alignComposite has cognitive complexity 44 (threshold 15). Drivers by points: if/else 39, boolean chains 3, ternaries 2 (nesting depth added 22). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/PDB/src/main/java/ghidra/app/util/bin/format/pdb/DefaultCompositeMember.java"},"region":{"startLine":324}}}],"partialFingerprints":{"codehealthFindingId/v1":"2531258a97296e43d890b1849b596d0f8a9d22d7341ad2166b7ac6ced338e5f7"}},{"ruleId":"D2","level":"warning","message":{"text":"Pagedump.buildKernelStructures (cognitive 44): Pagedump.buildKernelStructures has cognitive complexity 44 (threshold 15). Drivers by points: if/else 31, loops 9, boolean chains 2, ternaries 2 (nesting depth added 18). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/dump/pagedump/Pagedump.java"},"region":{"startLine":226}}}],"partialFingerprints":{"codehealthFindingId/v1":"c69eba8015bb37890d21696fa0f8c523d413c1ebd9e9279781137037f76e8803"}},{"ruleId":"D2","level":"warning","message":{"text":"DecompilerDataTypeFinder.findVariablesInLine (cognitive 44): DecompilerDataTypeFinder.findVariablesInLine has cognitive complexity 44 (threshold 15). Drivers by points: if/else 41, boolean chains 2, loops 1 (nesting depth added 27). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/DecompilerDependent/src/main/java/ghidra/app/extension/datatype/finder/DecompilerDataTypeReferenceFinder.java"},"region":{"startLine":369}}}],"partialFingerprints":{"codehealthFindingId/v1":"3ba0a6f11ec4757e9a4f6958e92d896b12e379a1401b3d043464ad27c454ac49"}},{"ruleId":"D2","level":"warning","message":{"text":"PcodeNonRedundantPowersetOfInterval.assumeBinaryExpression (cognitive 44): PcodeNonRedundantPowersetOfInterval.assumeBinaryExpression has cognitive complexity 44 (threshold 15). Drivers by points: if/else 32, ternaries 8, loops 3, boolean chains 1 (nesting depth added 24). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Extensions/Lisa/src/main/java/ghidra/lisa/pcode/analyses/PcodeNonRedundantPowersetOfInterval.java"},"region":{"startLine":147}}}],"partialFingerprints":{"codehealthFindingId/v1":"b188599dce7098a54f58e9631c5f09ed4c9ee44d641aec9850fa4c072e55ba84"}},{"ruleId":"D2","level":"warning","message":{"text":"SleighLanguage.parseSpaces (cognitive 43): SleighLanguage.parseSpaces has cognitive complexity 43 (threshold 15). Drivers by points: if/else 37, boolean chains 3, loops 3 (nesting depth added 17). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/processors/sleigh/SleighLanguage.java"},"region":{"startLine":896}}}],"partialFingerprints":{"codehealthFindingId/v1":"496fb409a918ea036c5a740d9d8383b6e4b392ffa5723f7821804b2ff578f278"}},{"ruleId":"D2","level":"warning","message":{"text":"Constructor.buildPattern (cognitive 43): Constructor.buildPattern has cognitive complexity 43 (threshold 15). Drivers by points: if/else 37, loops 5, boolean chains 1 (nesting depth added 20). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghsymbol/Constructor.java"},"region":{"startLine":434}}}],"partialFingerprints":{"codehealthFindingId/v1":"f537840f78f959f9d66c4ce469a7b65e26ce5f5f450e7777e79eb5269b93d0a9"}},{"ruleId":"D2","level":"warning","message":{"text":"Disassembler.disassemble (cognitive 43): Disassembler.disassemble has cognitive complexity 43 (threshold 15). Drivers by points: if/else 34, boolean chains 4, error handling 4, loops 1 (nesting depth added 19). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/disassemble/Disassembler.java"},"region":{"startLine":559}}}],"partialFingerprints":{"codehealthFindingId/v1":"04962892fd21949fa506c39fe3c5467bac07bf66821b9846496fbec38cb3c8e7"}},{"ruleId":"D2","level":"warning","message":{"text":"CompositeTypeApplier.addMethods (cognitive 43): CompositeTypeApplier.addMethods has cognitive complexity 43 (threshold 15). Drivers by points: if/else 37, loops 6 (nesting depth added 29). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/PDB/src/main/java/ghidra/app/util/pdb/pdbapplicator/CompositeTypeApplier.java"},"region":{"startLine":367}}}],"partialFingerprints":{"codehealthFindingId/v1":"ae50c11b3101f778291752bcbc1e1da6f6b2f85127229bfdb7b8789098c459b5"}},{"ruleId":"D2","level":"warning","message":{"text":"GnuDemanglerParser.tokenizeParameters (cognitive 43): GnuDemanglerParser.tokenizeParameters has cognitive complexity 43 (threshold 15). Drivers by points: if/else 41, boolean chains 1, loops 1 (nesting depth added 28). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/GnuDemangler/src/main/java/ghidra/app/util/demangler/gnu/GnuDemanglerParser.java"},"region":{"startLine":734}}}],"partialFingerprints":{"codehealthFindingId/v1":"31b491e599ff2d0ef1258f4b6cd5efe621ebbcee697aef83eb4b9818ac2afca1"}},{"ruleId":"D2","level":"warning","message":{"text":"NSObjectParser.parseObject (cognitive 43): NSObjectParser.parseObject has cognitive complexity 43 (threshold 15). Drivers by points: if/else 30, loops 8, match/switch 5 (nesting depth added 16). The drivers above price the dispatch low by construction \u2014 a dispatch is charged once however many cases it lists, while each branch inside an arm is charged in full \u2014 so most of this count is what the case bodies hold, and the arms are where it can be reduced. To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/bplist/NSObjectParser.java"},"region":{"startLine":24}}}],"partialFingerprints":{"codehealthFindingId/v1":"100c2463dadffd209ab0766e15f567ea873b793c5b3c418b3e8bd6bad96068e6"}},{"ruleId":"D2","level":"warning","message":{"text":"DataTypeDependencyOrderer.createAcyclicDependencyLists (cognitive 43): DataTypeDependencyOrderer.createAcyclicDependencyLists has cognitive complexity 43 (threshold 15). Drivers by points: loops 24, if/else 17, boolean chains 2 (nesting depth added 23). To reduce it, break up the iteration: give each loop body a named function, and split a multi-phase loop into one function per phase so no single body carries the whole pipeline."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/Decompiler/src/main/java/ghidra/app/util/DataTypeDependencyOrderer.java"},"region":{"startLine":238}}}],"partialFingerprints":{"codehealthFindingId/v1":"8efbedea2145979304b025aaa89aee81c272f64de75eaa9bc5237b27e59a49e3"}},{"ruleId":"D2","level":"warning","message":{"text":"Pic17c7xxAnalyzer.markupFRegInstruction (cognitive 42): Pic17c7xxAnalyzer.markupFRegInstruction has cognitive complexity 42 (threshold 15). Drivers by points: if/else 36, boolean chains 5, ternaries 1 (nesting depth added 20). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Processors/PIC/src/main/java/ghidra/app/plugin/core/analysis/Pic17c7xxAnalyzer.java"},"region":{"startLine":511}}}],"partialFingerprints":{"codehealthFindingId/v1":"6de47c796ee88296ff9b2ff103077f011fc887641e49758c8189b623969f337d"}},{"ruleId":"D2","level":"warning","message":{"text":"AVR8_ElfRelocationHandler.relocate (cognitive 42): AVR8_ElfRelocationHandler.relocate has cognitive complexity 42 (threshold 15). Drivers by points: if/else 35, boolean chains 5, match/switch 2 (nesting depth added 17). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Processors/Atmel/src/main/java/ghidra/app/util/bin/format/elf/relocation/AVR8_ElfRelocationHandler.java"},"region":{"startLine":42}}}],"partialFingerprints":{"codehealthFindingId/v1":"700d9eec5af715e2b222b34a0db12a8137906b1f1497f699f59cce4bcc67b099"}},{"ruleId":"D2","level":"warning","message":{"text":"SleighLanguageProvider.read (cognitive 42): SleighLanguageProvider.read has cognitive complexity 42 (threshold 15). Drivers by points: if/else 25, loops 11, error handling 4, boolean chains 2 (nesting depth added 22). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/processors/sleigh/SleighLanguageProvider.java"},"region":{"startLine":175}}}],"partialFingerprints":{"codehealthFindingId/v1":"511bae95637bfcc884f9f2c9cf466c29e7bf8c59be70cee7ab249bf88e6b8a57"}},{"ruleId":"D2","level":"warning","message":{"text":"PcodeCompile.findInternalFunction (cognitive 42): PcodeCompile.findInternalFunction has cognitive complexity 42 (threshold 15). Drivers by points: if/else 25, boolean chains 17 (nesting depth added 2). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slgh_compile/PcodeCompile.java"},"region":{"startLine":928}}}],"partialFingerprints":{"codehealthFindingId/v1":"ea3afde65fc32798a283ecda1747212c615af793e2cd09573c856b898ea67ed5"}},{"ruleId":"D2","level":"warning","message":{"text":"SimpleDestReferenceIterator.followIndirection (cognitive 42): SimpleDestReferenceIterator.followIndirection has cognitive complexity 42 (threshold 15). Drivers by points: if/else 39, loops 2, boolean chains 1 (nesting depth added 28). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/block/SimpleDestReferenceIterator.java"},"region":{"startLine":231}}}],"partialFingerprints":{"codehealthFindingId/v1":"3d086c1b0079d4b5dd82fd5711c79c39e7a6a66406d37370a3de32a6ed889500"}},{"ruleId":"D2","level":"warning","message":{"text":"LongDurationLongKeyIterator.initialize (cognitive 42): LongDurationLongKeyIterator.initialize has cognitive complexity 42 (threshold 15). Drivers by points: if/else 40, boolean chains 2 (nesting depth added 24). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/DB/src/main/java/db/Table.java"},"region":{"startLine":2829}}}],"partialFingerprints":{"codehealthFindingId/v1":"c4003ed72e26ca85300ff4c3f51b883b45d189f5fc484e5d656362f2fb369e23"}},{"ruleId":"D2","level":"warning","message":{"text":"MDTemplateArgumentsList.parseInternal (cognitive 42): MDTemplateArgumentsList.parseInternal has cognitive complexity 42 (threshold 15). Drivers by points: if/else 34, boolean chains 5, match/switch 2, loops 1 (nesting depth added 24). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/MicrosoftDmang/src/main/java/mdemangler/template/MDTemplateArgumentsList.java"},"region":{"startLine":47}}}],"partialFingerprints":{"codehealthFindingId/v1":"3c882966b8df80f5a578210430c0aee4805ac02552d2ba863eb52128c794efd4"}},{"ruleId":"D2","level":"warning","message":{"text":"PCodeCombinedGraphTask.buildGraph (cognitive 42): PCodeCombinedGraphTask.buildGraph has cognitive complexity 42 (threshold 15). Drivers by points: if/else 27, loops 9, boolean chains 6 (nesting depth added 20). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/Decompiler/src/main/java/ghidra/app/plugin/core/decompile/actions/PCodeCombinedGraphTask.java"},"region":{"startLine":37}}}],"partialFingerprints":{"codehealthFindingId/v1":"9749a0c3919146ba61bbf293ae21900a96f5b33ae6bb78218405972f7fc926f4"}},{"ruleId":"D2","level":"warning","message":{"text":"BsfvTokenHighlightMatcher.getTokenHighlight (cognitive 42): BsfvTokenHighlightMatcher.getTokenHighlight has cognitive complexity 42 (threshold 15). Drivers by points: if/else 34, boolean chains 8 (nesting depth added 16). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/BSimFeatureVisualizer/src/main/java/ghidra/bsfv/BsfvTokenHighlightMatcher.java"},"region":{"startLine":152}}}],"partialFingerprints":{"codehealthFindingId/v1":"34c32c9f0532fc172400ce964d78c190fb29982bf50e8bd051a2cc89e7df3997"}},{"ruleId":"D2","level":"warning","message":{"text":"DatabaseInformation.equals (cognitive 42): DatabaseInformation.equals has cognitive complexity 42 (threshold 15). Drivers by points: if/else 38, loops 4 (nesting depth added 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/BSim/src/main/java/ghidra/features/bsim/query/description/DatabaseInformation.java"},"region":{"startLine":147}}}],"partialFingerprints":{"codehealthFindingId/v1":"957f4d460a7b4b1794cdbc49982dbb089234a86e3b83f39c23dcd90cc4387569"}},{"ruleId":"D2","level":"warning","message":{"text":"DBTraceMemorySpace.doSetState (cognitive 42): DBTraceMemorySpace.doSetState has cognitive complexity 42 (threshold 15). Drivers by points: if/else 20, loops 16, boolean chains 5, ternaries 1 (nesting depth added 20). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/memory/DBTraceMemorySpace.java"},"region":{"startLine":228}}}],"partialFingerprints":{"codehealthFindingId/v1":"60d8dfb346eb3ac4767ddd5097de59fc45561310fb2719343ca2975a98606ad8"}},{"ruleId":"D2","level":"warning","message":{"text":"FunctionVariables.updateFunction (cognitive 41): FunctionVariables.updateFunction has cognitive complexity 41 (threshold 15). Drivers by points: if/else 21, boolean chains 8, loops 6, ternaries 6 (nesting depth added 12). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/function/FunctionVariables.java"},"region":{"startLine":418}}}],"partialFingerprints":{"codehealthFindingId/v1":"f5f6c8ec9087177a4095e6dfb8c25a7e1b097fef803015a4799e05b2dfe66ad8"}},{"ruleId":"D2","level":"warning","message":{"text":"SymbolDB.doSetNameAndNamespace (cognitive 41): SymbolDB.doSetNameAndNamespace has cognitive complexity 41 (threshold 15). Drivers by points: if/else 29, loops 7, boolean chains 5 (nesting depth added 18). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/symbol/SymbolDB.java"},"region":{"startLine":295}}}],"partialFingerprints":{"codehealthFindingId/v1":"6aac90151fd93daec01f19808cee433af6a2cc7458e7346bf3ad8dbb8ad20528"}},{"ruleId":"D2","level":"warning","message":{"text":"PartitionCodeSubModel.partitionGraph (cognitive 41): PartitionCodeSubModel.partitionGraph has cognitive complexity 41 (threshold 15). Drivers by points: if/else 19, loops 17, error handling 5 (nesting depth added 29). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/block/PartitionCodeSubModel.java"},"region":{"startLine":502}}}],"partialFingerprints":{"codehealthFindingId/v1":"11308d044e80926f92ac95ed3693a2825c0b6e4ffadcc00e96af1ab8bb35b713"}},{"ruleId":"D2","level":"warning","message":{"text":"DynamicHash.gatherFirstLevelVars (cognitive 41): DynamicHash.gatherFirstLevelVars has cognitive complexity 41 (threshold 15). Drivers by points: if/else 39, boolean chains 1, loops 1 (nesting depth added 29). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/pcode/DynamicHash.java"},"region":{"startLine":729}}}],"partialFingerprints":{"codehealthFindingId/v1":"bc293bcf7d954740631e39e64c3382986799e30eb29215cfe89bc94394cc8c7f"}},{"ruleId":"D2","level":"warning","message":{"text":"MatchInfo.getMarkupTypeForLocation (cognitive 41): MatchInfo.getMarkupTypeForLocation has cognitive complexity 41 (threshold 15). Drivers by points: if/else 39, boolean chains 2 (nesting depth added 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/VersionTracking/src/main/java/ghidra/feature/vt/gui/util/MatchInfo.java"},"region":{"startLine":271}}}],"partialFingerprints":{"codehealthFindingId/v1":"42faf6020a905d8812386d26cde57d9c0ec7deffa643a6fe344d63ab097c9ed4"}},{"ruleId":"D2","level":"warning","message":{"text":"RustDemanglerLegacy.demangle (cognitive 41): RustDemanglerLegacy.demangle has cognitive complexity 41 (threshold 15). Drivers by points: if/else 24, loops 10, boolean chains 5, error handling 2 (nesting depth added 16). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/Rust/src/main/java/ghidra/app/plugin/core/analysis/rust/demangler/RustDemanglerLegacy.java"},"region":{"startLine":23}}}],"partialFingerprints":{"codehealthFindingId/v1":"6f0ded60372edec08f8eaac2110587c7552cd34da1902fc4fd903e5245dfce14"}},{"ruleId":"D2","level":"warning","message":{"text":"PcodeCallExpression.forwardSemantics (cognitive 41): PcodeCallExpression.forwardSemantics has cognitive complexity 41 (threshold 15). Drivers by points: if/else 36, loops 3, boolean chains 2 (nesting depth added 29). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Extensions/Lisa/src/main/java/ghidra/lisa/pcode/expressions/PcodeCallExpression.java"},"region":{"startLine":64}}}],"partialFingerprints":{"codehealthFindingId/v1":"a16b8d50878288f9d0e0825a62a694cb33111f4235193efb253edd19abfd8a44"}},{"ruleId":"D2","level":"warning","message":{"text":"DBTraceInstructionsView.checkInstructionSet (cognitive 41): DBTraceInstructionsView.checkInstructionSet has cognitive complexity 41 (threshold 15). Drivers by points: if/else 34, boolean chains 4, loops 3 (nesting depth added 23). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/listing/DBTraceInstructionsView.java"},"region":{"startLine":498}}}],"partialFingerprints":{"codehealthFindingId/v1":"061fb3b208d46e27fc241075acec7b62927abde8b6517f98603726e2b8c90b02"}},{"ruleId":"D2","level":"warning","message":{"text":"AbstractTraceRmiLaunchOffer.launchProgram (cognitive 41): AbstractTraceRmiLaunchOffer.launchProgram has cognitive complexity 41 (threshold 15). Drivers by points: error handling 19, if/else 16, match/switch 4, boolean chains 1, loops 1 (nesting depth added 25). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/Debugger-rmi-trace/src/main/java/ghidra/app/plugin/core/debug/gui/tracermi/launcher/AbstractTraceRmiLaunchOffer.java"},"region":{"startLine":682}}}],"partialFingerprints":{"codehealthFindingId/v1":"e064efd59f714b0a71cbba04389355f9dda3c82dd48615b5debd8ece49e3dfa8"}},{"ruleId":"D2","level":"warning","message":{"text":"IsfDataTypeWriter.genSymbols (cognitive 41): IsfDataTypeWriter.genSymbols has cognitive complexity 41 (threshold 15). Drivers by points: loops 26, if/else 14, boolean chains 1 (nesting depth added 25). To reduce it, break up the iteration: give each loop body a named function, and split a multi-phase loop into one function per phase so no single body carries the whole pipeline."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/Debugger-isf/src/main/java/ghidra/program/model/data/ISF/IsfDataTypeWriter.java"},"region":{"startLine":181}}}],"partialFingerprints":{"codehealthFindingId/v1":"851831dab9d7cb7e27cb9c3c7a2372d5b20fb4ec35aa7ae251aeccde845c782b"}},{"ruleId":"D2","level":"warning","message":{"text":"MethodInfoJava.getMethodSignature (cognitive 40): MethodInfoJava.getMethodSignature has cognitive complexity 40 (threshold 15). Drivers by points: if/else 33, loops 7 (nesting depth added 24). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Processors/JVM/src/main/java/ghidra/javaclass/format/MethodInfoJava.java"},"region":{"startLine":177}}}],"partialFingerprints":{"codehealthFindingId/v1":"d43358dc2543d84ec95c21ed703a2e41cbc0b23a9f6c8de6a63e5daa1c3c37f0"}},{"ruleId":"D2","level":"warning","message":{"text":"DataTypeArchiveTransformer.transformDataType (cognitive 40): DataTypeArchiveTransformer.transformDataType has cognitive complexity 40 (threshold 15). Drivers by points: if/else 37, boolean chains 3 (nesting depth added 24). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/DataTypeArchiveTransformer.java"},"region":{"startLine":512}}}],"partialFingerprints":{"codehealthFindingId/v1":"003694d00eb6781ab52031780e3bba1b50638d7ff4f8f70bec31119380c9171d"}},{"ruleId":"D2","level":"warning","message":{"text":"NumericUtilities.convertHexStringToMaskedValue (cognitive 40): NumericUtilities.convertHexStringToMaskedValue has cognitive complexity 40 (threshold 15). Drivers by points: if/else 33, loops 4, boolean chains 3 (nesting depth added 23). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Generic/src/main/java/ghidra/util/NumericUtilities.java"},"region":{"startLine":569}}}],"partialFingerprints":{"codehealthFindingId/v1":"f86df6a19c1fe8fe1f6ce28951b864dcd7b6783fda9e190a000ec21623eec498"}},{"ruleId":"D2","level":"warning","message":{"text":"ObjcMessageAnalyzer.getNameFromOffset (cognitive 40): ObjcMessageAnalyzer.getNameFromOffset has cognitive complexity 40 (threshold 15). Drivers by points: if/else 38, boolean chains 2 (nesting depth added 25). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/Objective-C/src/main/java/ghidra/app/plugin/core/analysis/ObjcMessageAnalyzer.java"},"region":{"startLine":715}}}],"partialFingerprints":{"codehealthFindingId/v1":"c31e9c7c929a82013cd1f0f0df094f0c039308b29d202e7e179fa559d0c9e59d"}},{"ruleId":"D2","level":"warning","message":{"text":"SSHAuthenticationModule.authenticate (cognitive 40): SSHAuthenticationModule.authenticate has cognitive complexity 40 (threshold 15). Drivers by points: if/else 32, error handling 3, boolean chains 2, loops 2, ternaries 1 (nesting depth added 12). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/GhidraServer/src/main/java/ghidra/server/security/SSHAuthenticationModule.java"},"region":{"startLine":144}}}],"partialFingerprints":{"codehealthFindingId/v1":"3f96782f8d095f26257467d09e7218fced82af17e5821b7aa96ca0f3ae03b349"}},{"ruleId":"D2","level":"warning","message":{"text":"DexMarkupInstructionsAnalyzer.analyze (cognitive 40): DexMarkupInstructionsAnalyzer.analyze has cognitive complexity 40 (threshold 15). Drivers by points: if/else 38, loops 1, ternaries 1 (nesting depth added 19). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/android/dex/analyzer/DexMarkupInstructionsAnalyzer.java"},"region":{"startLine":39}}}],"partialFingerprints":{"codehealthFindingId/v1":"17f7869b52b9e0b55f71495e191e70bd6c179bfc9a0e6ac25545fb52eb67dc8f"}},{"ruleId":"D2","level":"warning","message":{"text":"PagedumpFileHeader.parse (cognitive 40): PagedumpFileHeader.parse has cognitive complexity 40 (threshold 15). Drivers by points: if/else 25, loops 9, ternaries 5, boolean chains 1 (nesting depth added 11). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition, and where an else follows a branch that already returns, drop the trailing else and let the rest of the body continue at one level."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/dump/pagedump/PagedumpFileHeader.java"},"region":{"startLine":125}}}],"partialFingerprints":{"codehealthFindingId/v1":"a99a873b3dc6291ad7dd1f3d1d23aa9f936ea9c0a1a3db47a40d3b5459c3e6e6"}},{"ruleId":"D2","level":"warning","message":{"text":"TaintQueryResult.matches (cognitive 40): TaintQueryResult.matches has cognitive complexity 40 (threshold 15). Drivers by points: if/else 38, boolean chains 2 (nesting depth added 24). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/DecompilerDependent/src/main/java/ghidra/app/plugin/core/decompiler/taint/TaintQueryResult.java"},"region":{"startLine":79}}}],"partialFingerprints":{"codehealthFindingId/v1":"ed2ef6ba3842cf824c4f94b44c0825acffd1195297f8f32e5e18627e92a11e83"}},{"ruleId":"D2","level":"warning","message":{"text":"ArmAnalyzer.flowArmThumb (cognitive 39): ArmAnalyzer.flowArmThumb has cognitive complexity 39 (threshold 15). Drivers by points: if/else 25, boolean chains 5, loops 5, error handling 2, ternaries 2 (nesting depth added 18). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Processors/ARM/src/main/java/ghidra/app/plugin/core/analysis/ArmAnalyzer.java"},"region":{"startLine":760}}}],"partialFingerprints":{"codehealthFindingId/v1":"03993a0d571c8147906631d658931ee3ea66d5de5ee71023a3e4dda059ca2900"}},{"ruleId":"D2","level":"warning","message":{"text":"1.evaluateContext (cognitive 39): 1.evaluateContext has cognitive complexity 39 (threshold 15). Drivers by points: if/else 30, error handling 6, boolean chains 3 (nesting depth added 26). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Processors/ARM/src/main/java/ghidra/app/plugin/core/analysis/ArmAnalyzer.java"},"region":{"startLine":89}}}],"partialFingerprints":{"codehealthFindingId/v1":"2fa029e8b1f1069b81eceec733e049e4ccf4b6125da1cc2a5f184a18c89bb843"}},{"ruleId":"D2","level":"warning","message":{"text":"FunctionManagerDB.getReferencedVariable (cognitive 39): FunctionManagerDB.getReferencedVariable has cognitive complexity 39 (threshold 15). Drivers by points: if/else 32, boolean chains 5, loops 2 (nesting depth added 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/function/FunctionManagerDB.java"},"region":{"startLine":1059}}}],"partialFingerprints":{"codehealthFindingId/v1":"7990ee5e118a44e1aded59bbd77f9ecf827057103bf481a31e10508b158e9ac4"}},{"ruleId":"D2","level":"warning","message":{"text":"OldLanguage.parseAddressSpaces (cognitive 39): OldLanguage.parseAddressSpaces has cognitive complexity 39 (threshold 15). Drivers by points: if/else 34, error handling 3, boolean chains 1, loops 1 (nesting depth added 19). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/util/OldLanguage.java"},"region":{"startLine":453}}}],"partialFingerprints":{"codehealthFindingId/v1":"8cf75f9ef05747e41b99d9576fce4e745307af4fecb83f8b858b075bd946e62f"}},{"ruleId":"D2","level":"warning","message":{"text":"CppCompositeType.determineBaseSourceOrder (cognitive 39): CppCompositeType.determineBaseSourceOrder has cognitive complexity 39 (threshold 15). Drivers by points: ternaries 27, if/else 9, loops 2, boolean chains 1 (nesting depth added 18). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/PDB/src/main/java/ghidra/app/util/pdb/pdbapplicator/CppCompositeType.java"},"region":{"startLine":874}}}],"partialFingerprints":{"codehealthFindingId/v1":"878129a0dbd8d1773944214a3f9b5b371cae45be8eef2462af6ba84e1a5fda7d"}},{"ruleId":"D2","level":"warning","message":{"text":"BSimControlLaunchable.readOptions (cognitive 39): BSimControlLaunchable.readOptions has cognitive complexity 39 (threshold 15). Drivers by points: if/else 33, boolean chains 3, match/switch 2, loops 1 (nesting depth added 17). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/BSim/src/main/java/ghidra/features/bsim/query/BSimControlLaunchable.java"},"region":{"startLine":244}}}],"partialFingerprints":{"codehealthFindingId/v1":"0f79d4e7acb682e067849a0e9190db7d47d36d24bc79f3ee5d0b414ff4e5c6a1"}},{"ruleId":"D2","level":"warning","message":{"text":"EnablePythonWizardPage.validate (cognitive 38): EnablePythonWizardPage.validate has cognitive complexity 38 (threshold 15). Drivers by points: if/else 24, error handling 10, boolean chains 4 (nesting depth added 20). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"GhidraBuild/EclipsePlugins/GhidraDev/GhidraDevPlugin/src/main/java/ghidradev/ghidraprojectcreator/wizards/pages/EnablePythonWizardPage.java"},"region":{"startLine":230}}}],"partialFingerprints":{"codehealthFindingId/v1":"c26e9b43a18c5d00670f08c2964d12e7e0f98fbbe7fdd0803d91dc4b971d3561"}},{"ruleId":"D2","level":"warning","message":{"text":"PowerPC_ElfRelocationHandler.relocate (cognitive 38): PowerPC_ElfRelocationHandler.relocate has cognitive complexity 38 (threshold 15). Drivers by points: if/else 23, boolean chains 11, match/switch 2, ternaries 2 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Processors/PowerPC/src/main/java/ghidra/app/util/bin/format/elf/relocation/PowerPC_ElfRelocationHandler.java"},"region":{"startLine":62}}}],"partialFingerprints":{"codehealthFindingId/v1":"315cb55291aa6f3a111abe41054f3c965187ff81ec78b60768f3a95b6b62a0c8"}},{"ruleId":"D2","level":"warning","message":{"text":"DecisionNode.orderPatterns (cognitive 38): DecisionNode.orderPatterns has cognitive complexity 38 (threshold 15). Drivers by points: if/else 25, loops 11, boolean chains 2 (nesting depth added 20). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghsymbol/DecisionNode.java"},"region":{"startLine":281}}}],"partialFingerprints":{"codehealthFindingId/v1":"92f1694cf9a2be6292a1f11e3ef7e168a80695e3b5c6ed731bc74f9327e54f75"}},{"ruleId":"D2","level":"warning","message":{"text":"ProgramDB.createManagers (cognitive 38): ProgramDB.createManagers has cognitive complexity 38 (threshold 15). Drivers by points: error handling 25, if/else 13 (nesting depth added 11). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/ProgramDB.java"},"region":{"startLine":1624}}}],"partialFingerprints":{"codehealthFindingId/v1":"09280538d7d36c3a6ec71a248084494895bd63707e8878a08bf70650ce8d19df"}},{"ruleId":"D2","level":"warning","message":{"text":"ParamEntry.restoreXml (cognitive 38): ParamEntry.restoreXml has cognitive complexity 38 (threshold 15). Drivers by points: if/else 33, boolean chains 4, loops 1 (nesting depth added 11). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/lang/ParamEntry.java"},"region":{"startLine":544}}}],"partialFingerprints":{"codehealthFindingId/v1":"d4c368485b75d831ab66057f9a5564b924940b608b68d74a07af51e837a881b5"}},{"ruleId":"D2","level":"warning","message":{"text":"GhidraFileData.checkin (cognitive 38): GhidraFileData.checkin has cognitive complexity 38 (threshold 15). Drivers by points: if/else 32, error handling 3, boolean chains 2, ternaries 1 (nesting depth added 12). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Project/src/main/java/ghidra/framework/data/GhidraFileData.java"},"region":{"startLine":1587}}}],"partialFingerprints":{"codehealthFindingId/v1":"e743e7761fd2f043f19cdb3e4a653f04add318b0099e74f977ae4d9bf1023692"}},{"ruleId":"D2","level":"warning","message":{"text":"DataTreeNode.generateChildren (cognitive 38): DataTreeNode.generateChildren has cognitive complexity 38 (threshold 15). Drivers by points: if/else 27, boolean chains 7, loops 4 (nesting depth added 21). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Project/src/main/java/ghidra/framework/main/datatree/DataTreeNode.java"},"region":{"startLine":270}}}],"partialFingerprints":{"codehealthFindingId/v1":"8e0e21fe60ad2800035485346ef6498f6dc7ee8eaa26eb6b2aab83817a2a3831"}},{"ruleId":"D2","level":"warning","message":{"text":"Table.isConsistent (cognitive 38): Table.isConsistent has cognitive complexity 38 (threshold 15). Drivers by points: if/else 25, loops 11, boolean chains 1, error handling 1 (nesting depth added 19). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/DB/src/main/java/db/Table.java"},"region":{"startLine":376}}}],"partialFingerprints":{"codehealthFindingId/v1":"73841038b4c2b20c671a0840882658b2d9d0bc0c310898a651b6c9b04046a315"}},{"ruleId":"D2","level":"warning","message":{"text":"DmgServerProcessManager.processManagerLoop (cognitive 38): DmgServerProcessManager.processManagerLoop has cognitive complexity 38 (threshold 15). Drivers by points: if/else 21, error handling 7, loops 7, ternaries 3 (nesting depth added 23). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/ios/dmg/DmgServerProcessManager.java"},"region":{"startLine":95}}}],"partialFingerprints":{"codehealthFindingId/v1":"065f852d6de7312ff24b2ec481568cd1be632e5d907b8d2bc9689e6757139690"}},{"ruleId":"D2","level":"warning","message":{"text":"BulkSignatures.sendUpdateToServer (cognitive 38): BulkSignatures.sendUpdateToServer has cognitive complexity 38 (threshold 15). Drivers by points: if/else 27, loops 9, boolean chains 2 (nesting depth added 22). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/BSim/src/main/java/ghidra/features/bsim/query/ingest/BulkSignatures.java"},"region":{"startLine":221}}}],"partialFingerprints":{"codehealthFindingId/v1":"335e7514a06f3a361f67901a6f8a1b2183ae2f765b3f07d80f7e42c95002f268"}},{"ruleId":"D2","level":"warning","message":{"text":"TraceObjectSchema.searchForCanonicalContainer (cognitive 38): TraceObjectSchema.searchForCanonicalContainer has cognitive complexity 38 (threshold 15). Drivers by points: if/else 24, loops 11, boolean chains 3 (nesting depth added 22). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/model/target/schema/TraceObjectSchema.java"},"region":{"startLine":692}}}],"partialFingerprints":{"codehealthFindingId/v1":"9ed6c08500ed35c9b156238e564916e0a70299ee99df73750428705549e9d18a"}},{"ruleId":"D2","level":"warning","message":{"text":"DebuggerModulesProvider.activatedSelectCurrent (cognitive 38): DebuggerModulesProvider.activatedSelectCurrent has cognitive complexity 38 (threshold 15). Drivers by points: if/else 25, loops 10, boolean chains 3 (nesting depth added 20). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/gui/modules/DebuggerModulesProvider.java"},"region":{"startLine":1057}}}],"partialFingerprints":{"codehealthFindingId/v1":"4d14da99f6347d3d73becb1a90ba985eaf880ba7b8327da18656c23f95cc3407"}},{"ruleId":"D2","level":"warning","message":{"text":"AARCH64_ElfRelocationHandler.relocate (cognitive 37): AARCH64_ElfRelocationHandler.relocate has cognitive complexity 37 (threshold 15). Drivers by points: if/else 27, boolean chains 8, match/switch 2 (nesting depth added 13). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Processors/AARCH64/src/main/java/ghidra/app/util/bin/format/elf/relocation/AARCH64_ElfRelocationHandler.java"},"region":{"startLine":57}}}],"partialFingerprints":{"codehealthFindingId/v1":"25864c0f4b803195b26264c9ec2e44cb6cec59756f7d95a52558c296b9cbb53e"}},{"ruleId":"D2","level":"warning","message":{"text":"Constructor.printList (cognitive 37): Constructor.printList has cognitive complexity 37 (threshold 15). Drivers by points: if/else 25, loops 10, boolean chains 2 (nesting depth added 24). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/processors/sleigh/Constructor.java"},"region":{"startLine":183}}}],"partialFingerprints":{"codehealthFindingId/v1":"2e5589ac64cd9115193ee27a37b0d41f04bd5693c654269ea36f76b8bd63c5cf"}},{"ruleId":"D2","level":"warning","message":{"text":"SleighDebugLogger.combinePatternMask (cognitive 37): SleighDebugLogger.combinePatternMask has cognitive complexity 37 (threshold 15). Drivers by points: if/else 32, loops 5 (nesting depth added 26). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/processors/sleigh/SleighDebugLogger.java"},"region":{"startLine":1034}}}],"partialFingerprints":{"codehealthFindingId/v1":"248284f3cd43ef643b4bbfb086eee1c327371857da18d488a9d301cce6e7029a"}},{"ruleId":"D2","level":"warning","message":{"text":"SleighInstructionPrototype.addHandleObject (cognitive 37): SleighInstructionPrototype.addHandleObject has cognitive complexity 37 (threshold 15). Drivers by points: if/else 37 (nesting depth added 24). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/processors/sleigh/SleighInstructionPrototype.java"},"region":{"startLine":1507}}}],"partialFingerprints":{"codehealthFindingId/v1":"cf5ad879fd32468c0110ee40358947df9bd189591d7454b24e244daa518a63d4"}},{"ruleId":"D2","level":"warning","message":{"text":"AlignedComponentPacker.alignAndPackBitField (cognitive 37): AlignedComponentPacker.alignAndPackBitField has cognitive complexity 37 (threshold 15). Drivers by points: if/else 27, ternaries 6, boolean chains 4 (nesting depth added 19). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/AlignedComponentPacker.java"},"region":{"startLine":326}}}],"partialFingerprints":{"codehealthFindingId/v1":"547896480ddd84d0464815b1415601b3ca5fbc3b74841e5f4cf79cfc5ea3d62a"}},{"ruleId":"D2","level":"warning","message":{"text":"PcodeDataTypeManager.encodeType (cognitive 37): PcodeDataTypeManager.encodeType has cognitive complexity 37 (threshold 15). Drivers by points: if/else 31, boolean chains 6 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/pcode/PcodeDataTypeManager.java"},"region":{"startLine":1116}}}],"partialFingerprints":{"codehealthFindingId/v1":"c7c155f5e01cad39faedef50be15e92c6f28ca714fa17836b6ac63bf5f148966"}},{"ruleId":"D2","level":"warning","message":{"text":"SimpleLanguageTranslator.getSimpleLanguageTranslator (cognitive 37): SimpleLanguageTranslator.getSimpleLanguageTranslator has cognitive complexity 37 (threshold 15). Drivers by points: if/else 33, boolean chains 3, loops 1 (nesting depth added 16). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/util/SimpleLanguageTranslator.java"},"region":{"startLine":276}}}],"partialFingerprints":{"codehealthFindingId/v1":"998aad032582b5e7b76c5f5235e8896784e2a18ed9eb4a90daf80648033da209"}},{"ruleId":"D2","level":"warning","message":{"text":"ReferenceTagProcessor.processTag (cognitive 37): ReferenceTagProcessor.processTag has cognitive complexity 37 (threshold 15). Drivers by points: if/else 29, error handling 7, boolean chains 1 (nesting depth added 20). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Help/src/main/java/help/validator/ReferenceTagProcessor.java"},"region":{"startLine":62}}}],"partialFingerprints":{"codehealthFindingId/v1":"3c32e09f50e1c4ae742eed71a51440d118a7ffc0c8555d7066c7c003989991e6"}},{"ruleId":"D2","level":"warning","message":{"text":"DirectedGraph.getComponents (cognitive 37): DirectedGraph.getComponents has cognitive complexity 37 (threshold 15). Drivers by points: loops 19, if/else 18 (nesting depth added 28). To reduce it, break up the iteration: give each loop body a named function, and split a multi-phase loop into one function per phase so no single body carries the whole pipeline."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Generic/src/main/java/ghidra/util/graph/DirectedGraph.java"},"region":{"startLine":658}}}],"partialFingerprints":{"codehealthFindingId/v1":"e2b4be4fe2cc625594438b84cb8909e8261cac83e23017bdc2ba2b76f2fdb11d"}},{"ruleId":"D2","level":"warning","message":{"text":"PropertiesSarifMgr.processPropertyListEntry (cognitive 37): PropertiesSarifMgr.processPropertyListEntry has cognitive complexity 37 (threshold 15). Drivers by points: if/else 34, boolean chains 3 (nesting depth added 13). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/Sarif/src/main/java/sarif/managers/PropertiesSarifMgr.java"},"region":{"startLine":196}}}],"partialFingerprints":{"codehealthFindingId/v1":"1eaaee6e8bdc50a453a93bdb693138bbe76c143fcc430306e207b3ca70d71542"}},{"ruleId":"D2","level":"warning","message":{"text":"ApplySymbols.applyTo (cognitive 37): ApplySymbols.applyTo has cognitive complexity 37 (threshold 15). Drivers by points: if/else 31, boolean chains 4, loops 2 (nesting depth added 17). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/PDB/src/main/java/ghidra/app/util/bin/format/pdb/ApplySymbols.java"},"region":{"startLine":46}}}],"partialFingerprints":{"codehealthFindingId/v1":"8cf3b7777c83fe0e3914fb2f001522152a95180b721a185e18c809fa2668d31b"}},{"ruleId":"D2","level":"warning","message":{"text":"Pinning.buildTokenMap (cognitive 37): Pinning.buildTokenMap has cognitive complexity 37 (threshold 15). Drivers by points: if/else 21, boolean chains 6, ternaries 6, loops 4 (nesting depth added 17). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/CodeCompare/src/main/java/ghidra/features/codecompare/graphanalysis/Pinning.java"},"region":{"startLine":726}}}],"partialFingerprints":{"codehealthFindingId/v1":"a485fa1e9a1e9b5177e315daddf1439864f11db1bd602380b714244a7ea5bab0"}},{"ruleId":"D2","level":"warning","message":{"text":"ExeTable.queryAllExe (cognitive 37): ExeTable.queryAllExe has cognitive complexity 37 (threshold 15). Drivers by points: if/else 35, boolean chains 1, loops 1 (nesting depth added 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/BSim/src/main/java/ghidra/features/bsim/query/client/tables/ExeTable.java"},"region":{"startLine":457}}}],"partialFingerprints":{"codehealthFindingId/v1":"82173f7bb96bccf9cd019d3c6db74c7f9af7d695f9891e5860f53ae45ea88909"}},{"ruleId":"D2","level":"warning","message":{"text":"Translator.translate (cognitive 37): Translator.translate has cognitive complexity 37 (threshold 15). Drivers by points: if/else 36, boolean chains 1 (nesting depth added 14). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/target/DBTraceObjectInterface.java"},"region":{"startLine":116}}}],"partialFingerprints":{"codehealthFindingId/v1":"128df20e2ab6c290a91acaf65058d354cd4d88ac6fcd0d72f008655771cb82fa"}},{"ruleId":"D2","level":"warning","message":{"text":"SleighInstructionPrototype.resolve (cognitive 36): SleighInstructionPrototype.resolve has cognitive complexity 36 (threshold 15). Drivers by points: if/else 32, loops 3, boolean chains 1 (nesting depth added 22). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/processors/sleigh/SleighInstructionPrototype.java"},"region":{"startLine":1354}}}],"partialFingerprints":{"codehealthFindingId/v1":"622292cf6302b6025612e72238f0b979cfd0088d5866574c2d2e78218786235f"}},{"ruleId":"D2","level":"warning","message":{"text":"PartitionCodeSubModel.createBlockGraph (cognitive 36): PartitionCodeSubModel.createBlockGraph has cognitive complexity 36 (threshold 15). Drivers by points: if/else 18, loops 10, ternaries 7, boolean chains 1 (nesting depth added 23). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/block/PartitionCodeSubModel.java"},"region":{"startLine":417}}}],"partialFingerprints":{"codehealthFindingId/v1":"7b255b0b5436354e00635bd593f0a0cb2e5bbbac734448ea44ac722cdc27ae92"}},{"ruleId":"D2","level":"warning","message":{"text":"PcodeDataTypeManager.decodeDataType (cognitive 36): PcodeDataTypeManager.decodeDataType has cognitive complexity 36 (threshold 15). Drivers by points: if/else 30, ternaries 3, boolean chains 2, loops 1 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/pcode/PcodeDataTypeManager.java"},"region":{"startLine":213}}}],"partialFingerprints":{"codehealthFindingId/v1":"bde494714d006f3afd95c57813c7f372663e414052b68ddcdb84f73566cecdd4"}},{"ruleId":"D2","level":"warning","message":{"text":"HTMLFileParser.processTag (cognitive 36): HTMLFileParser.processTag has cognitive complexity 36 (threshold 15). Drivers by points: if/else 24, boolean chains 8, loops 2, match/switch 2 (nesting depth added 14). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Help/src/main/java/help/validator/HTMLFileParser.java"},"region":{"startLine":176}}}],"partialFingerprints":{"codehealthFindingId/v1":"96496e7c836960b29332d51b4da16757c03c43e81cfd2a046407be158fa23b0e"}},{"ruleId":"D2","level":"warning","message":{"text":"GProperties.createElement (cognitive 36): GProperties.createElement has cognitive complexity 36 (threshold 15). Drivers by points: if/else 36 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Generic/src/main/java/ghidra/framework/options/GProperties.java"},"region":{"startLine":536}}}],"partialFingerprints":{"codehealthFindingId/v1":"dd82bed6b812600b20287179b09ba0011286269f7c12f552fa353af5539b837d"}},{"ruleId":"D2","level":"warning","message":{"text":"Table.deleteRecords (cognitive 36): Table.deleteRecords has cognitive complexity 36 (threshold 15). Drivers by points: if/else 28, loops 7, boolean chains 1 (nesting depth added 12). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/DB/src/main/java/db/Table.java"},"region":{"startLine":1282}}}],"partialFingerprints":{"codehealthFindingId/v1":"414e212909848297f62b571ae3afd6a8a0c11dcea9deba79d4b77841ece0ffa9"}},{"ruleId":"D2","level":"warning","message":{"text":"Table.deleteRecords (cognitive 36): Table.deleteRecords has cognitive complexity 36 (threshold 15). Drivers by points: if/else 28, loops 7, boolean chains 1 (nesting depth added 12). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/DB/src/main/java/db/Table.java"},"region":{"startLine":1155}}}],"partialFingerprints":{"codehealthFindingId/v1":"aa1d61a5d451a9f54170f5efb8376bb028c6203cd65a082b309eb836b9fb42a5"}},{"ruleId":"D2","level":"warning","message":{"text":"CartV1File.\u003Cinit\u003E (cognitive 36): CartV1File.\u003Cinit\u003E has cognitive complexity 36 (threshold 15). Drivers by points: if/else 29, error handling 5, boolean chains 1, loops 1 (nesting depth added 11). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/cart/CartV1File.java"},"region":{"startLine":131}}}],"partialFingerprints":{"codehealthFindingId/v1":"f087602f0bef27508f67b07ab22caefce9924dbeb3608f06cbdcf14de8f5624d"}},{"ruleId":"D2","level":"warning","message":{"text":"FormatStringParser.convertToFormatArguments (cognitive 36): FormatStringParser.convertToFormatArguments has cognitive complexity 36 (threshold 15). Drivers by points: if/else 34, boolean chains 1, loops 1 (nesting depth added 21). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/DecompilerDependent/src/main/java/ghidra/app/plugin/core/string/variadic/FormatStringParser.java"},"region":{"startLine":122}}}],"partialFingerprints":{"codehealthFindingId/v1":"99834845019a6cc8c514828cb73b2e8b142b78bca3145281d5c26f44a67738cc"}},{"ruleId":"D2","level":"warning","message":{"text":"LisaTaintState.processSimpleState (cognitive 36): LisaTaintState.processSimpleState has cognitive complexity 36 (threshold 15). Drivers by points: if/else 28, loops 8 (nesting depth added 18). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Extensions/Lisa/src/main/java/ghidra/lisa/gui/LisaTaintState.java"},"region":{"startLine":325}}}],"partialFingerprints":{"codehealthFindingId/v1":"bb18473025c14e9079d45c4b10d160da9660bd1b2dc2b805b9b312dbbedc4f3f"}},{"ruleId":"D2","level":"warning","message":{"text":"StackUnwinder.pcOrSp (cognitive 36): StackUnwinder.pcOrSp has cognitive complexity 36 (threshold 15). Drivers by points: if/else 20, ternaries 14, error handling 2 (nesting depth added 19). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/stack/StackUnwinder.java"},"region":{"startLine":238}}}],"partialFingerprints":{"codehealthFindingId/v1":"1885562a810b1c2c57fec68d9897a85c89577ec0da13c4bff25289c09c6c7d1a"}},{"ruleId":"D2","level":"warning","message":{"text":"GhidraProjectUtils.linkGhidraToProject (cognitive 35): GhidraProjectUtils.linkGhidraToProject has cognitive complexity 35 (threshold 15). Drivers by points: if/else 27, boolean chains 6, error handling 1, loops 1 (nesting depth added 14). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"GhidraBuild/EclipsePlugins/GhidraDev/GhidraDevPlugin/src/main/java/ghidradev/ghidraprojectcreator/utils/GhidraProjectUtils.java"},"region":{"startLine":375}}}],"partialFingerprints":{"codehealthFindingId/v1":"616356290e19d42757062ae943c77542aaa14d828cfdbfb927bf4fbc1a2f9ef3"}},{"ruleId":"D2","level":"warning","message":{"text":"X86_64_ElfRelocationHandler.relocate (cognitive 35): X86_64_ElfRelocationHandler.relocate has cognitive complexity 35 (threshold 15). Drivers by points: if/else 24, error handling 6, boolean chains 2, match/switch 2, ternaries 1 (nesting depth added 14). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Processors/x86/src/main/java/ghidra/app/util/bin/format/elf/relocation/X86_64_ElfRelocationHandler.java"},"region":{"startLine":53}}}],"partialFingerprints":{"codehealthFindingId/v1":"1e98579c9ad89eb012e056acfece4bef66efe298088f7f2ccaaf031a9d76c240"}},{"ruleId":"D2","level":"warning","message":{"text":"Pic17c7xxAnalyzer.handleWRegModification (cognitive 35): Pic17c7xxAnalyzer.handleWRegModification has cognitive complexity 35 (threshold 15). Drivers by points: if/else 29, boolean chains 6 (nesting depth added 17). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Processors/PIC/src/main/java/ghidra/app/plugin/core/analysis/Pic17c7xxAnalyzer.java"},"region":{"startLine":689}}}],"partialFingerprints":{"codehealthFindingId/v1":"fb01e902ea0b12a29242f722f5c35d170889e0d96e6c42501f2f33cb213aa70a"}},{"ruleId":"D2","level":"warning","message":{"text":"Translate.insertSpace (cognitive 35): Translate.insertSpace has cognitive complexity 35 (threshold 15). Drivers by points: if/else 32, loops 2, match/switch 1 (nesting depth added 17). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/translate/Translate.java"},"region":{"startLine":349}}}],"partialFingerprints":{"codehealthFindingId/v1":"d8b800c0f4c77bc81689956f647d480fb9867ec755291210a92b129bf7f251bd"}},{"ruleId":"D2","level":"warning","message":{"text":"RefListV0.updateRefType (cognitive 35): RefListV0.updateRefType has cognitive complexity 35 (threshold 15). Drivers by points: if/else 31, ternaries 3, loops 1 (nesting depth added 22). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/references/RefListV0.java"},"region":{"startLine":457}}}],"partialFingerprints":{"codehealthFindingId/v1":"751d570af0311d0ea6ad640e47820b5669197ed8dded1d88efc547ac4449d631"}},{"ruleId":"D2","level":"warning","message":{"text":"DisassemblerQueue.instructionSetAddedToProgram (cognitive 35): DisassemblerQueue.instructionSetAddedToProgram has cognitive complexity 35 (threshold 15). Drivers by points: if/else 27, loops 5, boolean chains 3 (nesting depth added 19). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/disassemble/DisassemblerQueue.java"},"region":{"startLine":201}}}],"partialFingerprints":{"codehealthFindingId/v1":"936c52ae07eb5d743d0f066ec43696bec8411c0cabdd4e3ad25af24385bf10a0"}},{"ruleId":"D2","level":"warning","message":{"text":"HighFunction.grabOverrides (cognitive 35): HighFunction.grabOverrides has cognitive complexity 35 (threshold 15). Drivers by points: if/else 34, loops 1 (nesting depth added 23). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/pcode/HighFunction.java"},"region":{"startLine":168}}}],"partialFingerprints":{"codehealthFindingId/v1":"2827879452ce62996e6f2afd813591b8b8ff7fa354d0ba5c52f3f45b8408d301"}},{"ruleId":"D2","level":"warning","message":{"text":"PKIAuthenticationModule.authenticate (cognitive 35): PKIAuthenticationModule.authenticate has cognitive complexity 35 (threshold 15). Drivers by points: if/else 28, error handling 2, loops 2, ternaries 2, boolean chains 1 (nesting depth added 11). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/GhidraServer/src/main/java/ghidra/server/security/PKIAuthenticationModule.java"},"region":{"startLine":93}}}],"partialFingerprints":{"codehealthFindingId/v1":"0a400b2f044528a3ecab46c2878e4cbe4b1ca33d29bf6e5332dcbd80b9f07e18"}},{"ruleId":"D2","level":"warning","message":{"text":"CrushedPNGUtil.processIDATChunks (cognitive 35): CrushedPNGUtil.processIDATChunks has cognitive complexity 35 (threshold 15). Drivers by points: loops 21, if/else 14 (nesting depth added 21). To reduce it, break up the iteration: give each loop body a named function, and split a multi-phase loop into one function per phase so no single body carries the whole pipeline."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/ios/png/CrushedPNGUtil.java"},"region":{"startLine":195}}}],"partialFingerprints":{"codehealthFindingId/v1":"f4045d1ba9cb68b108e9954c3daea7ed62497c0b86a40753635aed1a3cda5c01"}},{"ruleId":"D2","level":"warning","message":{"text":"ExeTable.queryExeCount (cognitive 35): ExeTable.queryExeCount has cognitive complexity 35 (threshold 15). Drivers by points: if/else 33, boolean chains 1, error handling 1 (nesting depth added 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/BSim/src/main/java/ghidra/features/bsim/query/client/tables/ExeTable.java"},"region":{"startLine":358}}}],"partialFingerprints":{"codehealthFindingId/v1":"c33d1cb9dcc0f39c374ba17e92055f18089187bba85046338819e0f0d28b0d5a"}},{"ruleId":"D2","level":"warning","message":{"text":"PcodeEmit.checkOverrides (cognitive 34): PcodeEmit.checkOverrides has cognitive complexity 34 (threshold 15). Drivers by points: if/else 24, boolean chains 10 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/processors/sleigh/PcodeEmit.java"},"region":{"startLine":774}}}],"partialFingerprints":{"codehealthFindingId/v1":"0954bea872b6ff450f9f634cd90d4a79d5cbec0d1b3abd4b9390daa41a52bdee"}},{"ruleId":"D2","level":"warning","message":{"text":"ReferenceDBManager.moveAddressRange (cognitive 34): ReferenceDBManager.moveAddressRange has cognitive complexity 34 (threshold 15). Drivers by points: if/else 25, boolean chains 4, loops 3, error handling 1, ternaries 1 (nesting depth added 18). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/references/ReferenceDBManager.java"},"region":{"startLine":1378}}}],"partialFingerprints":{"codehealthFindingId/v1":"ee2b10c3ab99a65fe59ff926d47d22e03bea7d04a5018d8bb29dfdd8d6d08173"}},{"ruleId":"D2","level":"warning","message":{"text":"LSHCosineVector.compareDetail (cognitive 34): LSHCosineVector.compareDetail has cognitive complexity 34 (threshold 15). Drivers by points: if/else 29, loops 4, boolean chains 1 (nesting depth added 20). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Generic/src/main/java/generic/lsh/vector/LSHCosineVector.java"},"region":{"startLine":326}}}],"partialFingerprints":{"codehealthFindingId/v1":"1859b077292aa62862d9c2f7929f70f74060e72a53be83189d02c5ad64d1d8bb"}},{"ruleId":"D2","level":"warning","message":{"text":"SimilarDataProgramCorrelator.addDataToMap (cognitive 34): SimilarDataProgramCorrelator.addDataToMap has cognitive complexity 34 (threshold 15). Drivers by points: if/else 28, loops 3, error handling 2, boolean chains 1 (nesting depth added 17). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/VersionTracking/src/main/java/ghidra/feature/vt/api/correlator/program/SimilarDataProgramCorrelator.java"},"region":{"startLine":98}}}],"partialFingerprints":{"codehealthFindingId/v1":"8a8cf286f7eea8161ba7a79730a81e02a9b6d563978c131dc86120a9a98c59e4"}},{"ruleId":"D2","level":"warning","message":{"text":"DataTypesSarifMgr.findDataType (cognitive 34): DataTypesSarifMgr.findDataType has cognitive complexity 34 (threshold 15). Drivers by points: if/else 33, boolean chains 1 (nesting depth added 16). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/Sarif/src/main/java/sarif/managers/DataTypesSarifMgr.java"},"region":{"startLine":565}}}],"partialFingerprints":{"codehealthFindingId/v1":"e065ff05be5c70805540f0a72bcc01c1b57a84d21f6d2cede85aac6e59d70e5f"}},{"ruleId":"D2","level":"warning","message":{"text":"SymbolTableSarifMgr.processSymbol (cognitive 34): SymbolTableSarifMgr.processSymbol has cognitive complexity 34 (threshold 15). Drivers by points: if/else 26, boolean chains 6, error handling 1, ternaries 1 (nesting depth added 11). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/Sarif/src/main/java/sarif/managers/SymbolTableSarifMgr.java"},"region":{"startLine":69}}}],"partialFingerprints":{"codehealthFindingId/v1":"ae2e3254558f80fa1ca49c3d1df4486734bd6c4053f144a1906d9784d087dee0"}},{"ruleId":"D2","level":"warning","message":{"text":"SarifUtils.locationToAddress (cognitive 34): SarifUtils.locationToAddress has cognitive complexity 34 (threshold 15). Drivers by points: if/else 22, loops 6, error handling 3, match/switch 3 (nesting depth added 20). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/Sarif/src/main/java/sarif/SarifUtils.java"},"region":{"startLine":146}}}],"partialFingerprints":{"codehealthFindingId/v1":"46cedab3a07cd32957fc667a698159509f9a9626a2d8fac8ed3dc167c3d853ee"}},{"ruleId":"D2","level":"warning","message":{"text":"PdbParser.verifyPdbSignature (cognitive 34): PdbParser.verifyPdbSignature has cognitive complexity 34 (threshold 15). Drivers by points: if/else 31, boolean chains 2, error handling 1 (nesting depth added 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/PDB/src/main/java/ghidra/app/util/bin/format/pdb/PdbParser.java"},"region":{"startLine":591}}}],"partialFingerprints":{"codehealthFindingId/v1":"fc5fbf75abc8cca52635eb93054e2666e34d72919c92941f894d3f4b6674257f"}},{"ruleId":"D2","level":"warning","message":{"text":"Z3InfixPrinter.infixHelper (cognitive 34): Z3InfixPrinter.infixHelper has cognitive complexity 34 (threshold 15). Drivers by points: if/else 27, boolean chains 5, loops 2 (nesting depth added 13). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Extensions/SymbolicSummaryZ3/src/main/java/ghidra/pcode/emu/symz3/lib/Z3InfixPrinter.java"},"region":{"startLine":215}}}],"partialFingerprints":{"codehealthFindingId/v1":"73cccce81aa899ae3112643e7fa18126ffcf5773861317b76eee0c819c1491ed"}},{"ruleId":"D2","level":"warning","message":{"text":"PowerPCAddressAnalyzer.recoverSwitches (cognitive 33): PowerPCAddressAnalyzer.recoverSwitches has cognitive complexity 33 (threshold 15). Drivers by points: if/else 21, loops 5, error handling 4, boolean chains 3 (nesting depth added 17). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Processors/PowerPC/src/main/java/ghidra/app/plugin/core/analysis/PowerPCAddressAnalyzer.java"},"region":{"startLine":382}}}],"partialFingerprints":{"codehealthFindingId/v1":"5b1e056b31a63f14e421570ce2f329ed62202762bdb527f8004ff75ae8baf648"}},{"ruleId":"D2","level":"warning","message":{"text":"Constructor.orderOperands (cognitive 33): Constructor.orderOperands has cognitive complexity 33 (threshold 15). Drivers by points: if/else 21, loops 10, boolean chains 2 (nesting depth added 12). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghsymbol/Constructor.java"},"region":{"startLine":343}}}],"partialFingerprints":{"codehealthFindingId/v1":"f809860bbac27b9a53bbfc44875739dcd15b009faaf2ad5de0f49944a3c47b10"}},{"ruleId":"D2","level":"warning","message":{"text":"BookmarkDBAdapterV3.\u003Cinit\u003E (cognitive 33): BookmarkDBAdapterV3.\u003Cinit\u003E has cognitive complexity 33 (threshold 15). Drivers by points: if/else 24, loops 6, boolean chains 3 (nesting depth added 18). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/bookmark/BookmarkDBAdapterV3.java"},"region":{"startLine":46}}}],"partialFingerprints":{"codehealthFindingId/v1":"09e1f2cb3fd13c9f453a4f90459ad5da6384006c6a4542990ab09a9ea4606049"}},{"ruleId":"D2","level":"warning","message":{"text":"SharedRangeMapDB.add (cognitive 33): SharedRangeMapDB.add has cognitive complexity 33 (threshold 15). Drivers by points: if/else 30, loops 2, error handling 1 (nesting depth added 17). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/util/SharedRangeMapDB.java"},"region":{"startLine":126}}}],"partialFingerprints":{"codehealthFindingId/v1":"c1dc6aeadf5b95928101ba63b57b05705099e58620165a0eed23fe007d0e2df6"}},{"ruleId":"D2","level":"warning","message":{"text":"DynamicHash.uniqueHash (cognitive 33): DynamicHash.uniqueHash has cognitive complexity 33 (threshold 15). Drivers by points: if/else 28, loops 4, boolean chains 1 (nesting depth added 17). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/pcode/DynamicHash.java"},"region":{"startLine":433}}}],"partialFingerprints":{"codehealthFindingId/v1":"d23eb8c47a3c35af37818258e3b76ef96a0f57be40ced3243bd86ee3c8dcb37e"}},{"ruleId":"D2","level":"warning","message":{"text":"LocalSymbolMap.grabEquates (cognitive 33): LocalSymbolMap.grabEquates has cognitive complexity 33 (threshold 15). Drivers by points: if/else 21, loops 11, boolean chains 1 (nesting depth added 23). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/pcode/LocalSymbolMap.java"},"region":{"startLine":512}}}],"partialFingerprints":{"codehealthFindingId/v1":"4346dba52342b62dac7decb0446e006905c00655cf00818e46cb172b3ed75357"}},{"ruleId":"D2","level":"warning","message":{"text":"LSHCosineVector.compare (cognitive 33): LSHCosineVector.compare has cognitive complexity 33 (threshold 15). Drivers by points: if/else 30, loops 2, boolean chains 1 (nesting depth added 20). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Generic/src/main/java/generic/lsh/vector/LSHCosineVector.java"},"region":{"startLine":185}}}],"partialFingerprints":{"codehealthFindingId/v1":"7e7332d1bb2ebbd14846142e9a84abeaa6477b6c5dc9f6a321c676b081cdf682"}},{"ruleId":"D2","level":"warning","message":{"text":"SarifUtils.initRun (cognitive 33): SarifUtils.initRun has cognitive complexity 33 (threshold 15). Drivers by points: if/else 18, loops 15 (nesting depth added 21). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/Sarif/src/main/java/sarif/SarifUtils.java"},"region":{"startLine":380}}}],"partialFingerprints":{"codehealthFindingId/v1":"cd77efe9575299502fc35bb4299cf2bc0ba6ca9adce0f311bf8cadbc4fa36f25"}},{"ruleId":"D2","level":"warning","message":{"text":"FormatStringParser.analyzeFormatStringWithParameters (cognitive 33): FormatStringParser.analyzeFormatStringWithParameters has cognitive complexity 33 (threshold 15). Drivers by points: if/else 32, loops 1 (nesting depth added 21). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/DecompilerDependent/src/main/java/ghidra/app/plugin/core/string/variadic/FormatStringParser.java"},"region":{"startLine":334}}}],"partialFingerprints":{"codehealthFindingId/v1":"9e7c4e64841cd375d11ff300fe4bb9075ddae719b0fa3e46ba4895f514c3a535"}},{"ruleId":"D2","level":"warning","message":{"text":"BSimLaunchable.run (cognitive 33): BSimLaunchable.run has cognitive complexity 33 (threshold 15). Drivers by points: if/else 33 (nesting depth added 11). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/BSim/src/main/java/ghidra/features/bsim/query/ingest/BSimLaunchable.java"},"region":{"startLine":392}}}],"partialFingerprints":{"codehealthFindingId/v1":"71428b88e3a1aff50ad83ef4a5d57f1871bcb0f2efb315b2e897dac575b2429f"}},{"ruleId":"D2","level":"warning","message":{"text":"BSimPostgresDataSource.connect (cognitive 33): BSimPostgresDataSource.connect has cognitive complexity 33 (threshold 15). Drivers by points: if/else 25, boolean chains 3, error handling 3, loops 1, ternaries 1 (nesting depth added 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/BSim/src/main/java/ghidra/features/bsim/query/BSimPostgresDBConnectionManager.java"},"region":{"startLine":283}}}],"partialFingerprints":{"codehealthFindingId/v1":"d2c39d1e47b6efca524131c28d91683b1c035bbc264861cb06b41e2d00797a1e"}},{"ruleId":"D2","level":"warning","message":{"text":"Pic12Analyzer.markupFRegInstruction (cognitive 32): Pic12Analyzer.markupFRegInstruction has cognitive complexity 32 (threshold 15). Drivers by points: if/else 28, boolean chains 3, ternaries 1 (nesting depth added 12). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Processors/PIC/src/main/java/ghidra/app/plugin/core/analysis/Pic12Analyzer.java"},"region":{"startLine":294}}}],"partialFingerprints":{"codehealthFindingId/v1":"5a395d8b34ae4bfcb18fb560a54088e1ba8493e32e979f00ef7a34cc770c6665"}},{"ruleId":"D2","level":"warning","message":{"text":"LanguageFixupUtil.applyPSpecFixups (cognitive 32): LanguageFixupUtil.applyPSpecFixups has cognitive complexity 32 (threshold 15). Drivers by points: if/else 15, error handling 8, loops 6, boolean chains 3 (nesting depth added 13). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/processors/generic/LanguageFixupUtil.java"},"region":{"startLine":48}}}],"partialFingerprints":{"codehealthFindingId/v1":"ef01c78ece1e97c333b5b7b861c0ee68306db43b4f6f2d451f42607d0114c523"}},{"ruleId":"D2","level":"warning","message":{"text":"SleighInstructionPrototype.getStaticOperandRefType (cognitive 32): SleighInstructionPrototype.getStaticOperandRefType has cognitive complexity 32 (threshold 15). Drivers by points: if/else 25, loops 4, match/switch 2, boolean chains 1 (nesting depth added 17). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/processors/sleigh/SleighInstructionPrototype.java"},"region":{"startLine":1212}}}],"partialFingerprints":{"codehealthFindingId/v1":"4abc2f0e30fe0f9e050eb76a55b60faff4727b1cde3b9811e1310512c7fc5cf1"}},{"ruleId":"D2","level":"warning","message":{"text":"PcodeCompile.fillinZero (cognitive 32): PcodeCompile.fillinZero has cognitive complexity 32 (threshold 15). Drivers by points: if/else 22, loops 6, boolean chains 3, match/switch 1 (nesting depth added 15). The drivers above price the dispatch low by construction \u2014 a dispatch is charged once however many cases it lists, while each branch inside an arm is charged in full \u2014 so most of this count is what the case bodies hold, and the arms are where it can be reduced. To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slgh_compile/PcodeCompile.java"},"region":{"startLine":743}}}],"partialFingerprints":{"codehealthFindingId/v1":"bfff660d6684672725ba732a6fda012929f252959fb98e11d89a2ae065f50e2e"}},{"ruleId":"D2","level":"warning","message":{"text":"SymbolTable.purge (cognitive 32): SymbolTable.purge has cognitive complexity 32 (threshold 15). Drivers by points: loops 15, if/else 14, match/switch 3 (nesting depth added 20). To reduce it, break up the iteration: give each loop body a named function, and split a multi-phase loop into one function per phase so no single body carries the whole pipeline."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghsymbol/SymbolTable.java"},"region":{"startLine":215}}}],"partialFingerprints":{"codehealthFindingId/v1":"a82d6357bd79ad1619ed388e17d5940da4a5e63d131353fad0465fedb22dac7a"}},{"ruleId":"D2","level":"warning","message":{"text":"StructureDB.delete (cognitive 32): StructureDB.delete has cognitive complexity 32 (threshold 15). Drivers by points: if/else 27, boolean chains 3, error handling 1, loops 1 (nesting depth added 11). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/StructureDB.java"},"region":{"startLine":614}}}],"partialFingerprints":{"codehealthFindingId/v1":"22f3dd8fec8a56629785e3b6b586fe18cacb0134303509fa151069ebb4802443"}},{"ruleId":"D2","level":"warning","message":{"text":"MemoryMapDB.match (cognitive 32): MemoryMapDB.match has cognitive complexity 32 (threshold 15). Drivers by points: if/else 22, loops 9, error handling 1 (nesting depth added 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/mem/MemoryMapDB.java"},"region":{"startLine":1177}}}],"partialFingerprints":{"codehealthFindingId/v1":"f4be399f37288b0cfe239ca2c671ab77023ee0f7c11fc4339df4d4d6314d0ad0"}},{"ruleId":"D2","level":"warning","message":{"text":"SimpleBlockModel.getCodeBlockAt (cognitive 32): SimpleBlockModel.getCodeBlockAt has cognitive complexity 32 (threshold 15). Drivers by points: if/else 20, loops 6, boolean chains 4, error handling 2 (nesting depth added 14). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/block/SimpleBlockModel.java"},"region":{"startLine":158}}}],"partialFingerprints":{"codehealthFindingId/v1":"461de462a67521d1567434d15de6d1a67add20e1cfbfa1f7e286f7fee89af2c9"}},{"ruleId":"D2","level":"warning","message":{"text":"ModelRule.isEquivalent (cognitive 32): ModelRule.isEquivalent has cognitive complexity 32 (threshold 15). Drivers by points: if/else 24, boolean chains 6, loops 2 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/lang/protorules/ModelRule.java"},"region":{"startLine":108}}}],"partialFingerprints":{"codehealthFindingId/v1":"ecd7dd9896f2fcda819d08bd2a40109cca2229f07fe7ab65ffd6e190cc5c9555"}},{"ruleId":"D2","level":"warning","message":{"text":"GhidraFolderData.refreshFolders (cognitive 32): GhidraFolderData.refreshFolders has cognitive complexity 32 (threshold 15). Drivers by points: if/else 21, loops 5, error handling 4, boolean chains 2 (nesting depth added 14). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Project/src/main/java/ghidra/framework/data/GhidraFolderData.java"},"region":{"startLine":567}}}],"partialFingerprints":{"codehealthFindingId/v1":"12aaab0233543cdc1c223d4f3b5a4070795fc71f67f4eff2d463185b8d702635"}},{"ruleId":"D2","level":"warning","message":{"text":"GhidraURLQuery.processContent (cognitive 32): GhidraURLQuery.processContent has cognitive complexity 32 (threshold 15). Drivers by points: if/else 29, boolean chains 3 (nesting depth added 16). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Project/src/main/java/ghidra/framework/protocol/ghidra/GhidraURLQuery.java"},"region":{"startLine":237}}}],"partialFingerprints":{"codehealthFindingId/v1":"381cfcf829cb7f3f105cf63c69715e241f940aea29a7b29acd767b82766a1e4b"}},{"ruleId":"D2","level":"warning","message":{"text":"ChkDominanceAlgorithm.computeDominance (cognitive 32): ChkDominanceAlgorithm.computeDominance has cognitive complexity 32 (threshold 15). Drivers by points: if/else 22, loops 10 (nesting depth added 21). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Graph/src/main/java/ghidra/graph/algo/ChkDominanceAlgorithm.java"},"region":{"startLine":90}}}],"partialFingerprints":{"codehealthFindingId/v1":"c1adceef0389754e1a36d0264231ea66ae022fc5aace1c623885f8e6afa8fc24"}},{"ruleId":"D2","level":"warning","message":{"text":"ApplicationKeyManagerFactory.getKeyManager (cognitive 32): ApplicationKeyManagerFactory.getKeyManager has cognitive complexity 32 (threshold 15). Drivers by points: if/else 25, error handling 5, boolean chains 1, loops 1 (nesting depth added 16). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Generic/src/main/java/ghidra/net/ApplicationKeyManagerFactory.java"},"region":{"startLine":74}}}],"partialFingerprints":{"codehealthFindingId/v1":"056a222d29247e9748613767e8ccef23a4ed94417ddbc80d013b9db68502a463"}},{"ruleId":"D2","level":"warning","message":{"text":"DataReferenceGraph.recurseGraph (cognitive 32): DataReferenceGraph.recurseGraph has cognitive complexity 32 (threshold 15). Drivers by points: if/else 28, loops 4 (nesting depth added 20). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/ProgramGraph/src/main/java/ghidra/graph/program/DataReferenceGraph.java"},"region":{"startLine":142}}}],"partialFingerprints":{"codehealthFindingId/v1":"b947406a2cf299d205843a89a15c98471330e05571665fd7d726f3fa9b307a7a"}},{"ruleId":"D2","level":"warning","message":{"text":"DefaultCompositeMember.addUnionMember (cognitive 32): DefaultCompositeMember.addUnionMember has cognitive complexity 32 (threshold 15). Drivers by points: if/else 26, boolean chains 5, ternaries 1 (nesting depth added 12). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/PDB/src/main/java/ghidra/app/util/bin/format/pdb/DefaultCompositeMember.java"},"region":{"startLine":1101}}}],"partialFingerprints":{"codehealthFindingId/v1":"91cca8346a408f9316623c8598a93ad93e5c27327dc3ceecea46060caeb34891"}},{"ruleId":"D2","level":"warning","message":{"text":"UserManager.readUserList (cognitive 32): UserManager.readUserList has cognitive complexity 32 (threshold 15). Drivers by points: if/else 25, error handling 6, loops 1 (nesting depth added 20). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/GhidraServer/src/main/java/ghidra/server/UserManager.java"},"region":{"startLine":577}}}],"partialFingerprints":{"codehealthFindingId/v1":"a92925ff5ad01ab45e8fcd2c73e1375951a35592fe07d73e303f7e37c33e7347"}},{"ruleId":"D2","level":"warning","message":{"text":"OatDexFile_Nougat.markup (cognitive 32): OatDexFile_Nougat.markup has cognitive complexity 32 (threshold 15). Drivers by points: if/else 26, loops 4, boolean chains 2 (nesting depth added 21). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/android/oat/oatdexfile/OatDexFile_Nougat.java"},"region":{"startLine":103}}}],"partialFingerprints":{"codehealthFindingId/v1":"c3ad7201e8ab65573796724f65d601f345365dae100b0452739ba963c0770e82"}},{"ruleId":"D2","level":"warning","message":{"text":"DecompInterface.initializeProcess (cognitive 32): DecompInterface.initializeProcess has cognitive complexity 32 (threshold 15). Drivers by points: if/else 31, boolean chains 1 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/Decompiler/src/main/java/ghidra/app/decompiler/DecompInterface.java"},"region":{"startLine":258}}}],"partialFingerprints":{"codehealthFindingId/v1":"145beb30fdd2ea33d9113ba0a1d1514c215e0218abf890ee9d9f8773cb3f9867"}},{"ruleId":"D2","level":"warning","message":{"text":"DecompileProcess.readResponse (cognitive 32): DecompileProcess.readResponse has cognitive complexity 32 (threshold 15). Drivers by points: if/else 23, match/switch 5, error handling 3, loops 1 (nesting depth added 20). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/Decompiler/src/main/java/ghidra/app/decompiler/DecompileProcess.java"},"region":{"startLine":318}}}],"partialFingerprints":{"codehealthFindingId/v1":"c4d6ea0d3cdbeb108fc8f6bedcb3ab35888ae5bca7e197a3e98655ee6c6c3887"}},{"ruleId":"D2","level":"warning","message":{"text":"ForceUnionAction.determineFacet (cognitive 32): ForceUnionAction.determineFacet has cognitive complexity 32 (threshold 15). Drivers by points: if/else 24, loops 5, boolean chains 3 (nesting depth added 16). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/Decompiler/src/main/java/ghidra/app/plugin/core/decompile/actions/ForceUnionAction.java"},"region":{"startLine":167}}}],"partialFingerprints":{"codehealthFindingId/v1":"280308b62db2661ffd0c47d69df19e37d11dcd71f0eeafa86da27e9515958d4e"}},{"ruleId":"D2","level":"warning","message":{"text":"ExecutableScorer.scoreAcrossExecutablePair (cognitive 32): ExecutableScorer.scoreAcrossExecutablePair has cognitive complexity 32 (threshold 15). Drivers by points: if/else 23, loops 8, boolean chains 1 (nesting depth added 20). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/BSim/src/main/java/ghidra/features/bsim/query/client/ExecutableScorer.java"},"region":{"startLine":425}}}],"partialFingerprints":{"codehealthFindingId/v1":"5e718d1265e1cfda4574c4bfd9b338953669c7a8033f9faa210cddfa8a211f82"}},{"ruleId":"D2","level":"warning","message":{"text":"BSimLaunchable.readOptions (cognitive 32): BSimLaunchable.readOptions has cognitive complexity 32 (threshold 15). Drivers by points: if/else 29, boolean chains 2, loops 1 (nesting depth added 16). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/BSim/src/main/java/ghidra/features/bsim/query/ingest/BSimLaunchable.java"},"region":{"startLine":289}}}],"partialFingerprints":{"codehealthFindingId/v1":"474eea6ece315e05911d989b78fec8192eece3ffec22f9bcc51ec3dc7a0fea37"}},{"ruleId":"D2","level":"warning","message":{"text":"JdiMethods.set_class_filter (cognitive 32): JdiMethods.set_class_filter has cognitive complexity 32 (threshold 15). Drivers by points: if/else 32 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/Debugger-jpda/src/main/java/ghidra/dbg/jdi/rmi/jpda/JdiMethods.java"},"region":{"startLine":1238}}}],"partialFingerprints":{"codehealthFindingId/v1":"aca144b3cbd9f6f32df54ccd2c4082498fff42a099b33c7a34bce8eb6823c2ee"}},{"ruleId":"D2","level":"warning","message":{"text":"DbgEngStackUnwindTest.findTokenLocation (cognitive 32): DbgEngStackUnwindTest.findTokenLocation has cognitive complexity 32 (threshold 15). Drivers by points: if/else 13, loops 10, ternaries 6, boolean chains 2, error handling 1 (nesting depth added 19). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Test/DebuggerIntegrationTest/src/test.slow/java/agent/dbgeng/rmi/DbgEngStackUnwindTest.java"},"region":{"startLine":509}}}],"partialFingerprints":{"codehealthFindingId/v1":"345f8e7f18d746f498a1e286bd1908e730b5cc33d0da27bdf0153d3667f875e2"}},{"ruleId":"D2","level":"warning","message":{"text":"LldbStackUnwindTest.findTokenLocation (cognitive 32): LldbStackUnwindTest.findTokenLocation has cognitive complexity 32 (threshold 15). Drivers by points: if/else 13, loops 10, ternaries 6, boolean chains 2, error handling 1 (nesting depth added 19). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Test/DebuggerIntegrationTest/src/test.slow/java/agent/lldb/rmi/LldbStackUnwindTest.java"},"region":{"startLine":522}}}],"partialFingerprints":{"codehealthFindingId/v1":"b4d49ef0951162976a3e8f8d068f71bcfc73380e510e89c6bf73d8825ba33093"}},{"ruleId":"D2","level":"warning","message":{"text":"Pic18Analyzer.markupFRegInstruction (cognitive 31): Pic18Analyzer.markupFRegInstruction has cognitive complexity 31 (threshold 15). Drivers by points: if/else 25, boolean chains 5, ternaries 1 (nesting depth added 11). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Processors/PIC/src/main/java/ghidra/app/plugin/core/analysis/Pic18Analyzer.java"},"region":{"startLine":508}}}],"partialFingerprints":{"codehealthFindingId/v1":"4fcb39a05797d8d3ba94d77bc3defdfddbf72683ee76cf3825f57de7773eb2a8"}},{"ruleId":"D2","level":"warning","message":{"text":"1SwitchEvaluator.evaluateContext (cognitive 31): 1SwitchEvaluator.evaluateContext has cognitive complexity 31 (threshold 15). Drivers by points: if/else 30, boolean chains 1 (nesting depth added 19). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Processors/ARM/src/main/java/ghidra/app/plugin/core/analysis/ArmAnalyzer.java"},"region":{"startLine":320}}}],"partialFingerprints":{"codehealthFindingId/v1":"e98bafa2bb4ca641bbf3534676fa50d4257158705d2c0178aac9ee661ba321c9"}},{"ruleId":"D2","level":"warning","message":{"text":"MemoryBlockDefinition.fixupBlock (cognitive 31): MemoryBlockDefinition.fixupBlock has cognitive complexity 31 (threshold 15). Drivers by points: if/else 23, boolean chains 4, error handling 4 (nesting depth added 6). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition, and where an else follows a branch that already returns, drop the trailing else and let the rest of the body continue at one level."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/processors/generic/MemoryBlockDefinition.java"},"region":{"startLine":185}}}],"partialFingerprints":{"codehealthFindingId/v1":"c7ee69d54eb84e7e392e2e2f062543106de2aab6d5ee3e9a2babd510a90c46f2"}},{"ruleId":"D2","level":"warning","message":{"text":"ConsistencyChecker.checkSubtable (cognitive 31): ConsistencyChecker.checkSubtable has cognitive complexity 31 (threshold 15). Drivers by points: if/else 26, loops 3, boolean chains 2 (nesting depth added 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slgh_compile/ConsistencyChecker.java"},"region":{"startLine":720}}}],"partialFingerprints":{"codehealthFindingId/v1":"9db31f6670c90ed0d94344c57d741c6168cd2df13a3b95939755596cc72c30cb"}},{"ruleId":"D2","level":"warning","message":{"text":"DataTypeManagerDB.initializedParentChildTable (cognitive 31): DataTypeManagerDB.initializedParentChildTable has cognitive complexity 31 (threshold 15). Drivers by points: if/else 17, loops 14 (nesting depth added 21). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/DataTypeManagerDB.java"},"region":{"startLine":578}}}],"partialFingerprints":{"codehealthFindingId/v1":"af397bd0fa1e368ca5289c91fa4ec609112f616bc77160e46781eb5b377f60db"}},{"ruleId":"D2","level":"warning","message":{"text":"DataTypeWriter.doWrite (cognitive 31): DataTypeWriter.doWrite has cognitive complexity 31 (threshold 15). Drivers by points: if/else 29, boolean chains 2 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/DataTypeWriter.java"},"region":{"startLine":228}}}],"partialFingerprints":{"codehealthFindingId/v1":"e9e52967407f311c07aef9906ac42d4836846543bc96d5662b323737b9922836"}},{"ruleId":"D2","level":"warning","message":{"text":"DataTypeWriter.getTypeDeclaration (cognitive 31): DataTypeWriter.getTypeDeclaration has cognitive complexity 31 (threshold 15). Drivers by points: if/else 29, loops 2 (nesting depth added 16). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/DataTypeWriter.java"},"region":{"startLine":479}}}],"partialFingerprints":{"codehealthFindingId/v1":"439d7245d13c21c8e936d43938e642a612f844b0571f4aa31842c7b43d47f59d"}},{"ruleId":"D2","level":"warning","message":{"text":"MetaDataType.getMostSpecificDataType (cognitive 31): MetaDataType.getMostSpecificDataType has cognitive complexity 31 (threshold 15). Drivers by points: if/else 29, boolean chains 1, loops 1 (nesting depth added 17). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/MetaDataType.java"},"region":{"startLine":74}}}],"partialFingerprints":{"codehealthFindingId/v1":"d8b9d5961037e9b6db618c0f5463d1dbdd76e468da6fb5e317a41913a34487d4"}},{"ruleId":"D2","level":"warning","message":{"text":"CommentTypeUtils.getCommentType (cognitive 31): CommentTypeUtils.getCommentType has cognitive complexity 31 (threshold 15). Drivers by points: if/else 31 (nesting depth added 21). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/util/CommentTypeUtils.java"},"region":{"startLine":32}}}],"partialFingerprints":{"codehealthFindingId/v1":"79e94962c1b09960141d0c950cd0b8f6fcbb6b3dfc61c672f146e36d076e633c"}},{"ruleId":"D2","level":"warning","message":{"text":"VariableLocation.compareTo (cognitive 31): VariableLocation.compareTo has cognitive complexity 31 (threshold 15). Drivers by points: if/else 30, boolean chains 1 (nesting depth added 19). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/util/VariableLocation.java"},"region":{"startLine":162}}}],"partialFingerprints":{"codehealthFindingId/v1":"2f6a43931a8d2cdee32594d2d8daebe82b51a90636e86f42d2162ee43a8877de"}},{"ruleId":"D2","level":"warning","message":{"text":"LSHCosineVector.compareCounts (cognitive 31): LSHCosineVector.compareCounts has cognitive complexity 31 (threshold 15). Drivers by points: if/else 24, ternaries 4, loops 2, boolean chains 1 (nesting depth added 20). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Generic/src/main/java/generic/lsh/vector/LSHCosineVector.java"},"region":{"startLine":253}}}],"partialFingerprints":{"codehealthFindingId/v1":"2db877054af42aaffbcbd6473eb17b040f22103f82f03578457fd17b2ca92c3b"}},{"ruleId":"D2","level":"warning","message":{"text":"FunctionSignatureStringable.tryToSetNames (cognitive 31): FunctionSignatureStringable.tryToSetNames has cognitive complexity 31 (threshold 15). Drivers by points: if/else 20, boolean chains 5, match/switch 3, ternaries 2, loops 1 (nesting depth added 16). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/VersionTracking/src/main/java/ghidra/feature/vt/api/stringable/FunctionSignatureStringable.java"},"region":{"startLine":1106}}}],"partialFingerprints":{"codehealthFindingId/v1":"b954269478eee6949c8b2e85d7fa6cbef416227c84a941bcf48ce3dd389324ef"}},{"ruleId":"D2","level":"warning","message":{"text":"ObjcMessageAnalyzer.setReference (cognitive 31): ObjcMessageAnalyzer.setReference has cognitive complexity 31 (threshold 15). Drivers by points: if/else 21, error handling 4, ternaries 4, boolean chains 2 (nesting depth added 17). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/Objective-C/src/main/java/ghidra/app/plugin/core/analysis/ObjcMessageAnalyzer.java"},"region":{"startLine":956}}}],"partialFingerprints":{"codehealthFindingId/v1":"bda00457138f3a707a20de1b5d2ef6b1185fe2ab4b05472831da707dffd6c82c"}},{"ruleId":"D2","level":"warning","message":{"text":"BSimControlLaunchable.changeAuthCommand (cognitive 31): BSimControlLaunchable.changeAuthCommand has cognitive complexity 31 (threshold 15). Drivers by points: if/else 23, boolean chains 8 (nesting depth added 5). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition, and where an else follows a branch that already returns, drop the trailing else and let the rest of the body continue at one level."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/BSim/src/main/java/ghidra/features/bsim/query/BSimControlLaunchable.java"},"region":{"startLine":1267}}}],"partialFingerprints":{"codehealthFindingId/v1":"3f1b89f6cc62beacf153d63bcaf87c64945531238d4cd15e75d4ab6c74916005"}},{"ruleId":"D2","level":"warning","message":{"text":"PcodeByteBasedConstantPropagation.assumeBinaryExpression (cognitive 31): PcodeByteBasedConstantPropagation.assumeBinaryExpression has cognitive complexity 31 (threshold 15). Drivers by points: if/else 31 (nesting depth added 20). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Extensions/Lisa/src/main/java/ghidra/lisa/pcode/analyses/PcodeByteBasedConstantPropagation.java"},"region":{"startLine":255}}}],"partialFingerprints":{"codehealthFindingId/v1":"548e843d50e3819801f59179a484d6d198d189cc0fe23a2ee5c20faed604682c"}},{"ruleId":"D2","level":"warning","message":{"text":"PcodeInferredTypes.satisfiesBinaryExpression (cognitive 31): PcodeInferredTypes.satisfiesBinaryExpression has cognitive complexity 31 (threshold 15). Drivers by points: if/else 21, boolean chains 8, ternaries 2 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Extensions/Lisa/src/main/java/ghidra/lisa/pcode/types/PcodeInferredTypes.java"},"region":{"startLine":241}}}],"partialFingerprints":{"codehealthFindingId/v1":"578abc13221ecc773fc16b84c5602171c35546553818ab6021a5f07ae0daf78a"}},{"ruleId":"D2","level":"warning","message":{"text":"AbstractConstraintsTree.checkNodeIntegrity (cognitive 31): AbstractConstraintsTree.checkNodeIntegrity has cognitive complexity 31 (threshold 15). Drivers by points: if/else 22, loops 6, boolean chains 2, match/switch 1 (nesting depth added 12). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/ProposedUtils/src/main/java/ghidra/util/database/spatial/AbstractConstraintsTree.java"},"region":{"startLine":798}}}],"partialFingerprints":{"codehealthFindingId/v1":"fc2373e8ee6f26142a713f58f6cc84cda6db3693b74b7a13bb8755da8310a413"}},{"ruleId":"D2","level":"warning","message":{"text":"DmgServer.main (cognitive 31): DmgServer.main has cognitive complexity 31 (threshold 15). Drivers by points: if/else 21, loops 7, match/switch 2, error handling 1 (nesting depth added 16). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"GPL/DMG/src/dmg/java/mobiledevices/dmg/server/DmgServer.java"},"region":{"startLine":55}}}],"partialFingerprints":{"codehealthFindingId/v1":"b04f47cfbac88898677b9c18edd8a03191876010b9825a4a15b618dd086a11c9"}},{"ruleId":"D2","level":"warning","message":{"text":"ArmAnalyzer.createDataType (cognitive 30): ArmAnalyzer.createDataType has cognitive complexity 30 (threshold 15). Drivers by points: if/else 19, boolean chains 8, match/switch 2, error handling 1 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Processors/ARM/src/main/java/ghidra/app/plugin/core/analysis/ArmAnalyzer.java"},"region":{"startLine":625}}}],"partialFingerprints":{"codehealthFindingId/v1":"9e2735a112f5c0f1029bacfedc8a225343bfd348ecebc3e4e6ac2fdc4c892fda"}},{"ruleId":"D2","level":"warning","message":{"text":"SIPD_FLOAT_ADD.op2 (cognitive 30): SIPD_FLOAT_ADD.op2 has cognitive complexity 30 (threshold 15). Drivers by points: if/else 30 (nesting depth added 18). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Processors/AARCH64/src/main/java/ghidra/program/emulation/AARCH64EmulateInstructionStateModifier.java"},"region":{"startLine":1282}}}],"partialFingerprints":{"codehealthFindingId/v1":"6faf8a5e4d2e41250f3142f52ecd81e229025255ec1acdca4c8f83a6c88192a4"}},{"ruleId":"D2","level":"warning","message":{"text":"1.evaluateContext (cognitive 30): 1.evaluateContext has cognitive complexity 30 (threshold 15). Drivers by points: if/else 25, boolean chains 5 (nesting depth added 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Processors/68000/src/main/java/ghidra/app/plugin/core/analysis/Motorola68KAnalyzer.java"},"region":{"startLine":71}}}],"partialFingerprints":{"codehealthFindingId/v1":"367a682530448c334e5ae1eda636cd11158b77b7f8ffc46586d4b53d266d6db0"}},{"ruleId":"D2","level":"warning","message":{"text":"PseudoData.getComponentsContaining (cognitive 30): PseudoData.getComponentsContaining has cognitive complexity 30 (threshold 15). Drivers by points: loops 13, if/else 10, ternaries 5, boolean chains 2 (nesting depth added 18). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/util/PseudoData.java"},"region":{"startLine":315}}}],"partialFingerprints":{"codehealthFindingId/v1":"ff94a84afe3d5b134956b763af0dfd1044e4d878ed9c25e982e4fa123dbafa64"}},{"ruleId":"D2","level":"warning","message":{"text":"PcodeCompile.createBitRange (cognitive 30): PcodeCompile.createBitRange has cognitive complexity 30 (threshold 15). Drivers by points: if/else 23, boolean chains 7 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slgh_compile/PcodeCompile.java"},"region":{"startLine":598}}}],"partialFingerprints":{"codehealthFindingId/v1":"ab0e54babd497d37ebc4641b175defb3d42bf6f8f082eda24e0640abcb9a209e"}},{"ruleId":"D2","level":"warning","message":{"text":"DataDB.getComponentsContaining (cognitive 30): DataDB.getComponentsContaining has cognitive complexity 30 (threshold 15). Drivers by points: loops 12, if/else 11, ternaries 5, boolean chains 2 (nesting depth added 18). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/code/DataDB.java"},"region":{"startLine":497}}}],"partialFingerprints":{"codehealthFindingId/v1":"66533a33ff93f361de42819485d06d0b47593c005e4f5de04cb41b700a5f1925"}},{"ruleId":"D2","level":"warning","message":{"text":"StructureDB.replaceAtOffset (cognitive 30): StructureDB.replaceAtOffset has cognitive complexity 30 (threshold 15). Drivers by points: if/else 22, loops 4, error handling 2, boolean chains 1, ternaries 1 (nesting depth added 13). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/StructureDB.java"},"region":{"startLine":1471}}}],"partialFingerprints":{"codehealthFindingId/v1":"eb56cd1d47eff7a286b0008d2125d1d624f5b68dda6ab58c253b4b337082dcf7"}},{"ruleId":"D2","level":"warning","message":{"text":"RefListV0.removeRef (cognitive 30): RefListV0.removeRef has cognitive complexity 30 (threshold 15). Drivers by points: if/else 26, ternaries 3, loops 1 (nesting depth added 21). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/references/RefListV0.java"},"region":{"startLine":302}}}],"partialFingerprints":{"codehealthFindingId/v1":"2e4a95ab6db13fee4c33876add5f17b07245eababe7b4523e9fd617c1cf3cd48"}},{"ruleId":"D2","level":"warning","message":{"text":"FunctionPrototype.encodePrototype (cognitive 30): FunctionPrototype.encodePrototype has cognitive complexity 30 (threshold 15). Drivers by points: if/else 26, boolean chains 2, loops 2 (nesting depth added 7). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition, and where an else follows a branch that already returns, drop the trailing else and let the rest of the body continue at one level."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/pcode/FunctionPrototype.java"},"region":{"startLine":317}}}],"partialFingerprints":{"codehealthFindingId/v1":"35a59e89f442bbcd703481ad0052eb0aae5b8660464f4118abe22da42d289d37"}},{"ruleId":"D2","level":"warning","message":{"text":"RedBlackTree.swapPosition (cognitive 30): RedBlackTree.swapPosition has cognitive complexity 30 (threshold 15). Drivers by points: if/else 28, boolean chains 2 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Generic/src/main/java/generic/stl/RedBlackTree.java"},"region":{"startLine":564}}}],"partialFingerprints":{"codehealthFindingId/v1":"7d0e808b33b7034cfdd64e8baf758d214c23c7d16d0aaf6902379444b1c304df"}},{"ruleId":"D2","level":"warning","message":{"text":"RedBlackKeySet.swapPosition (cognitive 30): RedBlackKeySet.swapPosition has cognitive complexity 30 (threshold 15). Drivers by points: if/else 28, boolean chains 2 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Generic/src/main/java/ghidra/util/datastruct/RedBlackKeySet.java"},"region":{"startLine":566}}}],"partialFingerprints":{"codehealthFindingId/v1":"d9376d2b4a5e8cca0db7b5e45f52f7e58e826c8d7bbe12bb84e1e3951616a466"}},{"ruleId":"D2","level":"warning","message":{"text":"RedBlackLongKeySet.swapPosition (cognitive 30): RedBlackLongKeySet.swapPosition has cognitive complexity 30 (threshold 15). Drivers by points: if/else 28, boolean chains 2 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Generic/src/main/java/ghidra/util/datastruct/RedBlackLongKeySet.java"},"region":{"startLine":553}}}],"partialFingerprints":{"codehealthFindingId/v1":"fc157828a734fa2459068e140476a0b466c822669cc8af061236e0801eb8ad91"}},{"ruleId":"D2","level":"warning","message":{"text":"RedBlackTree.swapPosition (cognitive 30): RedBlackTree.swapPosition has cognitive complexity 30 (threshold 15). Drivers by points: if/else 28, boolean chains 2 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Generic/src/main/java/ghidra/util/datastruct/RedBlackTree.java"},"region":{"startLine":546}}}],"partialFingerprints":{"codehealthFindingId/v1":"6c195e059aec3a6abbe75d238ed53754de2341d04fef085962704c7484b4b066"}},{"ruleId":"D2","level":"warning","message":{"text":"ChainedBuffer.grow (cognitive 30): ChainedBuffer.grow has cognitive complexity 30 (threshold 15). Drivers by points: if/else 22, loops 8 (nesting depth added 19). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/DB/src/main/java/db/ChainedBuffer.java"},"region":{"startLine":368}}}],"partialFingerprints":{"codehealthFindingId/v1":"11d2f8596d0c429752d4b14ff4650272ce16dcc3c0bc989f435eae22d1babecc"}},{"ruleId":"D2","level":"warning","message":{"text":"PdbParser.createData (cognitive 30): PdbParser.createData has cognitive complexity 30 (threshold 15). Drivers by points: if/else 20, error handling 5, ternaries 3, boolean chains 2 (nesting depth added 11). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/PDB/src/main/java/ghidra/app/util/bin/format/pdb/PdbParser.java"},"region":{"startLine":809}}}],"partialFingerprints":{"codehealthFindingId/v1":"8dd2e8270026593714532cc589b6d040af6f805e6ee7aac93cf3bcad455e18f4"}},{"ruleId":"D2","level":"warning","message":{"text":"DataSymbolApplier.createData (cognitive 30): DataSymbolApplier.createData has cognitive complexity 30 (threshold 15). Drivers by points: if/else 20, error handling 5, ternaries 3, boolean chains 2 (nesting depth added 11). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/PDB/src/main/java/ghidra/app/util/pdb/pdbapplicator/DataSymbolApplier.java"},"region":{"startLine":117}}}],"partialFingerprints":{"codehealthFindingId/v1":"2a12ef051a05a240ca10d48bab258d3d26c0d404b904e7974619c12db0858b28"}},{"ruleId":"D2","level":"warning","message":{"text":"FidServiceLibraryIngest.addChildRelations (cognitive 30): FidServiceLibraryIngest.addChildRelations has cognitive complexity 30 (threshold 15). Drivers by points: if/else 23, loops 4, boolean chains 3 (nesting depth added 19). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/FunctionID/src/main/java/ghidra/feature/fid/service/FidServiceLibraryIngest.java"},"region":{"startLine":409}}}],"partialFingerprints":{"codehealthFindingId/v1":"ef1b10877c5235758807c39a057b342dd50170f8000fa97c0c64857931d6b4f8"}},{"ruleId":"D2","level":"warning","message":{"text":"TaintPlugin.processEvent (cognitive 30): TaintPlugin.processEvent has cognitive complexity 30 (threshold 15). Drivers by points: if/else 28, boolean chains 2 (nesting depth added 17). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/DecompilerDependent/src/main/java/ghidra/app/plugin/core/decompiler/taint/TaintPlugin.java"},"region":{"startLine":456}}}],"partialFingerprints":{"codehealthFindingId/v1":"a6d67695fa92017d90948e246d98cca3e267257d587b8f2f3c112ced2f70772e"}},{"ruleId":"D2","level":"warning","message":{"text":"FunctionStartAction.restoreXmlAttributes (cognitive 30): FunctionStartAction.restoreXmlAttributes has cognitive complexity 30 (threshold 15). Drivers by points: if/else 25, boolean chains 2, match/switch 2, loops 1 (nesting depth added 11). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/BytePatterns/src/main/java/ghidra/app/analyzers/FunctionStartAnalyzer.java"},"region":{"startLine":564}}}],"partialFingerprints":{"codehealthFindingId/v1":"aab8d72d515966298c4069a9f03de81c5f09da93f18f92f1fd0e08e111eebd8e"}},{"ruleId":"D2","level":"warning","message":{"text":"LongInterval.div (cognitive 30): LongInterval.div has cognitive complexity 30 (threshold 15). Drivers by points: if/else 14, ternaries 14, boolean chains 2 (nesting depth added 16). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Extensions/Lisa/src/main/java/ghidra/lisa/pcode/analyses/LongInterval.java"},"region":{"startLine":339}}}],"partialFingerprints":{"codehealthFindingId/v1":"6847d0c53822570dddb63644e6bf323891ca9d1c9f10a19fe3d18acb23f7f82b"}},{"ruleId":"D2","level":"warning","message":{"text":"PcodeSign.assumeBinaryExpression (cognitive 30): PcodeSign.assumeBinaryExpression has cognitive complexity 30 (threshold 15). Drivers by points: if/else 23, boolean chains 7 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Extensions/Lisa/src/main/java/ghidra/lisa/pcode/analyses/PcodeSign.java"},"region":{"startLine":440}}}],"partialFingerprints":{"codehealthFindingId/v1":"8df09d31eda93676aaadb14b6d06fc9f0786566b34ede0e4a7e25df54e9de8b1"}},{"ruleId":"D2","level":"warning","message":{"text":"DBTraceDefinedDataAdapter.getComponentsContaining (cognitive 30): DBTraceDefinedDataAdapter.getComponentsContaining has cognitive complexity 30 (threshold 15). Drivers by points: loops 12, if/else 11, ternaries 5, boolean chains 2 (nesting depth added 18). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/listing/DBTraceDefinedDataAdapter.java"},"region":{"startLine":166}}}],"partialFingerprints":{"codehealthFindingId/v1":"5f01dac2de8d6e99f07ddef318a25d39fd4cec33431f8bb668c87762c6d5eb63"}},{"ruleId":"D2","level":"warning","message":{"text":"SH_ElfRelocationHandler.relocate (cognitive 29): SH_ElfRelocationHandler.relocate has cognitive complexity 29 (threshold 15). Drivers by points: if/else 21, boolean chains 6, match/switch 2 (nesting depth added 11). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Processors/SuperH4/src/main/java/ghidra/app/util/bin/format/elf/relocation/SH_ElfRelocationHandler.java"},"region":{"startLine":42}}}],"partialFingerprints":{"codehealthFindingId/v1":"116f20e7e41374e11d9253b05dd2de8224c306d5f20aa784fa6e4e444d59ec1f"}},{"ruleId":"D2","level":"warning","message":{"text":"1SwitchEvaluator.evaluateContext (cognitive 29): 1SwitchEvaluator.evaluateContext has cognitive complexity 29 (threshold 15). Drivers by points: if/else 27, boolean chains 2 (nesting depth added 19). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Processors/PowerPC/src/main/java/ghidra/app/plugin/core/analysis/PowerPCAddressAnalyzer.java"},"region":{"startLine":420}}}],"partialFingerprints":{"codehealthFindingId/v1":"8f1a643d4a4033ec2bed9df6d55e92c8c3e0d1028271e57eb38b74dbbcfecd0f"}},{"ruleId":"D2","level":"warning","message":{"text":"PicSwitchAnalyzer.handleAddSwitch (cognitive 29): PicSwitchAnalyzer.handleAddSwitch has cognitive complexity 29 (threshold 15). Drivers by points: if/else 23, loops 4, boolean chains 2 (nesting depth added 13). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Processors/PIC/src/main/java/ghidra/app/plugin/core/analysis/PicSwitchAnalyzer.java"},"region":{"startLine":155}}}],"partialFingerprints":{"codehealthFindingId/v1":"5ceecef88bc81cd64b4a983932138a842404187ba229b314fde98469e9067ea3"}},{"ruleId":"D2","level":"warning","message":{"text":"AssemblyFirstFollow.computeFollows (cognitive 29): AssemblyFirstFollow.computeFollows has cognitive complexity 29 (threshold 15). Drivers by points: if/else 18, loops 11 (nesting depth added 21). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/assembler/sleigh/parse/AssemblyFirstFollow.java"},"region":{"startLine":107}}}],"partialFingerprints":{"codehealthFindingId/v1":"ade93b4d44f0805ed162169899d2991faacd10169a1ce58f3d11b52196039bbd"}},{"ruleId":"D2","level":"warning","message":{"text":"ConsistencyChecker.checkOpMisuse (cognitive 29): ConsistencyChecker.checkOpMisuse has cognitive complexity 29 (threshold 15). Drivers by points: if/else 26, boolean chains 2, match/switch 1 (nesting depth added 14). The drivers above price the dispatch low by construction \u2014 a dispatch is charged once however many cases it lists, while each branch inside an arm is charged in full \u2014 so most of this count is what the case bodies hold, and the arms are where it can be reduced. To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slgh_compile/ConsistencyChecker.java"},"region":{"startLine":565}}}],"partialFingerprints":{"codehealthFindingId/v1":"ae71805bce7ce0e1e40ab03607f8ddf8e01cedbb2e38fe5896256909f2892349"}},{"ruleId":"D2","level":"warning","message":{"text":"ArrayDB.dataTypeReplaced (cognitive 29): ArrayDB.dataTypeReplaced has cognitive complexity 29 (threshold 15). Drivers by points: if/else 16, error handling 5, boolean chains 4, ternaries 4 (nesting depth added 11). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/ArrayDB.java"},"region":{"startLine":256}}}],"partialFingerprints":{"codehealthFindingId/v1":"3ace6952fa35ab3cf23e7d3483bd43a7ad472e479a09feabd96d0bd5433eac68"}},{"ruleId":"D2","level":"warning","message":{"text":"DataTypeArchiveTransformer.transformAnonymousComponent (cognitive 29): DataTypeArchiveTransformer.transformAnonymousComponent has cognitive complexity 29 (threshold 15). Drivers by points: if/else 27, boolean chains 2 (nesting depth added 18). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/DataTypeArchiveTransformer.java"},"region":{"startLine":358}}}],"partialFingerprints":{"codehealthFindingId/v1":"2125a814053781ffa72ed8564ec733a144ac30551b6dff1f7d883d4dcd69cf61"}},{"ruleId":"D2","level":"warning","message":{"text":"Disassembler.disassemble (cognitive 29): Disassembler.disassemble has cognitive complexity 29 (threshold 15). Drivers by points: if/else 21, error handling 4, loops 3, boolean chains 1 (nesting depth added 17). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/disassemble/Disassembler.java"},"region":{"startLine":450}}}],"partialFingerprints":{"codehealthFindingId/v1":"1fecd3cd5c7bb3aa14bc006190b4b1ddb21ff45f1038ebd5eba8540cac852a85"}},{"ruleId":"D2","level":"warning","message":{"text":"StructureDataType.delete (cognitive 29): StructureDataType.delete has cognitive complexity 29 (threshold 15). Drivers by points: if/else 25, boolean chains 3, loops 1 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/StructureDataType.java"},"region":{"startLine":341}}}],"partialFingerprints":{"codehealthFindingId/v1":"7720fb47823e26c2e63e303d0e22e37fbd60c5e658cb879dbf639bb4a60d317c"}},{"ruleId":"D2","level":"warning","message":{"text":"StructureDataType.replaceAtOffset (cognitive 29): StructureDataType.replaceAtOffset has cognitive complexity 29 (threshold 15). Drivers by points: if/else 22, loops 4, boolean chains 1, error handling 1, ternaries 1 (nesting depth added 13). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/StructureDataType.java"},"region":{"startLine":1612}}}],"partialFingerprints":{"codehealthFindingId/v1":"7a06ffcdcfbf2bd16b3d277b6544996fe05b8e081769aff1ac446a1653647589"}},{"ruleId":"D2","level":"warning","message":{"text":"HighFunctionDBUtil.writeUnionFacet (cognitive 29): HighFunctionDBUtil.writeUnionFacet has cognitive complexity 29 (threshold 15). Drivers by points: if/else 24, boolean chains 3, loops 2 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/pcode/HighFunctionDBUtil.java"},"region":{"startLine":893}}}],"partialFingerprints":{"codehealthFindingId/v1":"606d719a463393abfe9892b20fc30e00c82d87d22fccbfb344aa906f3eb14db9"}},{"ruleId":"D2","level":"warning","message":{"text":"GhidraFileData.generateIcon (cognitive 29): GhidraFileData.generateIcon has cognitive complexity 29 (threshold 15). Drivers by points: if/else 28, boolean chains 1 (nesting depth added 14). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Project/src/main/java/ghidra/framework/data/GhidraFileData.java"},"region":{"startLine":946}}}],"partialFingerprints":{"codehealthFindingId/v1":"692af3158352a229421a9a04656239d9aa893d5b016f215a651a33878736f2f3"}},{"ruleId":"D2","level":"warning","message":{"text":"ProjectDataUtils.getDomainFolder (cognitive 29): ProjectDataUtils.getDomainFolder has cognitive complexity 29 (threshold 15). Drivers by points: if/else 26, boolean chains 2, loops 1 (nesting depth added 17). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Project/src/main/java/ghidra/framework/model/ProjectDataUtils.java"},"region":{"startLine":195}}}],"partialFingerprints":{"codehealthFindingId/v1":"e19d43bbf50bf8763c02443a970198efc3d3b3cf55b3c33e5dabf9a343d1af44"}},{"ruleId":"D2","level":"warning","message":{"text":"RedBlackTree.fixAfterDeletion (cognitive 29): RedBlackTree.fixAfterDeletion has cognitive complexity 29 (threshold 15). Drivers by points: if/else 25, boolean chains 3, loops 1 (nesting depth added 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Generic/src/main/java/generic/stl/RedBlackTree.java"},"region":{"startLine":496}}}],"partialFingerprints":{"codehealthFindingId/v1":"9014666dd83b6a5f66eca20f3d0154d2d8ba28e83554daf44a814de0004bf8a1"}},{"ruleId":"D2","level":"warning","message":{"text":"RedBlackTree.fixAfterInsertion (cognitive 29): RedBlackTree.fixAfterInsertion has cognitive complexity 29 (threshold 15). Drivers by points: if/else 27, boolean chains 1, loops 1 (nesting depth added 17). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Generic/src/main/java/generic/stl/RedBlackTree.java"},"region":{"startLine":391}}}],"partialFingerprints":{"codehealthFindingId/v1":"9dce33408fd3f68dcea8979b33bc72fa5bfe6fe84cbac9cbef97ef3548d12c54"}},{"ruleId":"D2","level":"warning","message":{"text":"Node.searchValue (cognitive 29): Node.searchValue has cognitive complexity 29 (threshold 15). Drivers by points: if/else 24, boolean chains 4, loops 1 (nesting depth added 11). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Generic/src/main/java/ghidra/generic/util/datastruct/TreeValueSortedMap.java"},"region":{"startLine":483}}}],"partialFingerprints":{"codehealthFindingId/v1":"8784817351ebd834d997edd72c20aa2e68e3fb408f6d9c53a183ccc2410e072b"}},{"ruleId":"D2","level":"warning","message":{"text":"RedBlackKeySet.deleteEntry (cognitive 29): RedBlackKeySet.deleteEntry has cognitive complexity 29 (threshold 15). Drivers by points: if/else 25, loops 2, boolean chains 1, ternaries 1 (nesting depth added 12). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Generic/src/main/java/ghidra/util/datastruct/RedBlackKeySet.java"},"region":{"startLine":434}}}],"partialFingerprints":{"codehealthFindingId/v1":"1da96f8b8c6703a517c49813e8008ee284c39f48b430a4d55709b47a236c0b2c"}},{"ruleId":"D2","level":"warning","message":{"text":"RedBlackKeySet.fixAfterDeletion (cognitive 29): RedBlackKeySet.fixAfterDeletion has cognitive complexity 29 (threshold 15). Drivers by points: if/else 25, boolean chains 3, loops 1 (nesting depth added 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Generic/src/main/java/ghidra/util/datastruct/RedBlackKeySet.java"},"region":{"startLine":500}}}],"partialFingerprints":{"codehealthFindingId/v1":"a1864822cff4aed234a76c946cccfe3fa17382bdee28b3a2f621791e9fd8889b"}},{"ruleId":"D2","level":"warning","message":{"text":"RedBlackKeySet.fixAfterInsertion (cognitive 29): RedBlackKeySet.fixAfterInsertion has cognitive complexity 29 (threshold 15). Drivers by points: if/else 27, boolean chains 1, loops 1 (nesting depth added 17). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Generic/src/main/java/ghidra/util/datastruct/RedBlackKeySet.java"},"region":{"startLine":383}}}],"partialFingerprints":{"codehealthFindingId/v1":"b4e899f03c9ea3db6f883d5e9cdc91165b7978a2da20032666e2c5b115871b83"}},{"ruleId":"D2","level":"warning","message":{"text":"RedBlackLongKeySet.deleteEntry (cognitive 29): RedBlackLongKeySet.deleteEntry has cognitive complexity 29 (threshold 15). Drivers by points: if/else 25, loops 2, boolean chains 1, ternaries 1 (nesting depth added 12). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Generic/src/main/java/ghidra/util/datastruct/RedBlackLongKeySet.java"},"region":{"startLine":419}}}],"partialFingerprints":{"codehealthFindingId/v1":"7ce7abb5ff6a177c410fac4cf453d986a3f47b82806137f29bc5eb0384ee68ee"}},{"ruleId":"D2","level":"warning","message":{"text":"RedBlackLongKeySet.fixAfterDeletion (cognitive 29): RedBlackLongKeySet.fixAfterDeletion has cognitive complexity 29 (threshold 15). Drivers by points: if/else 25, boolean chains 3, loops 1 (nesting depth added 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Generic/src/main/java/ghidra/util/datastruct/RedBlackLongKeySet.java"},"region":{"startLine":485}}}],"partialFingerprints":{"codehealthFindingId/v1":"87689300a0808b5fac3b98506e53dc1544a95e9f31a7f7d4745504cbb0c4b245"}},{"ruleId":"D2","level":"warning","message":{"text":"RedBlackLongKeySet.fixAfterInsertion (cognitive 29): RedBlackLongKeySet.fixAfterInsertion has cognitive complexity 29 (threshold 15). Drivers by points: if/else 27, boolean chains 1, loops 1 (nesting depth added 17). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Generic/src/main/java/ghidra/util/datastruct/RedBlackLongKeySet.java"},"region":{"startLine":368}}}],"partialFingerprints":{"codehealthFindingId/v1":"7700b53529cd91de7ef6959551cd523df4637f5c4a3a9474c8294cee937a7e53"}},{"ruleId":"D2","level":"warning","message":{"text":"RedBlackTree.fixAfterDeletion (cognitive 29): RedBlackTree.fixAfterDeletion has cognitive complexity 29 (threshold 15). Drivers by points: if/else 25, boolean chains 3, loops 1 (nesting depth added 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Generic/src/main/java/ghidra/util/datastruct/RedBlackTree.java"},"region":{"startLine":480}}}],"partialFingerprints":{"codehealthFindingId/v1":"30e0e125b0ed260839f815482c5f1d127b943110b57347464df039b2eff347ee"}},{"ruleId":"D2","level":"warning","message":{"text":"RedBlackTree.fixAfterInsertion (cognitive 29): RedBlackTree.fixAfterInsertion has cognitive complexity 29 (threshold 15). Drivers by points: if/else 27, boolean chains 1, loops 1 (nesting depth added 17). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Generic/src/main/java/ghidra/util/datastruct/RedBlackTree.java"},"region":{"startLine":366}}}],"partialFingerprints":{"codehealthFindingId/v1":"82d43b3792536139712316651722efbe4baae55b7913da0b94e6537234e0554b"}},{"ruleId":"D2","level":"warning","message":{"text":"BufferMgr.undo (cognitive 29): BufferMgr.undo has cognitive complexity 29 (threshold 15). Drivers by points: if/else 26, boolean chains 1, loops 1, ternaries 1 (nesting depth added 13). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/DB/src/main/java/db/buffers/BufferMgr.java"},"region":{"startLine":1284}}}],"partialFingerprints":{"codehealthFindingId/v1":"df40f7bedfc5b38754fbd907d05b801c741b60de8fdf58a49789a1de2d3b9e0b"}},{"ruleId":"D2","level":"warning","message":{"text":"LongKeyRecordIterator.\u003Cinit\u003E (cognitive 29): LongKeyRecordIterator.\u003Cinit\u003E has cognitive complexity 29 (threshold 15). Drivers by points: if/else 28, boolean chains 1 (nesting depth added 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/DB/src/main/java/db/Table.java"},"region":{"startLine":2067}}}],"partialFingerprints":{"codehealthFindingId/v1":"151f1eb1c925e8eef7fab5c62b76355ee041e5de948d6e0843e9db32766fc865"}},{"ruleId":"D2","level":"warning","message":{"text":"FunctionNodeContainer.generateCallGraph (cognitive 29): FunctionNodeContainer.generateCallGraph has cognitive complexity 29 (threshold 15). Drivers by points: if/else 21, loops 8 (nesting depth added 21). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/VersionTrackingBSim/src/main/java/ghidra/feature/vt/api/FunctionNodeContainer.java"},"region":{"startLine":71}}}],"partialFingerprints":{"codehealthFindingId/v1":"32da423c7de03b59d9584bb2c6cb41ced22d678ee17c8dcad733d799f4ee744b"}},{"ruleId":"D2","level":"warning","message":{"text":"MemoryBlocksValidator.doRun (cognitive 29): MemoryBlocksValidator.doRun has cognitive complexity 29 (threshold 15). Drivers by points: if/else 19, ternaries 9, loops 1 (nesting depth added 14). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/VersionTracking/src/main/java/ghidra/feature/vt/gui/validator/MemoryBlocksValidator.java"},"region":{"startLine":34}}}],"partialFingerprints":{"codehealthFindingId/v1":"e1a0a735f59ecedcebc8ab7be1d8bdaae5ffd4c0e41dba4e5a8421bfa24cb146"}},{"ruleId":"D2","level":"warning","message":{"text":"SarifLoader.findSupportedLoadSpecs (cognitive 29): SarifLoader.findSupportedLoadSpecs has cognitive complexity 29 (threshold 15). Drivers by points: if/else 14, loops 12, error handling 2, boolean chains 1 (nesting depth added 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/Sarif/src/main/java/sarif/SarifLoader.java"},"region":{"startLine":64}}}],"partialFingerprints":{"codehealthFindingId/v1":"33c3c5da32f998e521a251b7e390bf7e767697f3fef971f9b289ebe75e72fe8c"}},{"ruleId":"D2","level":"warning","message":{"text":"SarifProgramOptions.setOptions (cognitive 29): SarifProgramOptions.setOptions has cognitive complexity 29 (threshold 15). Drivers by points: if/else 28, loops 1 (nesting depth added 2). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition, and where an else follows a branch that already returns, drop the trailing else and let the rest of the body continue at one level."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/Sarif/src/main/java/sarif/SarifProgramOptions.java"},"region":{"startLine":197}}}],"partialFingerprints":{"codehealthFindingId/v1":"8a63700952c02953f5e5a798900a7077bec9a6bdcf7fe019d5e40b6c15923e6a"}},{"ruleId":"D2","level":"warning","message":{"text":"CppCompositeType.depthFirstVirtualBases (cognitive 29): CppCompositeType.depthFirstVirtualBases has cognitive complexity 29 (threshold 15). Drivers by points: if/else 19, loops 10 (nesting depth added 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/PDB/src/main/java/ghidra/app/util/pdb/pdbapplicator/CppCompositeType.java"},"region":{"startLine":2371}}}],"partialFingerprints":{"codehealthFindingId/v1":"d28906bdee3459db0ff3c25820df6ed099a85140b7f43decdf51e3cc3019d994"}},{"ruleId":"D2","level":"warning","message":{"text":"CppCompositeType.getMainVbt (cognitive 29): CppCompositeType.getMainVbt has cognitive complexity 29 (threshold 15). Drivers by points: if/else 16, loops 13 (nesting depth added 20). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/PDB/src/main/java/ghidra/app/util/pdb/pdbapplicator/CppCompositeType.java"},"region":{"startLine":2281}}}],"partialFingerprints":{"codehealthFindingId/v1":"7ac6711f8c1a7a9259aca953cf47660bfc5924ba7d9514c53488cef0afdefdae"}},{"ruleId":"D2","level":"warning","message":{"text":"CommandProcessor.processCommand (cognitive 29): CommandProcessor.processCommand has cognitive complexity 29 (threshold 15). Drivers by points: if/else 21, error handling 5, boolean chains 2, match/switch 1 (nesting depth added 12). The drivers above price the dispatch low by construction \u2014 a dispatch is charged once however many cases it lists, while each branch inside an arm is charged in full \u2014 so most of this count is what the case bodies hold, and the arms are where it can be reduced. To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/GhidraServer/src/main/java/ghidra/server/CommandProcessor.java"},"region":{"startLine":120}}}],"partialFingerprints":{"codehealthFindingId/v1":"a73d17511fbc9252cedd57831304c241bbdbe9a460afa6624de6a57fc0515ee7"}},{"ruleId":"D2","level":"warning","message":{"text":"FullOatBundle.loadDexHeaders (cognitive 29): FullOatBundle.loadDexHeaders has cognitive complexity 29 (threshold 15). Drivers by points: if/else 21, loops 6, boolean chains 2 (nesting depth added 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/android/oat/bundle/FullOatBundle.java"},"region":{"startLine":131}}}],"partialFingerprints":{"codehealthFindingId/v1":"9d0712c77de48f62fd0bc931d8ea999c86b3bd0d62fe9743c422f4aff5755f9d"}},{"ruleId":"D2","level":"warning","message":{"text":"ApportHeader.parse (cognitive 29): ApportHeader.parse has cognitive complexity 29 (threshold 15). Drivers by points: if/else 24, boolean chains 3, loops 2 (nesting depth added 12). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/dump/apport/ApportHeader.java"},"region":{"startLine":52}}}],"partialFingerprints":{"codehealthFindingId/v1":"0b5c7de11d9e49d539e330a59a68e978868489eeddfb889defc10ed04baa147e"}},{"ruleId":"D2","level":"warning","message":{"text":"DecompilerSwitchAnalyzer.hasUnrecoverableCallOther (cognitive 29): DecompilerSwitchAnalyzer.hasUnrecoverableCallOther has cognitive complexity 29 (threshold 15). Drivers by points: if/else 24, loops 4, boolean chains 1 (nesting depth added 18). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/Decompiler/src/main/java/ghidra/app/plugin/core/analysis/DecompilerSwitchAnalyzer.java"},"region":{"startLine":282}}}],"partialFingerprints":{"codehealthFindingId/v1":"61392a7ebcd2ef38b60f7400a3165b4be6c2216cfe83d378eaa71f81fe9fbe8f"}},{"ruleId":"D2","level":"warning","message":{"text":"TreeSearch.searchForward (cognitive 29): TreeSearch.searchForward has cognitive complexity 29 (threshold 15). Drivers by points: if/else 23, match/switch 4, boolean chains 1, loops 1 (nesting depth added 18). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/Decompiler/src/main/java/ghidra/app/plugin/core/decompile/actions/CreatePointerRelative.java"},"region":{"startLine":286}}}],"partialFingerprints":{"codehealthFindingId/v1":"21e0a0e689de42c96df660c5195c8505fdf4705625c18cd3889b6f2b1336061b"}},{"ruleId":"D2","level":"warning","message":{"text":"CodeCompareAddressCorrelation.processCodeCompare (cognitive 29): CodeCompareAddressCorrelation.processCodeCompare has cognitive complexity 29 (threshold 15). Drivers by points: if/else 13, loops 6, ternaries 6, boolean chains 3, error handling 1 (nesting depth added 12). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/CodeCompare/src/main/java/ghidra/features/codecompare/correlator/CodeCompareAddressCorrelation.java"},"region":{"startLine":126}}}],"partialFingerprints":{"codehealthFindingId/v1":"4a0cf88927b8265e70e3246efc2efd9295bffe146599d8a99c3ff09a6d0a5a5f"}},{"ruleId":"D2","level":"warning","message":{"text":"LisaPlugin.processEvent (cognitive 29): LisaPlugin.processEvent has cognitive complexity 29 (threshold 15). Drivers by points: if/else 27, boolean chains 2 (nesting depth added 17). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Extensions/Lisa/src/main/java/ghidra/lisa/gui/LisaPlugin.java"},"region":{"startLine":183}}}],"partialFingerprints":{"codehealthFindingId/v1":"5ffcb0ff0f1133c838775f25d9f6d1b4ef0ad7f9eea3280be5bc4ad6966d4a47"}},{"ruleId":"D2","level":"warning","message":{"text":"InstructionBlockAdder.doAddInstructions (cognitive 29): InstructionBlockAdder.doAddInstructions has cognitive complexity 29 (threshold 15). Drivers by points: if/else 15, loops 5, ternaries 4, boolean chains 3, error handling 2 (nesting depth added 16). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/listing/DBTraceInstructionsView.java"},"region":{"startLine":236}}}],"partialFingerprints":{"codehealthFindingId/v1":"308148e8226da23f186677f41282c7336c2bd2e505e0b8658e0ef5b1b4bb8e2a"}},{"ruleId":"D2","level":"warning","message":{"text":"1.evaluateReference (cognitive 28): 1.evaluateReference has cognitive complexity 28 (threshold 15). Drivers by points: if/else 20, error handling 5, boolean chains 3 (nesting depth added 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Processors/MIPS/src/main/java/ghidra/app/plugin/core/analysis/MipsAddressAnalyzer.java"},"region":{"startLine":391}}}],"partialFingerprints":{"codehealthFindingId/v1":"db2eb40b3101e3761d4e18dc1c72b5bc2ad6e2c38f09a5e4170ec6fd996a0779"}},{"ruleId":"D2","level":"warning","message":{"text":"AbstractPcodeFormatter.formatOpTemplate (cognitive 28): AbstractPcodeFormatter.formatOpTemplate has cognitive complexity 28 (threshold 15). Drivers by points: if/else 25, boolean chains 2, loops 1 (nesting depth added 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/util/pcode/AbstractPcodeFormatter.java"},"region":{"startLine":89}}}],"partialFingerprints":{"codehealthFindingId/v1":"0c29f68fd679810d3ec8797f7ad8e05c9eabf0c48745c34a7b0c1508797d1bcc"}},{"ruleId":"D2","level":"warning","message":{"text":"SymbolPathParser.naiveParse (cognitive 28): SymbolPathParser.naiveParse has cognitive complexity 28 (threshold 15). Drivers by points: if/else 21, boolean chains 4, loops 3 (nesting depth added 12). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/util/SymbolPathParser.java"},"region":{"startLine":89}}}],"partialFingerprints":{"codehealthFindingId/v1":"251622e601e86cbc7a19b87aea26d622813824e237b3c453aa3fd83345e1f1a5"}},{"ruleId":"D2","level":"warning","message":{"text":"DecisionNode.chooseOptimalField (cognitive 28): DecisionNode.chooseOptimalField has cognitive complexity 28 (threshold 15). Drivers by points: if/else 18, loops 9, boolean chains 1 (nesting depth added 16). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghsymbol/DecisionNode.java"},"region":{"startLine":134}}}],"partialFingerprints":{"codehealthFindingId/v1":"f1f246ee9494c8e655480dec7a361e147db54145486e6f09091f348b1ae7e154"}},{"ruleId":"D2","level":"warning","message":{"text":"DataTypeManagerDB.updateExistingDataType (cognitive 28): DataTypeManagerDB.updateExistingDataType has cognitive complexity 28 (threshold 15). Drivers by points: if/else 27, error handling 1 (nesting depth added 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/DataTypeManagerDB.java"},"region":{"startLine":1372}}}],"partialFingerprints":{"codehealthFindingId/v1":"d2fb82ecd2ef949b73ae411b8abfd4c8b9ee57a794c7e67148d5dc9acf627994"}},{"ruleId":"D2","level":"warning","message":{"text":"OldFunctionManager.upgradeFunction (cognitive 28): OldFunctionManager.upgradeFunction has cognitive complexity 28 (threshold 15). Drivers by points: error handling 16, loops 6, if/else 5, boolean chains 1 (nesting depth added 13). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/oldfunction/OldFunctionManager.java"},"region":{"startLine":103}}}],"partialFingerprints":{"codehealthFindingId/v1":"2d596bf73ac72d05a58316ffb35564c4b85469977690d856530f5eb9a9ef2b40"}},{"ruleId":"D2","level":"warning","message":{"text":"ReferenceDBManager.combineReferenceType (cognitive 28): ReferenceDBManager.combineReferenceType has cognitive complexity 28 (threshold 15). Drivers by points: if/else 24, boolean chains 4 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/references/ReferenceDBManager.java"},"region":{"startLine":306}}}],"partialFingerprints":{"codehealthFindingId/v1":"c2d8d8fd19c623d3ac4051f86da5e5ab287621acd7a3191babd920b8fe0c64e6"}},{"ruleId":"D2","level":"warning","message":{"text":"AlignedComponentPacker.initGroup (cognitive 28): AlignedComponentPacker.initGroup has cognitive complexity 28 (threshold 15). Drivers by points: if/else 16, ternaries 7, error handling 4, boolean chains 1 (nesting depth added 16). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/AlignedComponentPacker.java"},"region":{"startLine":174}}}],"partialFingerprints":{"codehealthFindingId/v1":"4014a500c341dde8e41dd3e7fd706962a9e31d12a777f5a1ab7078d8ff20115e"}},{"ruleId":"D2","level":"warning","message":{"text":"MultiSlotDualAssign.assignAddress (cognitive 28): MultiSlotDualAssign.assignAddress has cognitive complexity 28 (threshold 15). Drivers by points: if/else 26, boolean chains 1, loops 1 (nesting depth added 14). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/lang/protorules/MultiSlotDualAssign.java"},"region":{"startLine":236}}}],"partialFingerprints":{"codehealthFindingId/v1":"31553e3dae5a00c687df05a7e35f9055bcd4871d4c638b592d6ea68214239d52"}},{"ruleId":"D2","level":"warning","message":{"text":"HighConstant.decode (cognitive 28): HighConstant.decode has cognitive complexity 28 (threshold 15). Drivers by points: if/else 17, ternaries 10, loops 1 (nesting depth added 17). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/pcode/HighConstant.java"},"region":{"startLine":89}}}],"partialFingerprints":{"codehealthFindingId/v1":"cbbaee5092410ec1bfed30d9859383e05858372421b295ebd3e83a1305fe62d8"}},{"ruleId":"D2","level":"warning","message":{"text":"SimpleLanguageTranslator.isValid (cognitive 28): SimpleLanguageTranslator.isValid has cognitive complexity 28 (threshold 15). Drivers by points: if/else 21, loops 5, error handling 2 (nesting depth added 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/util/SimpleLanguageTranslator.java"},"region":{"startLine":65}}}],"partialFingerprints":{"codehealthFindingId/v1":"c4a3c2c077245a5210a77703a9152994f7d7c266976a8c567776f3155829037f"}},{"ruleId":"D2","level":"warning","message":{"text":"HTMLUtilities.friendlyEncodeHTML (cognitive 28): HTMLUtilities.friendlyEncodeHTML has cognitive complexity 28 (threshold 15). Drivers by points: if/else 12, loops 8, match/switch 8 (nesting depth added 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Gui/src/main/java/ghidra/util/HTMLUtilities.java"},"region":{"startLine":582}}}],"partialFingerprints":{"codehealthFindingId/v1":"363fb7b57fccf15f705dde0a0c5e80e0aa85936d0c031eb453b1b188c6d6adb9"}},{"ruleId":"D2","level":"warning","message":{"text":"GhidraObjectInputFilter.checkInput (cognitive 28): GhidraObjectInputFilter.checkInput has cognitive complexity 28 (threshold 15). Drivers by points: if/else 22, loops 4, boolean chains 2 (nesting depth added 12). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/FileSystem/src/main/java/ghidra/framework/remote/GhidraObjectInputFilter.java"},"region":{"startLine":169}}}],"partialFingerprints":{"codehealthFindingId/v1":"f808882b2d790e909aeb68d46028eec8fa6bcbb916f483fed94a54f2fae616c9"}},{"ruleId":"D2","level":"warning","message":{"text":"IndexedLocalFileSystem.readIndex (cognitive 28): IndexedLocalFileSystem.readIndex has cognitive complexity 28 (threshold 15). Drivers by points: if/else 21, error handling 5, boolean chains 1, loops 1 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/FileSystem/src/main/java/ghidra/framework/store/local/IndexedLocalFileSystem.java"},"region":{"startLine":472}}}],"partialFingerprints":{"codehealthFindingId/v1":"02b0c108dca97180d859e585b8fc0162156f3f13f510381de8aa330a2889c1e6"}},{"ruleId":"D2","level":"warning","message":{"text":"RecoveryMgr.getRecoveryFile (cognitive 28): RecoveryMgr.getRecoveryFile has cognitive complexity 28 (threshold 15). Drivers by points: if/else 16, error handling 11, loops 1 (nesting depth added 16). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/DB/src/main/java/db/buffers/RecoveryMgr.java"},"region":{"startLine":206}}}],"partialFingerprints":{"codehealthFindingId/v1":"fa63ca41fa8b66b3d0ce63eb309ad8bc2c6fe6377242ff2978a3557f8c202b08"}},{"ruleId":"D2","level":"warning","message":{"text":"LongKeyRecordIterator.getRecordLeaf (cognitive 28): LongKeyRecordIterator.getRecordLeaf has cognitive complexity 28 (threshold 15). Drivers by points: if/else 21, ternaries 5, boolean chains 2 (nesting depth added 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/DB/src/main/java/db/Table.java"},"region":{"startLine":2152}}}],"partialFingerprints":{"codehealthFindingId/v1":"e07cbaa3fcaaf2b534c7b2916167ebadb5dcf7203705331b3bf73970e71ba041"}},{"ruleId":"D2","level":"warning","message":{"text":"FieldKeyRecordIterator.getRecordLeaf (cognitive 28): FieldKeyRecordIterator.getRecordLeaf has cognitive complexity 28 (threshold 15). Drivers by points: if/else 21, ternaries 5, boolean chains 2 (nesting depth added 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/DB/src/main/java/db/Table.java"},"region":{"startLine":2475}}}],"partialFingerprints":{"codehealthFindingId/v1":"f451aa883b84b69458691e85bdcdb7c2370ed6731fb33acf2646265c8d592e07"}},{"ruleId":"D2","level":"warning","message":{"text":"DecompilerParameterIdCmd.analyzeFunction (cognitive 28): DecompilerParameterIdCmd.analyzeFunction has cognitive complexity 28 (threshold 15). Drivers by points: if/else 20, ternaries 5, boolean chains 2, error handling 1 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/Decompiler/src/main/java/ghidra/app/cmd/function/DecompilerParameterIdCmd.java"},"region":{"startLine":168}}}],"partialFingerprints":{"codehealthFindingId/v1":"3401a0840e854a4cc4d02501d3c24974b7c2bac6cb4c41664b5bb346fe571631"}},{"ruleId":"D2","level":"warning","message":{"text":"DecompileDebug.dumpBytes (cognitive 28): DecompileDebug.dumpBytes has cognitive complexity 28 (threshold 15). Drivers by points: if/else 21, loops 5, boolean chains 2 (nesting depth added 12). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/Decompiler/src/main/java/ghidra/app/decompiler/DecompileDebug.java"},"region":{"startLine":217}}}],"partialFingerprints":{"codehealthFindingId/v1":"17e010504b86416231b47ab5cff1c81b93a81df4652a35fe74c0de80fc73f2c5"}},{"ruleId":"D2","level":"warning","message":{"text":"Pinning.matchViaOperator (cognitive 28): Pinning.matchViaOperator has cognitive complexity 28 (threshold 15). Drivers by points: if/else 20, loops 6, boolean chains 2 (nesting depth added 17). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/CodeCompare/src/main/java/ghidra/features/codecompare/graphanalysis/Pinning.java"},"region":{"startLine":860}}}],"partialFingerprints":{"codehealthFindingId/v1":"58b8fe4cd98cf9d9b4262cda820ab9212ba77a543dfc179f10290d3248755ed3"}},{"ruleId":"D2","level":"warning","message":{"text":"ExecutableScorerSingle.pairFunctions (cognitive 28): ExecutableScorerSingle.pairFunctions has cognitive complexity 28 (threshold 15). Drivers by points: if/else 18, loops 8, boolean chains 2 (nesting depth added 13). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/BSim/src/main/java/ghidra/features/bsim/query/client/ExecutableScorerSingle.java"},"region":{"startLine":123}}}],"partialFingerprints":{"codehealthFindingId/v1":"e9fac7b430bf78800c15a7e84d67f61d4430a16db89ef9160c1520c06df93781"}},{"ruleId":"D2","level":"warning","message":{"text":"PcodePentagon.lubAux (cognitive 28): PcodePentagon.lubAux has cognitive complexity 28 (threshold 15). Drivers by points: if/else 20, loops 6, boolean chains 2 (nesting depth added 14). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Extensions/Lisa/src/main/java/ghidra/lisa/pcode/analyses/PcodePentagon.java"},"region":{"startLine":268}}}],"partialFingerprints":{"codehealthFindingId/v1":"8787011a8964d59bcd84cceedeed3311a54f17d868a18c59ab81579d46743c76"}},{"ruleId":"D2","level":"warning","message":{"text":"JavaFinder.findSupportedJavaHomeFromInstallations (cognitive 27): JavaFinder.findSupportedJavaHomeFromInstallations has cognitive complexity 27 (threshold 15). Drivers by points: if/else 18, loops 5, boolean chains 2, error handling 2 (nesting depth added 16). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"GhidraBuild/LaunchSupport/src/main/java/ghidra/launch/JavaFinder.java"},"region":{"startLine":91}}}],"partialFingerprints":{"codehealthFindingId/v1":"2379db77d81e74e1c3bfdffe0cf1b23a9b67492e3ebe96f571e2923b068c7a6a"}},{"ruleId":"D2","level":"warning","message":{"text":"JavadocConverter.convertValueTag (cognitive 27): JavadocConverter.convertValueTag has cognitive complexity 27 (threshold 15). Drivers by points: if/else 23, boolean chains 2, loops 2 (nesting depth added 11). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"GhidraBuild/BuildFiles/Doclets/src/main/java/ghidra/doclets/typestubs/JavadocConverter.java"},"region":{"startLine":378}}}],"partialFingerprints":{"codehealthFindingId/v1":"f06dc1eadc9cdbd50ae3b7d17cd1fa8ef27e04f30477f6782107946d56cd81f0"}},{"ruleId":"D2","level":"warning","message":{"text":"Pic17c7xxAnalyzer.checkRegisterAccess (cognitive 27): Pic17c7xxAnalyzer.checkRegisterAccess has cognitive complexity 27 (threshold 15). Drivers by points: if/else 16, ternaries 6, boolean chains 5 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Processors/PIC/src/main/java/ghidra/app/plugin/core/analysis/Pic17c7xxAnalyzer.java"},"region":{"startLine":742}}}],"partialFingerprints":{"codehealthFindingId/v1":"212e0b05a13b5d8fafb858485aeabf4c62444af93fd52fbc7b2acf0773839a20"}},{"ruleId":"D2","level":"warning","message":{"text":"Loongarch_ElfRelocationHandler.relocate (cognitive 27): Loongarch_ElfRelocationHandler.relocate has cognitive complexity 27 (threshold 15). Drivers by points: if/else 20, ternaries 3, boolean chains 2, match/switch 2 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Processors/Loongarch/src/main/java/ghidra/app/util/bin/format/elf/relocation/Loongarch_ElfRelocationHandler.java"},"region":{"startLine":47}}}],"partialFingerprints":{"codehealthFindingId/v1":"d79b164142c370cd5aa460d1673d71e9cfd4e1cd016da176556e6cd0c4984a3f"}},{"ruleId":"D2","level":"warning","message":{"text":"JavaAnalyzer.createConstantPoolReference (cognitive 27): JavaAnalyzer.createConstantPoolReference has cognitive complexity 27 (threshold 15). Drivers by points: if/else 25, boolean chains 2 (nesting depth added 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Processors/JVM/src/main/java/ghidra/javaclass/analyzers/JavaAnalyzer.java"},"region":{"startLine":327}}}],"partialFingerprints":{"codehealthFindingId/v1":"72bd188b9c6ef74facc159dc2bf9814e8ff7e7e49168ba4c899a74a517cd1e25"}},{"ruleId":"D2","level":"warning","message":{"text":"SleighInstructionPrototype.getDynamicOperandRefType (cognitive 27): SleighInstructionPrototype.getDynamicOperandRefType has cognitive complexity 27 (threshold 15). Drivers by points: if/else 21, boolean chains 3, match/switch 2, loops 1 (nesting depth added 13). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/processors/sleigh/SleighInstructionPrototype.java"},"region":{"startLine":1272}}}],"partialFingerprints":{"codehealthFindingId/v1":"13e83d22369ff171db5f7279e6e391cd916a465b690e6dbbd3af06c93d35299f"}},{"ruleId":"D2","level":"warning","message":{"text":"SleighInstructionPrototype.walkTemplates (cognitive 27): SleighInstructionPrototype.walkTemplates has cognitive complexity 27 (threshold 15). Drivers by points: if/else 21, loops 3, match/switch 2, boolean chains 1 (nesting depth added 11). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/processors/sleigh/SleighInstructionPrototype.java"},"region":{"startLine":201}}}],"partialFingerprints":{"codehealthFindingId/v1":"cb95c97f07aa014d746bb7eb17f6a08a4af6f5f3a650ee745bf32b3744e5cff3"}},{"ruleId":"D2","level":"warning","message":{"text":"FloatFormat.decodeHostFloat (cognitive 27): FloatFormat.decodeHostFloat has cognitive complexity 27 (threshold 15). Drivers by points: if/else 14, ternaries 8, boolean chains 3, loops 2 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcode/floatformat/FloatFormat.java"},"region":{"startLine":397}}}],"partialFingerprints":{"codehealthFindingId/v1":"a72afaab162a66a7859af7ba4d01e854a62be2ad3c11496803e9a2773b3afa44"}},{"ruleId":"D2","level":"warning","message":{"text":"StructureDB.fixupComponents (cognitive 27): StructureDB.fixupComponents has cognitive complexity 27 (threshold 15). Drivers by points: if/else 25, boolean chains 1, loops 1 (nesting depth added 13). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/StructureDB.java"},"region":{"startLine":1889}}}],"partialFingerprints":{"codehealthFindingId/v1":"3e0630246a4be7cab2bd84d9e9b114d05b38d4fd24ca806024f6e83f8bc11ae7"}},{"ruleId":"D2","level":"warning","message":{"text":"StructureDB.replaceComponents (cognitive 27): StructureDB.replaceComponents has cognitive complexity 27 (threshold 15). Drivers by points: if/else 21, loops 4, boolean chains 2 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/StructureDB.java"},"region":{"startLine":2148}}}],"partialFingerprints":{"codehealthFindingId/v1":"c0ff4f1353dbe35ed79d45c27d03b2ffe8a14ba576e59a9759bbd3b85f01f3a3"}},{"ruleId":"D2","level":"warning","message":{"text":"DBPropertyMapManager.loadPropertyMaps (cognitive 27): DBPropertyMapManager.loadPropertyMaps has cognitive complexity 27 (threshold 15). Drivers by points: if/else 19, error handling 3, loops 2, match/switch 2, boolean chains 1 (nesting depth added 13). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/properties/DBPropertyMapManager.java"},"region":{"startLine":142}}}],"partialFingerprints":{"codehealthFindingId/v1":"7a0dd760a55a7b1d9183cbec650848654986b1c7872a276b7e28c1e9f7e306c5"}},{"ruleId":"D2","level":"warning","message":{"text":"SourceFileManagerDB.addSourceMapEntry (cognitive 27): SourceFileManagerDB.addSourceMapEntry has cognitive complexity 27 (threshold 15). Drivers by points: if/else 25, error handling 1, loops 1 (nesting depth added 11). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/sourcemap/SourceFileManagerDB.java"},"region":{"startLine":386}}}],"partialFingerprints":{"codehealthFindingId/v1":"40dc93682cd309b6ab6bca593e6f94eb26c51e7e4a46c4b98c3114a3755229cd"}},{"ruleId":"D2","level":"warning","message":{"text":"ProgramDB.repairARMContext (cognitive 27): ProgramDB.repairARMContext has cognitive complexity 27 (threshold 15). Drivers by points: if/else 18, error handling 6, boolean chains 2, loops 1 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/ProgramDB.java"},"region":{"startLine":2183}}}],"partialFingerprints":{"codehealthFindingId/v1":"038e775f680564cf6a5eafd347077e9ca7ee6b6df9b28e935f2a00026bf37a2d"}},{"ruleId":"D2","level":"warning","message":{"text":"AddressSet.deleteSets (cognitive 27): AddressSet.deleteSets has cognitive complexity 27 (threshold 15). Drivers by points: ternaries 22, loops 2, match/switch 2, boolean chains 1 (nesting depth added 14). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/address/AddressSet.java"},"region":{"startLine":949}}}],"partialFingerprints":{"codehealthFindingId/v1":"fd75b453f306769d3e4793ae10344e44d7d4533fe841b2de72bd777f0acafb85"}},{"ruleId":"D2","level":"warning","message":{"text":"FollowFlow.followInstruction (cognitive 27): FollowFlow.followInstruction has cognitive complexity 27 (threshold 15). Drivers by points: if/else 19, boolean chains 7, loops 1 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/block/FollowFlow.java"},"region":{"startLine":526}}}],"partialFingerprints":{"codehealthFindingId/v1":"3fc85dad60371172ad34086ae0dd7ae800fcdc2e438d241edd7e4a42254203bc"}},{"ruleId":"D2","level":"warning","message":{"text":"StructureDataType.replaceComponents (cognitive 27): StructureDataType.replaceComponents has cognitive complexity 27 (threshold 15). Drivers by points: if/else 21, loops 4, boolean chains 2 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/StructureDataType.java"},"region":{"startLine":1744}}}],"partialFingerprints":{"codehealthFindingId/v1":"7d7717dfb73184034499fba650f19cc467e11819d9275c0cc78e3cd119243285"}},{"ruleId":"D2","level":"warning","message":{"text":"DynamicHash.uniqueHash (cognitive 27): DynamicHash.uniqueHash has cognitive complexity 27 (threshold 15). Drivers by points: if/else 22, loops 4, boolean chains 1 (nesting depth added 14). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/pcode/DynamicHash.java"},"region":{"startLine":507}}}],"partialFingerprints":{"codehealthFindingId/v1":"8ca8cf5bbd880e2003321286e17f248f6ee8709a7decd6dc623627db868fc32f"}},{"ruleId":"D2","level":"warning","message":{"text":"DefinedStringIterator.containsStringDataType (cognitive 27): DefinedStringIterator.containsStringDataType has cognitive complexity 27 (threshold 15). Drivers by points: if/else 16, loops 9, boolean chains 2 (nesting depth added 16). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/util/DefinedStringIterator.java"},"region":{"startLine":148}}}],"partialFingerprints":{"codehealthFindingId/v1":"a4c346a6af3c4566ae7fadf30eac1452a4c64cc58dbb81e0de3deea578651252"}},{"ruleId":"D2","level":"warning","message":{"text":"GhidraFileData.copyTo (cognitive 27): GhidraFileData.copyTo has cognitive complexity 27 (threshold 15). Drivers by points: if/else 24, boolean chains 1, error handling 1, ternaries 1 (nesting depth added 12). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Project/src/main/java/ghidra/framework/data/GhidraFileData.java"},"region":{"startLine":2449}}}],"partialFingerprints":{"codehealthFindingId/v1":"a6c0b787a081835212537acf1d5798a77d8796ff8ef80f09dff65fea6e8a7f6e"}},{"ruleId":"D2","level":"warning","message":{"text":"DockingAction.getHelpInfo (cognitive 27): DockingAction.getHelpInfo has cognitive complexity 27 (threshold 15). Drivers by points: if/else 27 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Docking/src/main/java/docking/action/DockingAction.java"},"region":{"startLine":501}}}],"partialFingerprints":{"codehealthFindingId/v1":"17a019c786a7843c448cce0dde4be3031ab78a900b2eb03a7779f24b086bc698"}},{"ruleId":"D2","level":"warning","message":{"text":"HelpManager.getHelpInfo (cognitive 27): HelpManager.getHelpInfo has cognitive complexity 27 (threshold 15). Drivers by points: if/else 23, loops 3, boolean chains 1 (nesting depth added 12). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Docking/src/main/java/docking/help/HelpManager.java"},"region":{"startLine":760}}}],"partialFingerprints":{"codehealthFindingId/v1":"67a2bf5a7fb5be219a91e6adcf14c9346832172fe4f874877dadd7ee1df06bfc"}},{"ruleId":"D2","level":"warning","message":{"text":"DockingUtils.forAllDescendants (cognitive 27): DockingUtils.forAllDescendants has cognitive complexity 27 (threshold 15). Drivers by points: if/else 23, boolean chains 3, loops 1 (nesting depth added 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Docking/src/main/java/docking/DockingUtils.java"},"region":{"startLine":276}}}],"partialFingerprints":{"codehealthFindingId/v1":"54ab3c22fac276af777761e318c16c335a3b465d225cd4fc96f8c8b4678c481e"}},{"ruleId":"D2","level":"warning","message":{"text":"DefinedDataSarifMgr.processComment (cognitive 27): DefinedDataSarifMgr.processComment has cognitive complexity 27 (threshold 15). Drivers by points: if/else 14, loops 6, ternaries 4, boolean chains 3 (nesting depth added 13). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/Sarif/src/main/java/sarif/managers/DefinedDataSarifMgr.java"},"region":{"startLine":134}}}],"partialFingerprints":{"codehealthFindingId/v1":"cbdd8201b1c3cfbdb26c17e3c604f864b18bcf514cd85f8e38cf989c7908b6ea"}},{"ruleId":"D2","level":"warning","message":{"text":"ApplyStackVariables.applyTo (cognitive 27): ApplyStackVariables.applyTo has cognitive complexity 27 (threshold 15). Drivers by points: if/else 23, boolean chains 3, loops 1 (nesting depth added 13). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/PDB/src/main/java/ghidra/app/util/bin/format/pdb/ApplyStackVariables.java"},"region":{"startLine":54}}}],"partialFingerprints":{"codehealthFindingId/v1":"d3bcb80e654941e44e5768771f4459d456271d92160dfe4979066d1ed828c569"}},{"ruleId":"D2","level":"warning","message":{"text":"GhidraServer.logServerCertificates (cognitive 27): GhidraServer.logServerCertificates has cognitive complexity 27 (threshold 15). Drivers by points: if/else 19, loops 4, boolean chains 2, error handling 2 (nesting depth added 14). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/GhidraServer/src/main/java/ghidra/server/remote/GhidraServer.java"},"region":{"startLine":934}}}],"partialFingerprints":{"codehealthFindingId/v1":"47e88edb22c8f0d67cff6e00d9c0cea5bbd5f3d8617891d6f21178f606775dce"}},{"ruleId":"D2","level":"warning","message":{"text":"DecompilerNestedLayout.routeAroundColumnVertices (cognitive 27): DecompilerNestedLayout.routeAroundColumnVertices has cognitive complexity 27 (threshold 15). Drivers by points: if/else 23, loops 4 (nesting depth added 12). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/FunctionGraphDecompilerExtension/src/main/java/ghidra/app/plugin/core/functiongraph/graph/layout/DecompilerNestedLayout.java"},"region":{"startLine":620}}}],"partialFingerprints":{"codehealthFindingId/v1":"7b44b74b66a319648935f07a031e9a5abe2fd2cc06616c1412e919de55213c20"}},{"ruleId":"D2","level":"warning","message":{"text":"CartFileSystem.getFileAttributes (cognitive 27): CartFileSystem.getFileAttributes has cognitive complexity 27 (threshold 15). Drivers by points: if/else 18, loops 6, error handling 2, boolean chains 1 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/cart/CartFileSystem.java"},"region":{"startLine":241}}}],"partialFingerprints":{"codehealthFindingId/v1":"6d5f1873ec2d53016c372926e12202ec17edf1fbe4e635c87daab883ed88e4b6"}},{"ruleId":"D2","level":"warning","message":{"text":"LzssCodec.compress (cognitive 27): LzssCodec.compress has cognitive complexity 27 (threshold 15). Drivers by points: if/else 20, loops 7 (nesting depth added 12). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/lzss/LzssCodec.java"},"region":{"startLine":237}}}],"partialFingerprints":{"codehealthFindingId/v1":"647d26afafa51bb531b5bbaa2ffa5d2bb306ce6bee93fce35c20703d2c5e3316"}},{"ruleId":"D2","level":"warning","message":{"text":"ElasticDatabase.query (cognitive 27): ElasticDatabase.query has cognitive complexity 27 (threshold 15). Drivers by points: if/else 23, error handling 3, boolean chains 1. To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/BSim/src/main/java/ghidra/features/bsim/query/elastic/ElasticDatabase.java"},"region":{"startLine":2522}}}],"partialFingerprints":{"codehealthFindingId/v1":"28c7e2ea6b6533792ccf1bc773df145f41adf0b5321f8d1fc14a1b6edb24a58e"}},{"ruleId":"D2","level":"warning","message":{"text":"ServerConfig.patchConfig (cognitive 27): ServerConfig.patchConfig has cognitive complexity 27 (threshold 15). Drivers by points: if/else 25, loops 2 (nesting depth added 16). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/BSim/src/main/java/ghidra/features/bsim/query/ServerConfig.java"},"region":{"startLine":502}}}],"partialFingerprints":{"codehealthFindingId/v1":"227d1c218a24a29f32e166e010ae2edffb8d5172d73a48af2e95350c1d0a4642"}},{"ruleId":"D2","level":"warning","message":{"text":"PcodePentagon.assign (cognitive 27): PcodePentagon.assign has cognitive complexity 27 (threshold 15). Drivers by points: if/else 23, boolean chains 4 (nesting depth added 14). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Extensions/Lisa/src/main/java/ghidra/lisa/pcode/analyses/PcodePentagon.java"},"region":{"startLine":77}}}],"partialFingerprints":{"codehealthFindingId/v1":"1ef099d40909a2ea234a2cd4b0c051da387cdf9b5f821e78ad07bb6568804adf"}},{"ruleId":"D2","level":"warning","message":{"text":"PcodeSign.evalNonNullConstant (cognitive 27): PcodeSign.evalNonNullConstant has cognitive complexity 27 (threshold 15). Drivers by points: ternaries 22, if/else 5 (nesting depth added 13). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Extensions/Lisa/src/main/java/ghidra/lisa/pcode/analyses/PcodeSign.java"},"region":{"startLine":77}}}],"partialFingerprints":{"codehealthFindingId/v1":"746e8d5f54561f38880c394dc50e85204f2226cbdfd2bdd081a4768647d297f4"}},{"ruleId":"D2","level":"warning","message":{"text":"RISCV_ElfRelocationHandler.relocate (cognitive 26): RISCV_ElfRelocationHandler.relocate has cognitive complexity 26 (threshold 15). Drivers by points: if/else 22, boolean chains 2, match/switch 2 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Processors/RISCV/src/main/java/ghidra/app/util/bin/format/elf/relocation/RISCV_ElfRelocationHandler.java"},"region":{"startLine":138}}}],"partialFingerprints":{"codehealthFindingId/v1":"5e25686cfb44ec29588e9799c550199ddcb0785b163b09c2f9e16d18967bf325"}},{"ruleId":"D2","level":"warning","message":{"text":"SIMD_COPY.evaluate (cognitive 26): SIMD_COPY.evaluate has cognitive complexity 26 (threshold 15). Drivers by points: if/else 14, loops 6, boolean chains 3, ternaries 3 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Processors/AARCH64/src/main/java/ghidra/program/emulation/AARCH64EmulateInstructionStateModifier.java"},"region":{"startLine":876}}}],"partialFingerprints":{"codehealthFindingId/v1":"9e84d1b99d7154739eb1862f02d28b4ef3d0e8744163e2fa1e9e51b214f2e01f"}},{"ruleId":"D2","level":"warning","message":{"text":"1SwitchEvaluator.evaluateReference (cognitive 26): 1SwitchEvaluator.evaluateReference has cognitive complexity 26 (threshold 15). Drivers by points: if/else 18, boolean chains 5, match/switch 3 (nesting depth added 11). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Processors/68000/src/main/java/ghidra/app/plugin/core/analysis/Motorola68KAnalyzer.java"},"region":{"startLine":243}}}],"partialFingerprints":{"codehealthFindingId/v1":"0557c59aa7a61c1fc87006ee20623e5724bcf0ded65eceff574ef932aa5e5c86"}},{"ruleId":"D2","level":"warning","message":{"text":"PcodeCompile.forceSize (cognitive 26): PcodeCompile.forceSize has cognitive complexity 26 (threshold 15). Drivers by points: if/else 18, boolean chains 5, loops 3 (nesting depth added 12). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slgh_compile/PcodeCompile.java"},"region":{"startLine":128}}}],"partialFingerprints":{"codehealthFindingId/v1":"b22ec340557e71b3183089d0b2ee7987cb9aec3bfada1350d40ee1587bbaa0dc"}},{"ruleId":"D2","level":"warning","message":{"text":"TokenPattern.commonSubPattern (cognitive 26): TokenPattern.commonSubPattern has cognitive complexity 26 (threshold 15). Drivers by points: if/else 18, boolean chains 4, loops 4 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghpatexpress/TokenPattern.java"},"region":{"startLine":453}}}],"partialFingerprints":{"codehealthFindingId/v1":"0ac06448d69d00b7e04560aadd29fff246ad9854718fae6c81f1cceef27c657e"}},{"ruleId":"D2","level":"warning","message":{"text":"CodeManager.getCodeUnitIterator (cognitive 26): CodeManager.getCodeUnitIterator has cognitive complexity 26 (threshold 15). Drivers by points: error handling 14, if/else 10, ternaries 2 (nesting depth added 13). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/code/CodeManager.java"},"region":{"startLine":1024}}}],"partialFingerprints":{"codehealthFindingId/v1":"90cafb153e5701a1bf6feb3376ca123d52b76ec37a1ba8d5ffebb0d277debd7f"}},{"ruleId":"D2","level":"warning","message":{"text":"StructureDB.insertBitFieldAt (cognitive 26): StructureDB.insertBitFieldAt has cognitive complexity 26 (threshold 15). Drivers by points: if/else 23, boolean chains 2, ternaries 1 (nesting depth added 4). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition, and where an else follows a branch that already returns, drop the trailing else and let the rest of the body continue at one level."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/StructureDB.java"},"region":{"startLine":423}}}],"partialFingerprints":{"codehealthFindingId/v1":"aab6e60b50739e656147440300a23a1bc8417ba2c5914405f6b7fb0561a5f5fc"}},{"ruleId":"D2","level":"warning","message":{"text":"ExternalManagerDB.addExtLocation (cognitive 26): ExternalManagerDB.addExtLocation has cognitive complexity 26 (threshold 15). Drivers by points: if/else 20, boolean chains 3, error handling 3 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/external/ExternalManagerDB.java"},"region":{"startLine":264}}}],"partialFingerprints":{"codehealthFindingId/v1":"e5fe7ead9fb8c7ce298fbc1fa10a9050c7d5b0f89d8e30105b9cd9df1cca35de"}},{"ruleId":"D2","level":"warning","message":{"text":"MemoryMapDB.findBytes (cognitive 26): MemoryMapDB.findBytes has cognitive complexity 26 (threshold 15). Drivers by points: if/else 16, error handling 4, loops 4, boolean chains 2 (nesting depth added 14). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/mem/MemoryMapDB.java"},"region":{"startLine":1045}}}],"partialFingerprints":{"codehealthFindingId/v1":"b470e97cbbd0c8d62be1704f244222558b2115d3f3b608a048fce79179b0908b"}},{"ruleId":"D2","level":"warning","message":{"text":"ProgramDB.\u003Cinit\u003E (cognitive 26): ProgramDB.\u003Cinit\u003E has cognitive complexity 26 (threshold 15). Drivers by points: if/else 17, error handling 7, boolean chains 2 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/ProgramDB.java"},"region":{"startLine":316}}}],"partialFingerprints":{"codehealthFindingId/v1":"6e2a84588a9bc0704d1fe548b994f96d842524f18651d5754d14607d19b151a8"}},{"ruleId":"D2","level":"warning","message":{"text":"DataOrganizationImpl.restoreXml (cognitive 26): DataOrganizationImpl.restoreXml has cognitive complexity 26 (threshold 15). Drivers by points: if/else 20, loops 6 (nesting depth added 6). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/DataOrganizationImpl.java"},"region":{"startLine":912}}}],"partialFingerprints":{"codehealthFindingId/v1":"7d1e7151efc695ef0f025ce904140ddc4b82fb590bf2a19e8e5ddfde5a5df1e0"}},{"ruleId":"D2","level":"warning","message":{"text":"StructureDataType.insertBitFieldAt (cognitive 26): StructureDataType.insertBitFieldAt has cognitive complexity 26 (threshold 15). Drivers by points: if/else 23, boolean chains 2, ternaries 1 (nesting depth added 4). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition, and where an else follows a branch that already returns, drop the trailing else and let the rest of the body continue at one level."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/StructureDataType.java"},"region":{"startLine":805}}}],"partialFingerprints":{"codehealthFindingId/v1":"9442f44e96ae04ab44bbf7105ef01a4f78e7aa194ca8962229578415ab5a8377"}},{"ruleId":"D2","level":"warning","message":{"text":"JungPickingGraphMousePlugin.mousePressed (cognitive 26): JungPickingGraphMousePlugin.mousePressed has cognitive complexity 26 (threshold 15). Drivers by points: if/else 25, boolean chains 1 (nesting depth added 13). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Graph/src/main/java/ghidra/graph/viewer/event/mouse/JungPickingGraphMousePlugin.java"},"region":{"startLine":175}}}],"partialFingerprints":{"codehealthFindingId/v1":"d6a20e3fc9ef79de7bf2d56a508777d52347044b57982ca2438160bf2eca37d7"}},{"ruleId":"D2","level":"warning","message":{"text":"JSONParser.parsePrimitive (cognitive 26): JSONParser.parsePrimitive has cognitive complexity 26 (threshold 15). Drivers by points: if/else 16, match/switch 6, loops 4 (nesting depth added 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Generic/src/main/java/generic/json/JSONParser.java"},"region":{"startLine":87}}}],"partialFingerprints":{"codehealthFindingId/v1":"e997b88b81b219a4214d191ff33298be60b332924ba433e44da6cb741ede9f66"}},{"ruleId":"D2","level":"warning","message":{"text":"PropertyUtils.methodFilter (cognitive 26): PropertyUtils.methodFilter has cognitive complexity 26 (threshold 15). Drivers by points: if/else 18, boolean chains 7, match/switch 1 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/PyGhidra/src/main/java/ghidra/pyghidra/property/PropertyUtils.java"},"region":{"startLine":149}}}],"partialFingerprints":{"codehealthFindingId/v1":"5704bffa3fce9a43e3bbfb0f5262dfe7c9806acd8642d3b779eb4bccea4a54d9"}},{"ruleId":"D2","level":"warning","message":{"text":"CryptoKeyFactory.loadIfNeeded (cognitive 26): CryptoKeyFactory.loadIfNeeded has cognitive complexity 26 (threshold 15). Drivers by points: if/else 21, loops 3, error handling 2 (nesting depth added 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/FileFormats/src/main/java/ghidra/file/crypto/CryptoKeyFactory.java"},"region":{"startLine":50}}}],"partialFingerprints":{"codehealthFindingId/v1":"6ea9706043c4e4e0bcca4b22f7b901acadd66b0c83e5db18a336a752d50ceece"}},{"ruleId":"D2","level":"warning","message":{"text":"PagedumpFileHeader.toDataType (cognitive 26): PagedumpFileHeader.toDataType has cognitive complexity 26 (threshold 15). Drivers by points: ternaries 18, if/else 8 (nesting depth added 5). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition, and where an else follows a branch that already returns, drop the trailing else and let the rest of the body continue at one level."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/dump/pagedump/PagedumpFileHeader.java"},"region":{"startLine":264}}}],"partialFingerprints":{"codehealthFindingId/v1":"6f4a9b14571d28399fda15b38122764687d8cab1b1765ced67eb27ae5fb46563"}},{"ruleId":"D2","level":"warning","message":{"text":"DumpFileLoader.loadRanges (cognitive 26): DumpFileLoader.loadRanges has cognitive complexity 26 (threshold 15). Drivers by points: if/else 12, error handling 7, loops 7 (nesting depth added 13). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/dump/DumpFileLoader.java"},"region":{"startLine":149}}}],"partialFingerprints":{"codehealthFindingId/v1":"459be1a158692eeab109cffe437f77a421881b3c7ab803ad0591e53b0e31c6b4"}},{"ruleId":"D2","level":"warning","message":{"text":"ExecutableRecord.restoreXml (cognitive 26): ExecutableRecord.restoreXml has cognitive complexity 26 (threshold 15). Drivers by points: if/else 24, boolean chains 1, loops 1 (nesting depth added 11). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/BSim/src/main/java/ghidra/features/bsim/query/description/ExecutableRecord.java"},"region":{"startLine":611}}}],"partialFingerprints":{"codehealthFindingId/v1":"40fe83b27291097cc132ab9664cfc8d01ce4c5389267b5580097fffd69d0257b"}},{"ruleId":"D2","level":"warning","message":{"text":"ElasticDatabase.createExeFilter (cognitive 26): ElasticDatabase.createExeFilter has cognitive complexity 26 (threshold 15). Drivers by points: if/else 24, boolean chains 2 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/BSim/src/main/java/ghidra/features/bsim/query/elastic/ElasticDatabase.java"},"region":{"startLine":2756}}}],"partialFingerprints":{"codehealthFindingId/v1":"079a035981d05fd19d582479c0319c4ee0a5ef7b5ef42094dc16de72f772978d"}},{"ruleId":"D2","level":"warning","message":{"text":"MethodOptionSetter.\u003Cinit\u003E (cognitive 26): MethodOptionSetter.\u003Cinit\u003E has cognitive complexity 26 (threshold 15). Drivers by points: if/else 26 (nesting depth added 14). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/ProposedUtils/src/main/java/ghidra/framework/options/AutoOptionsListener.java"},"region":{"startLine":114}}}],"partialFingerprints":{"codehealthFindingId/v1":"db62cf8eb67fdb63ec97e2da27602f80bd3f0a4b9a699cfde9ec6f6264a05005"}},{"ruleId":"D2","level":"warning","message":{"text":"DebuggerStaticMappingServicePlugin.checkTraceMapping (cognitive 26): DebuggerStaticMappingServicePlugin.checkTraceMapping has cognitive complexity 26 (threshold 15). Drivers by points: if/else 17, error handling 5, loops 3, boolean chains 1 (nesting depth added 16). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/service/modules/DebuggerStaticMappingServicePlugin.java"},"region":{"startLine":131}}}],"partialFingerprints":{"codehealthFindingId/v1":"7514ffb7092518e9de04443002dfb64807864f64eca274d5eb734f1e504a4bf5"}},{"ruleId":"D2","level":"warning","message":{"text":"RmiClient.buildValue (cognitive 26): RmiClient.buildValue has cognitive complexity 26 (threshold 15). Drivers by points: if/else 23, loops 3 (nesting depth added 7). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/Debugger-rmi-trace/src/main/java/ghidra/app/plugin/core/debug/client/tracermi/RmiClient.java"},"region":{"startLine":491}}}],"partialFingerprints":{"codehealthFindingId/v1":"6e04d9465d7a94e845bd93c02d6d3e7cafb762ef4183cc467ffaf214d196716f"}},{"ruleId":"D2","level":"warning","message":{"text":"DmgFileReader.getData (cognitive 26): DmgFileReader.getData has cognitive complexity 26 (threshold 15). Drivers by points: if/else 25, boolean chains 1 (nesting depth added 16). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"GPL/DMG/src/dmg/java/mobiledevices/dmg/reader/DmgFileReader.java"},"region":{"startLine":169}}}],"partialFingerprints":{"codehealthFindingId/v1":"ade0805186a41660347621db57f64aee91e8ac1d14d749a15fd6019701d93dd8"}},{"ruleId":"D2","level":"warning","message":{"text":"GhidraModuleUtils.configureModuleSource (cognitive 25): GhidraModuleUtils.configureModuleSource has cognitive complexity 25 (threshold 15). Drivers by points: if/else 17, loops 4, boolean chains 3, error handling 1 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"GhidraBuild/EclipsePlugins/GhidraDev/GhidraDevPlugin/src/main/java/ghidradev/ghidraprojectcreator/utils/GhidraModuleUtils.java"},"region":{"startLine":133}}}],"partialFingerprints":{"codehealthFindingId/v1":"fa705e77f53d7d45e39b672dd3af76364299eefef374ae90729171fce7b204ed"}},{"ruleId":"D2","level":"warning","message":{"text":"AbstractJavaAnalyzer.changeDataSettings (cognitive 25): AbstractJavaAnalyzer.changeDataSettings has cognitive complexity 25 (threshold 15). Drivers by points: if/else 14, loops 6, error handling 3, boolean chains 2 (nesting depth added 14). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Processors/JVM/src/main/java/ghidra/javaclass/analyzers/AbstractJavaAnalyzer.java"},"region":{"startLine":81}}}],"partialFingerprints":{"codehealthFindingId/v1":"10d0b420eb34d77261d7291af6d148ab54de9021eb2a98d3982d16b5ad1b9c43"}},{"ruleId":"D2","level":"warning","message":{"text":"HexagonThunkAnalyzer.createThunk (cognitive 25): HexagonThunkAnalyzer.createThunk has cognitive complexity 25 (threshold 15). Drivers by points: if/else 20, loops 3, boolean chains 2 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Processors/Hexagon/src/main/java/ghidra/app/plugin/core/analysis/HexagonThunkAnalyzer.java"},"region":{"startLine":203}}}],"partialFingerprints":{"codehealthFindingId/v1":"b4fed8a2a05bb20669b2ec58584211a6d3974a38fe2a9c5e56c2a83378f7f50f"}},{"ruleId":"D2","level":"warning","message":{"text":"1SwitchEvaluator.evaluateReference (cognitive 25): 1SwitchEvaluator.evaluateReference has cognitive complexity 25 (threshold 15). Drivers by points: if/else 19, boolean chains 6 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Processors/ARM/src/main/java/ghidra/app/plugin/core/analysis/ArmAnalyzer.java"},"region":{"startLine":392}}}],"partialFingerprints":{"codehealthFindingId/v1":"24144a51b1f0f2b4227fdfc71a94c817caa4ce73b2c279dfaaca05e9a16527e4"}},{"ruleId":"D2","level":"warning","message":{"text":"PatternBlock.toString (cognitive 25): PatternBlock.toString has cognitive complexity 25 (threshold 15). Drivers by points: if/else 20, loops 4, boolean chains 1 (nesting depth added 14). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghpattern/PatternBlock.java"},"region":{"startLine":378}}}],"partialFingerprints":{"codehealthFindingId/v1":"5cf42debbdeac2ea7b2bd7ded2a9d4bdfd060f111f3206b8aff644a97938f5f0"}},{"ruleId":"D2","level":"warning","message":{"text":"DataTypeUtilities.getDirectContainedDatatypes (cognitive 25): DataTypeUtilities.getDirectContainedDatatypes has cognitive complexity 25 (threshold 15). Drivers by points: if/else 14, loops 11 (nesting depth added 11). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/DataTypeUtilities.java"},"region":{"startLine":254}}}],"partialFingerprints":{"codehealthFindingId/v1":"73f2c3e8cfb975f090313520771ec07529b4e4b59cc8d7a7241452a3f1ffee46"}},{"ruleId":"D2","level":"warning","message":{"text":"StructureDB.dataTypeSizeChanged (cognitive 25): StructureDB.dataTypeSizeChanged has cognitive complexity 25 (threshold 15). Drivers by points: if/else 24, loops 1 (nesting depth added 11). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/StructureDB.java"},"region":{"startLine":1827}}}],"partialFingerprints":{"codehealthFindingId/v1":"3f1a323dac977474d21864ed8df71d6bca0678d21c4ae928fd3fa35099716ca1"}},{"ruleId":"D2","level":"warning","message":{"text":"FunctionManagerDB.removeVariableRefs (cognitive 25): FunctionManagerDB.removeVariableRefs has cognitive complexity 25 (threshold 15). Drivers by points: if/else 20, loops 3, boolean chains 2 (nesting depth added 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/function/FunctionManagerDB.java"},"region":{"startLine":991}}}],"partialFingerprints":{"codehealthFindingId/v1":"4ae34f7af640353e46bdd7f50f3833bedc8e727d3522eb8d024ff6f037b3ba67"}},{"ruleId":"D2","level":"warning","message":{"text":"ReferenceDBManager.convertOldReferences (cognitive 25): ReferenceDBManager.convertOldReferences has cognitive complexity 25 (threshold 15). Drivers by points: if/else 20, boolean chains 4, loops 1 (nesting depth added 11). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/references/ReferenceDBManager.java"},"region":{"startLine":166}}}],"partialFingerprints":{"codehealthFindingId/v1":"7f88c46b6c7992cf9c4cfb62da8ed3755058e73a95b067093311ba3e661c7f99"}},{"ruleId":"D2","level":"warning","message":{"text":"Mark.containsSameObjects (cognitive 25): Mark.containsSameObjects has cognitive complexity 25 (threshold 15). Drivers by points: if/else 16, loops 5, boolean chains 4 (nesting depth added 12). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/address/AddressObjectMap.java"},"region":{"startLine":445}}}],"partialFingerprints":{"codehealthFindingId/v1":"6144f5a59e8cb6065ee475f3f44d4d57efaad32058d3a6fc756366d1aa881503"}},{"ruleId":"D2","level":"warning","message":{"text":"DefaultAddressFactory.\u003Cinit\u003E (cognitive 25): DefaultAddressFactory.\u003Cinit\u003E has cognitive complexity 25 (threshold 15). Drivers by points: if/else 21, loops 3, boolean chains 1 (nesting depth added 11). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/address/DefaultAddressFactory.java"},"region":{"startLine":61}}}],"partialFingerprints":{"codehealthFindingId/v1":"6ebb792b9205bba0abcea713863b22d532735d5ff8eb73a0b4e90e1c2b21ebe5"}},{"ruleId":"D2","level":"warning","message":{"text":"SimpleBlockModel.getFlowType (cognitive 25): SimpleBlockModel.getFlowType has cognitive complexity 25 (threshold 15). Drivers by points: if/else 19, loops 6 (nesting depth added 13). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/block/SimpleBlockModel.java"},"region":{"startLine":545}}}],"partialFingerprints":{"codehealthFindingId/v1":"a367f60bb6d85af62839d5ac5b0a24ba4ee97a153a8f2fcc207307deca4454cb"}},{"ruleId":"D2","level":"warning","message":{"text":"DataUtilities.createData (cognitive 25): DataUtilities.createData has cognitive complexity 25 (threshold 15). Drivers by points: if/else 21, boolean chains 3, error handling 1 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/DataUtilities.java"},"region":{"startLine":159}}}],"partialFingerprints":{"codehealthFindingId/v1":"5b5c9731803b2303b847c1894ca30960b40596e7b2f69fa963202c5e129cea2a"}},{"ruleId":"D2","level":"warning","message":{"text":"VariableUtilities.checkStorage (cognitive 25): VariableUtilities.checkStorage has cognitive complexity 25 (threshold 15). Drivers by points: if/else 21, boolean chains 4 (nesting depth added 12). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/listing/VariableUtilities.java"},"region":{"startLine":217}}}],"partialFingerprints":{"codehealthFindingId/v1":"0acad2594fd384bbec3b57fc2cc14bb11d33f990e869d2327c2b76dc0b4107a7"}},{"ruleId":"D2","level":"warning","message":{"text":"PackedEncode.writeInteger (cognitive 25): PackedEncode.writeInteger has cognitive complexity 25 (threshold 15). Drivers by points: if/else 24, loops 1 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/pcode/PackedEncode.java"},"region":{"startLine":47}}}],"partialFingerprints":{"codehealthFindingId/v1":"2a0cb952d0c0e6c16a287abdeca8eee5a3b54c15f3aa43c0f5f347f2dd011b04"}},{"ruleId":"D2","level":"warning","message":{"text":"DomainObjectTransactionManager.endTransaction (cognitive 25): DomainObjectTransactionManager.endTransaction has cognitive complexity 25 (threshold 15). Drivers by points: if/else 23, boolean chains 1, error handling 1 (nesting depth added 12). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Project/src/main/java/ghidra/framework/data/DomainObjectTransactionManager.java"},"region":{"startLine":138}}}],"partialFingerprints":{"codehealthFindingId/v1":"7d82644df5774898139db162c6e029e0732dc900c2f35f7df50c8d9fe670927f"}},{"ruleId":"D2","level":"warning","message":{"text":"GhidraFileData.addToVersionControl (cognitive 25): GhidraFileData.addToVersionControl has cognitive complexity 25 (threshold 15). Drivers by points: if/else 15, error handling 4, boolean chains 3, ternaries 3 (nesting depth added 5). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition, and where an else follows a branch that already returns, drop the trailing else and let the rest of the body continue at one level."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Project/src/main/java/ghidra/framework/data/GhidraFileData.java"},"region":{"startLine":1268}}}],"partialFingerprints":{"codehealthFindingId/v1":"5b896bc4e84907872286c1c929497f3a4c3d786f32f4a5ec2495d9dafce47dc7"}},{"ruleId":"D2","level":"warning","message":{"text":"GhidraFileData.merge (cognitive 25): GhidraFileData.merge has cognitive complexity 25 (threshold 15). Drivers by points: if/else 21, error handling 4 (nesting depth added 5). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition, and where an else follows a branch that already returns, drop the trailing else and let the rest of the body continue at one level."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Project/src/main/java/ghidra/framework/data/GhidraFileData.java"},"region":{"startLine":2071}}}],"partialFingerprints":{"codehealthFindingId/v1":"101a9ce6ae38b107ce4e924848eb2f0531a8970334a68852998744b086f3c362"}},{"ruleId":"D2","level":"warning","message":{"text":"ProjectDataUtils.createDomainFolderPath (cognitive 25): ProjectDataUtils.createDomainFolderPath has cognitive complexity 25 (threshold 15). Drivers by points: if/else 23, boolean chains 1, loops 1 (nesting depth added 14). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Project/src/main/java/ghidra/framework/model/ProjectDataUtils.java"},"region":{"startLine":117}}}],"partialFingerprints":{"codehealthFindingId/v1":"39bcf3b3a54627b48ff050ce5882834a7dd251e09bbbbf65f59a13f5def90cef"}},{"ruleId":"D2","level":"warning","message":{"text":"DomainFileIterator.queueNextFiles (cognitive 25): DomainFileIterator.queueNextFiles has cognitive complexity 25 (threshold 15). Drivers by points: if/else 19, loops 5, boolean chains 1 (nesting depth added 16). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Project/src/main/java/ghidra/framework/model/ProjectDataUtils.java"},"region":{"startLine":312}}}],"partialFingerprints":{"codehealthFindingId/v1":"1db779bff202e54f7fcc2ba4aa9a96c90580043a7452fe6a8c129929b32e862d"}},{"ruleId":"D2","level":"warning","message":{"text":"RedBlackTree.deleteEntry (cognitive 25): RedBlackTree.deleteEntry has cognitive complexity 25 (threshold 15). Drivers by points: if/else 23, boolean chains 1, ternaries 1 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Generic/src/main/java/ghidra/util/datastruct/RedBlackTree.java"},"region":{"startLine":417}}}],"partialFingerprints":{"codehealthFindingId/v1":"0c5dda5ef098043ce3e9c48cb3246fb556eeb5f6410f76f34896915d4c2b8230"}},{"ruleId":"D2","level":"warning","message":{"text":"LayoutLockedFieldPanelScrollCoordinator.update (cognitive 25): LayoutLockedFieldPanelScrollCoordinator.update has cognitive complexity 25 (threshold 15). Drivers by points: if/else 23, boolean chains 1, loops 1 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Docking/src/main/java/docking/widgets/fieldpanel/internal/LayoutLockedFieldPanelScrollCoordinator.java"},"region":{"startLine":59}}}],"partialFingerprints":{"codehealthFindingId/v1":"977ddb1cff002e2fea5079b09577660c2d5c2e07481cbc8e761d3a98e87995a7"}},{"ruleId":"D2","level":"warning","message":{"text":"BufferMgr.redo (cognitive 25): BufferMgr.redo has cognitive complexity 25 (threshold 15). Drivers by points: if/else 24, loops 1 (nesting depth added 14). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/DB/src/main/java/db/buffers/BufferMgr.java"},"region":{"startLine":1374}}}],"partialFingerprints":{"codehealthFindingId/v1":"bd613bdaca65cddca26d93dd7b0337ff745c8a628f27fbcb5a7bfbe40c9370a1"}},{"ruleId":"D2","level":"warning","message":{"text":"SimilarSymbolNameProgramCorrelator.addSymbolsToMap (cognitive 25): SimilarSymbolNameProgramCorrelator.addSymbolsToMap has cognitive complexity 25 (threshold 15). Drivers by points: if/else 22, loops 3 (nesting depth added 12). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/VersionTracking/src/main/java/ghidra/feature/vt/api/correlator/program/SimilarSymbolNameProgramCorrelator.java"},"region":{"startLine":86}}}],"partialFingerprints":{"codehealthFindingId/v1":"d591f7dcdd0ae3a50f76595143a89ddfeb2cd44fc3cacf4136a5f67e1b2f4989"}},{"ruleId":"D2","level":"warning","message":{"text":"MatchInfo.\u003Cinit\u003E (cognitive 25): MatchInfo.\u003Cinit\u003E has cognitive complexity 25 (threshold 15). Drivers by points: if/else 17, ternaries 6, boolean chains 2 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/VersionTracking/src/main/java/ghidra/feature/vt/gui/util/MatchInfo.java"},"region":{"startLine":46}}}],"partialFingerprints":{"codehealthFindingId/v1":"7c6775fd18f1f02add8a3309d0308feb48f09b519b3b2a5f5f319893d6f9fc9e"}},{"ruleId":"D2","level":"warning","message":{"text":"ObjcMessageAnalyzer.getNameForVarnode (cognitive 25): ObjcMessageAnalyzer.getNameForVarnode has cognitive complexity 25 (threshold 15). Drivers by points: if/else 20, boolean chains 3, error handling 1, loops 1 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/Objective-C/src/main/java/ghidra/app/plugin/core/analysis/ObjcMessageAnalyzer.java"},"region":{"startLine":586}}}],"partialFingerprints":{"codehealthFindingId/v1":"f8cf170e1c78973005aea9d619ac3d0e37dc789e01c1be30f8050fb744c78943"}},{"ruleId":"D2","level":"warning","message":{"text":"RttiUtil.createSymbolFromDemangledType (cognitive 25): RttiUtil.createSymbolFromDemangledType has cognitive complexity 25 (threshold 15). Drivers by points: if/else 17, error handling 6, boolean chains 1, loops 1 (nesting depth added 12). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/MicrosoftCodeAnalyzer/src/main/java/ghidra/app/cmd/data/rtti/RttiUtil.java"},"region":{"startLine":70}}}],"partialFingerprints":{"codehealthFindingId/v1":"0408d6283657e8fbeb38fcd62392ce4775e77f5f0f26c45f7a4a26a5f8f03194"}},{"ruleId":"D2","level":"warning","message":{"text":"FidServiceLibraryIngest.hashAllTheFunctions (cognitive 25): FidServiceLibraryIngest.hashAllTheFunctions has cognitive complexity 25 (threshold 15). Drivers by points: if/else 19, error handling 4, boolean chains 1, loops 1 (nesting depth added 14). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/FunctionID/src/main/java/ghidra/feature/fid/service/FidServiceLibraryIngest.java"},"region":{"startLine":335}}}],"partialFingerprints":{"codehealthFindingId/v1":"2f23f7de38ac3a6f724c4e1bbcb7f5f793d3b565a7b41cb2e66d0277a3df4afe"}},{"ruleId":"D2","level":"warning","message":{"text":"FGController.createDefaultFormat (cognitive 25): FGController.createDefaultFormat has cognitive complexity 25 (threshold 15). Drivers by points: if/else 14, loops 9, boolean chains 2 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/FunctionGraph/src/main/java/ghidra/app/plugin/core/functiongraph/mvc/FGController.java"},"region":{"startLine":216}}}],"partialFingerprints":{"codehealthFindingId/v1":"bc3b5f73d1c01088fb8967f94bfc544d4f77f4913d0580e4995d31ba9e373835"}},{"ruleId":"D2","level":"warning","message":{"text":"FileFormatAnalyzer.changeDataSettings (cognitive 25): FileFormatAnalyzer.changeDataSettings has cognitive complexity 25 (threshold 15). Drivers by points: if/else 14, loops 6, error handling 3, boolean chains 2 (nesting depth added 14). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/FileFormats/src/main/java/ghidra/file/analyzers/FileFormatAnalyzer.java"},"region":{"startLine":90}}}],"partialFingerprints":{"codehealthFindingId/v1":"a17597f87765ab0f70ba8b28d2e76ff552b35b8f0f4d30d7b0b9790fcbce6f45"}},{"ruleId":"D2","level":"warning","message":{"text":"ExtractedMacho.fixupSegment (cognitive 25): ExtractedMacho.fixupSegment has cognitive complexity 25 (threshold 15). Drivers by points: ternaries 17, if/else 6, boolean chains 1, loops 1 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/ios/ExtractedMacho.java"},"region":{"startLine":312}}}],"partialFingerprints":{"codehealthFindingId/v1":"5e2d56a8ca9c9f8488c55a3a6a3fc75349d50583dac59f082433e14604afd634"}},{"ruleId":"D2","level":"warning","message":{"text":"ExtractedMacho.pack (cognitive 25): ExtractedMacho.pack has cognitive complexity 25 (threshold 15). Drivers by points: if/else 18, loops 5, boolean chains 2 (nesting depth added 12). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/ios/ExtractedMacho.java"},"region":{"startLine":81}}}],"partialFingerprints":{"codehealthFindingId/v1":"5685713e23be74222fb861b1fd65cae3ef5faf85c71103d1dd4bab230b17e55f"}},{"ruleId":"D2","level":"warning","message":{"text":"PCodeCfgGraphTask.translateVarnode (cognitive 25): PCodeCfgGraphTask.translateVarnode has cognitive complexity 25 (threshold 15). Drivers by points: if/else 25 (nesting depth added 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/Decompiler/src/main/java/ghidra/app/plugin/core/decompile/actions/PCodeCfgGraphTask.java"},"region":{"startLine":399}}}],"partialFingerprints":{"codehealthFindingId/v1":"c240a6e76111eef079e5401e593d59260edc3f6145c89b091c2a9bc7b4ae4c62"}},{"ruleId":"D2","level":"warning","message":{"text":"FunctionBitPatternInfo.\u003Cinit\u003E (cognitive 25): FunctionBitPatternInfo.\u003Cinit\u003E has cognitive complexity 25 (threshold 15). Drivers by points: if/else 18, loops 6, boolean chains 1 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/BytePatterns/src/main/java/ghidra/bitpatterns/info/FunctionBitPatternInfo.java"},"region":{"startLine":80}}}],"partialFingerprints":{"codehealthFindingId/v1":"911b1f590d734f631c727a4f7964751cff998e2d2da40f70eeda625e4ffa160b"}},{"ruleId":"D2","level":"warning","message":{"text":"InstructionSequence.getInstSeqs (cognitive 25): InstructionSequence.getInstSeqs has cognitive complexity 25 (threshold 15). Drivers by points: if/else 15, boolean chains 4, loops 4, match/switch 2 (nesting depth added 13). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/BytePatterns/src/main/java/ghidra/bitpatterns/info/InstructionSequence.java"},"region":{"startLine":221}}}],"partialFingerprints":{"codehealthFindingId/v1":"853c0137b40dbb58cdeba39661890a365c624bae79c22f89d065dd8e92e6590a"}},{"ruleId":"D2","level":"warning","message":{"text":"ElasticDatabase.updateExecutable (cognitive 25): ElasticDatabase.updateExecutable has cognitive complexity 25 (threshold 15). Drivers by points: if/else 25 (nesting depth added 6). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition, and where an else follows a branch that already returns, drop the trailing else and let the rest of the body continue at one level."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/BSim/src/main/java/ghidra/features/bsim/query/elastic/ElasticDatabase.java"},"region":{"startLine":1270}}}],"partialFingerprints":{"codehealthFindingId/v1":"40dc58bc5e9f14a5330cd4a72007073ccee83cd8bc3b3298c3dea157c1798ae4"}},{"ruleId":"D2","level":"warning","message":{"text":"GenSignatures.getWeightsFile (cognitive 25): GenSignatures.getWeightsFile has cognitive complexity 25 (threshold 15). Drivers by points: if/else 21, boolean chains 4 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/BSim/src/main/java/ghidra/features/bsim/query/GenSignatures.java"},"region":{"startLine":581}}}],"partialFingerprints":{"codehealthFindingId/v1":"271f34c2d2a044eda824580f942f0db24aef1478611a63ec4b2687a9f3cddf8e"}},{"ruleId":"D2","level":"warning","message":{"text":"LisaTaintState.repToStrings (cognitive 25): LisaTaintState.repToStrings has cognitive complexity 25 (threshold 15). Drivers by points: if/else 21, ternaries 3, loops 1 (nesting depth added 12). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Extensions/Lisa/src/main/java/ghidra/lisa/gui/LisaTaintState.java"},"region":{"startLine":398}}}],"partialFingerprints":{"codehealthFindingId/v1":"07acc29b15958a6fe0f846ce169c70c24fd5ffa115be7401f46b2db30bca662d"}},{"ruleId":"D2","level":"warning","message":{"text":"DBTraceCodeSpace.bytesChanged (cognitive 25): DBTraceCodeSpace.bytesChanged has cognitive complexity 25 (threshold 15). Drivers by points: if/else 17, error handling 4, loops 4 (nesting depth added 13). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/listing/DBTraceCodeSpace.java"},"region":{"startLine":289}}}],"partialFingerprints":{"codehealthFindingId/v1":"21188b5e5f5a77693b9720091d0aa6433dfb2f39c461a9cf6f140a686668f045"}},{"ruleId":"D2","level":"warning","message":{"text":"TraceCallTreeProvider.checkForFallThroughs (cognitive 25): TraceCallTreeProvider.checkForFallThroughs has cognitive complexity 25 (threshold 15). Drivers by points: if/else 14, loops 10, boolean chains 1 (nesting depth added 16). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/gui/tracecalltree/TraceCallTreeProvider.java"},"region":{"startLine":507}}}],"partialFingerprints":{"codehealthFindingId/v1":"d24ab19ac02cacbad3114fbab8e28acb3c7ca0be338c13f8d126b357c2ab5208"}},{"ruleId":"D2","level":"warning","message":{"text":"DmgInfoGenerator.getInformation (cognitive 25): DmgInfoGenerator.getInformation has cognitive complexity 25 (threshold 15). Drivers by points: if/else 17, loops 8 (nesting depth added 12). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"GPL/DMG/src/dmg/java/mobiledevices/dmg/reader/DmgInfoGenerator.java"},"region":{"startLine":38}}}],"partialFingerprints":{"codehealthFindingId/v1":"7978ccb166adb865f61fb0c9a2c1073cff56cc1638e90bf8e98d40526474dc30"}},{"ruleId":"D2","level":"warning","message":{"text":"JavadocConverter.getJavadoc (cognitive 24): JavadocConverter.getJavadoc has cognitive complexity 24 (threshold 15). Drivers by points: if/else 15, loops 9 (nesting depth added 13). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"GhidraBuild/BuildFiles/Doclets/src/main/java/ghidra/doclets/typestubs/JavadocConverter.java"},"region":{"startLine":108}}}],"partialFingerprints":{"codehealthFindingId/v1":"0cfe8ed7a62f458e17d5a4caeb0af065264d4496d2ac9631d20f23a2dd425555"}},{"ruleId":"D2","level":"warning","message":{"text":"AVR32_ElfRelocationHandler.relocate (cognitive 24): AVR32_ElfRelocationHandler.relocate has cognitive complexity 24 (threshold 15). Drivers by points: if/else 18, boolean chains 3, error handling 2, match/switch 1 (nesting depth added 11). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Processors/Atmel/src/main/java/ghidra/app/util/bin/format/elf/relocation/AVR32_ElfRelocationHandler.java"},"region":{"startLine":47}}}],"partialFingerprints":{"codehealthFindingId/v1":"47c7a43dfc9bb88cdcd68b2d87d9717555d2c7652030dd3cb2862a126d08f3dc"}},{"ruleId":"D2","level":"warning","message":{"text":"PcodeEmit.dumpCallOverride (cognitive 24): PcodeEmit.dumpCallOverride has cognitive complexity 24 (threshold 15). Drivers by points: if/else 19, boolean chains 5 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/processors/sleigh/PcodeEmit.java"},"region":{"startLine":233}}}],"partialFingerprints":{"codehealthFindingId/v1":"9add37736c8334eec7c2996bc672daaadd7eb1022b79881feca36cb81c4f6df0"}},{"ruleId":"D2","level":"warning","message":{"text":"SleighInstructionPrototype.getInputObjects (cognitive 24): SleighInstructionPrototype.getInputObjects has cognitive complexity 24 (threshold 15). Drivers by points: if/else 21, boolean chains 2, loops 1 (nesting depth added 13). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/processors/sleigh/SleighInstructionPrototype.java"},"region":{"startLine":907}}}],"partialFingerprints":{"codehealthFindingId/v1":"64f4cc97cc160a5b2766f61c1c0c88c923f1bb4313b0163c7bd99ccc54497611"}},{"ruleId":"D2","level":"warning","message":{"text":"PcodeFormatter.getPcodeOpTemplates (cognitive 24): PcodeFormatter.getPcodeOpTemplates has cognitive complexity 24 (threshold 15). Drivers by points: if/else 15, loops 4, boolean chains 3, ternaries 2 (nesting depth added 12). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/util/pcode/PcodeFormatter.java"},"region":{"startLine":98}}}],"partialFingerprints":{"codehealthFindingId/v1":"c14ea84967e7f785d76cb5dd3fdbe6df926871dc79567af001444ffd9ffea180"}},{"ruleId":"D2","level":"warning","message":{"text":"CodeManager.reDisassembleAllInstructions (cognitive 24): CodeManager.reDisassembleAllInstructions has cognitive complexity 24 (threshold 15). Drivers by points: if/else 17, error handling 5, boolean chains 1, loops 1 (nesting depth added 11). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/code/CodeManager.java"},"region":{"startLine":3181}}}],"partialFingerprints":{"codehealthFindingId/v1":"e6f1f1e735970f163d551cdcc871488f98f513cdb985e43c5fe173750d3814cc"}},{"ruleId":"D2","level":"warning","message":{"text":"CodeUnitRecordIterator.findNext (cognitive 24): CodeUnitRecordIterator.findNext has cognitive complexity 24 (threshold 15). Drivers by points: if/else 13, ternaries 8, boolean chains 2, loops 1 (nesting depth added 11). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/code/CodeUnitRecordIterator.java"},"region":{"startLine":83}}}],"partialFingerprints":{"codehealthFindingId/v1":"286883ae2ce5630eb38a6e0707c3abde23d6c06ffed77565fbc9240dfa8326e1"}},{"ruleId":"D2","level":"warning","message":{"text":"AddressKeyIterator.\u003Cinit\u003E (cognitive 24): AddressKeyIterator.\u003Cinit\u003E has cognitive complexity 24 (threshold 15). Drivers by points: if/else 20, ternaries 4 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/map/AddressKeyIterator.java"},"region":{"startLine":126}}}],"partialFingerprints":{"codehealthFindingId/v1":"118e7362d52ffe22491bfb7a2df45380b46465f0a66355548454e98f4bd3a77f"}},{"ruleId":"D2","level":"warning","message":{"text":"RelocationDBAdapter.preV6DataMigrationUpgrade (cognitive 24): RelocationDBAdapter.preV6DataMigrationUpgrade has cognitive complexity 24 (threshold 15). Drivers by points: if/else 12, ternaries 10, loops 2 (nesting depth added 12). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/reloc/RelocationDBAdapter.java"},"region":{"startLine":268}}}],"partialFingerprints":{"codehealthFindingId/v1":"1b6fee0add1e870393ea3d9e3c4c3f9c7f66f94be035fc89bdaa2f9417072dc5"}},{"ruleId":"D2","level":"warning","message":{"text":"FunctionSymbol.delete (cognitive 24): FunctionSymbol.delete has cognitive complexity 24 (threshold 15). Drivers by points: if/else 19, boolean chains 3, error handling 2 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/symbol/FunctionSymbol.java"},"region":{"startLine":77}}}],"partialFingerprints":{"codehealthFindingId/v1":"05fd2228535237b7bfda43daea783686ffb2cbd82ec2fcea59ef535455e76abf"}},{"ruleId":"D2","level":"warning","message":{"text":"AddressObjectMap.removeRange (cognitive 24): AddressObjectMap.removeRange has cognitive complexity 24 (threshold 15). Drivers by points: if/else 21, boolean chains 1, error handling 1, loops 1 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/address/AddressObjectMap.java"},"region":{"startLine":294}}}],"partialFingerprints":{"codehealthFindingId/v1":"3818028751238735ab3bde7b25522645e916b9463e3f902d4f3196a00aba9d20"}},{"ruleId":"D2","level":"warning","message":{"text":"FollowFlow.followInstructionBack (cognitive 24): FollowFlow.followInstructionBack has cognitive complexity 24 (threshold 15). Drivers by points: if/else 21, boolean chains 2, loops 1 (nesting depth added 12). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/block/FollowFlow.java"},"region":{"startLine":591}}}],"partialFingerprints":{"codehealthFindingId/v1":"770673c36c3272865b679c7f1ade74da67a37758e7c80ed07cd44fe103f0739c"}},{"ruleId":"D2","level":"warning","message":{"text":"SubroutineDestReferenceIterator.getDestinations (cognitive 24): SubroutineDestReferenceIterator.getDestinations has cognitive complexity 24 (threshold 15). Drivers by points: if/else 19, loops 3, boolean chains 2 (nesting depth added 13). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/block/SubroutineDestReferenceIterator.java"},"region":{"startLine":90}}}],"partialFingerprints":{"codehealthFindingId/v1":"954170fe55dee77bb0bfdfce31555d50a3ea2f1f695d7ca3212e79e6cf59bc8f"}},{"ruleId":"D2","level":"warning","message":{"text":"StandAloneDataTypeManager.setProgramArchitecture (cognitive 24): StandAloneDataTypeManager.setProgramArchitecture has cognitive complexity 24 (threshold 15). Drivers by points: if/else 17, error handling 5, boolean chains 2 (nesting depth added 12). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/StandAloneDataTypeManager.java"},"region":{"startLine":657}}}],"partialFingerprints":{"codehealthFindingId/v1":"2c7f1123d16c2ee1bf2ff18f04714722787ef3628fb9126e8b6126be235ded07"}},{"ruleId":"D2","level":"warning","message":{"text":"ParamEntry.getAddrBySlot (cognitive 24): ParamEntry.getAddrBySlot has cognitive complexity 24 (threshold 15). Drivers by points: if/else 23, boolean chains 1 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/lang/ParamEntry.java"},"region":{"startLine":355}}}],"partialFingerprints":{"codehealthFindingId/v1":"f22393a8fa8e9a543e634eb11cf540a181c56a41f58bfe7aacf0b42157b9661f"}},{"ruleId":"D2","level":"warning","message":{"text":"PrototypeModel.restoreXml (cognitive 24): PrototypeModel.restoreXml has cognitive complexity 24 (threshold 15). Drivers by points: if/else 23, loops 1 (nesting depth added 5). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition, and where an else follows a branch that already returns, drop the trailing else and let the rest of the body continue at one level."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/lang/PrototypeModel.java"},"region":{"startLine":668}}}],"partialFingerprints":{"codehealthFindingId/v1":"a362603369240157b839839a48194e8040d274387e36fcd4b7fb478fe1c0e261"}},{"ruleId":"D2","level":"warning","message":{"text":"VariableStorage.translateSerialization (cognitive 24): VariableStorage.translateSerialization has cognitive complexity 24 (threshold 15). Drivers by points: if/else 22, boolean chains 1, loops 1 (nesting depth added 12). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/listing/VariableStorage.java"},"region":{"startLine":892}}}],"partialFingerprints":{"codehealthFindingId/v1":"68ec353ef9cef61755118a7caedcc8bc02a9120da448883f107c5240b298efb9"}},{"ruleId":"D2","level":"warning","message":{"text":"SymbolUtilities.getSymbolTypeDisplayName (cognitive 24): SymbolUtilities.getSymbolTypeDisplayName has cognitive complexity 24 (threshold 15). Drivers by points: if/else 23, boolean chains 1 (nesting depth added 11). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/symbol/SymbolUtilities.java"},"region":{"startLine":1005}}}],"partialFingerprints":{"codehealthFindingId/v1":"51c2e318bcd5c900834715ecf7740ca2b6d439482b27a070782784b01ca7af16"}},{"ruleId":"D2","level":"warning","message":{"text":"FVTable.incrementSelection (cognitive 24): FVTable.incrementSelection has cognitive complexity 24 (threshold 15). Drivers by points: if/else 18, error handling 5, boolean chains 1 (nesting depth added 12). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Project/src/main/java/ghidra/framework/main/logviewer/ui/FVTable.java"},"region":{"startLine":306}}}],"partialFingerprints":{"codehealthFindingId/v1":"1f71a3f72f99385da09828f40019e0dd8af557655870707ae7b342f2ded93c34"}},{"ruleId":"D2","level":"warning","message":{"text":"NumericUtilities.convertMaskedValueToHexString (cognitive 24): NumericUtilities.convertMaskedValueToHexString has cognitive complexity 24 (threshold 15). Drivers by points: if/else 17, loops 5, boolean chains 2 (nesting depth added 11). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Generic/src/main/java/ghidra/util/NumericUtilities.java"},"region":{"startLine":443}}}],"partialFingerprints":{"codehealthFindingId/v1":"5cd8a857aac21a819ad99d1b0592becf4fad94831cbb67cbfe0bd7ad5da5e919"}},{"ruleId":"D2","level":"warning","message":{"text":"SplitPanelLayout.layoutContainer (cognitive 24): SplitPanelLayout.layoutContainer has cognitive complexity 24 (threshold 15). Drivers by points: if/else 21, boolean chains 3 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Docking/src/main/java/docking/SplitPanel.java"},"region":{"startLine":70}}}],"partialFingerprints":{"codehealthFindingId/v1":"7ae83a0b1cf3d8dc54ba9467115f3bcaa3f14347eb9d975dd116e1c5c9e9fee0"}},{"ruleId":"D2","level":"warning","message":{"text":"BufferMgr.doSave (cognitive 24): BufferMgr.doSave has cognitive complexity 24 (threshold 15). Drivers by points: if/else 16, boolean chains 5, loops 3 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/DB/src/main/java/db/buffers/BufferMgr.java"},"region":{"startLine":1965}}}],"partialFingerprints":{"codehealthFindingId/v1":"8c6cf6f94301c3c76e6cb909301856aa560344bb1286958a419e2bfdd953280a"}},{"ruleId":"D2","level":"warning","message":{"text":"BSimProgramCorrelatorMatching.chooseSeeds (cognitive 24): BSimProgramCorrelatorMatching.chooseSeeds has cognitive complexity 24 (threshold 15). Drivers by points: if/else 12, loops 5, ternaries 5, boolean chains 2 (nesting depth added 11). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/VersionTrackingBSim/src/main/java/ghidra/feature/vt/api/BSimProgramCorrelatorMatching.java"},"region":{"startLine":280}}}],"partialFingerprints":{"codehealthFindingId/v1":"7c6b1dd1abbbcb0a8605d90ece2b105b2f3d4e905baeb6d4f4ed87ca4decac82"}},{"ruleId":"D2","level":"warning","message":{"text":"SimilarSymbolNameProgramCorrelator.transform (cognitive 24): SimilarSymbolNameProgramCorrelator.transform has cognitive complexity 24 (threshold 15). Drivers by points: if/else 20, boolean chains 3, loops 1 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/VersionTracking/src/main/java/ghidra/feature/vt/api/correlator/program/SimilarSymbolNameProgramCorrelator.java"},"region":{"startLine":179}}}],"partialFingerprints":{"codehealthFindingId/v1":"80a7dd58ea8ca3337b161c0a369aa2e9e9e0ace0eaceac3e5ae75a8b316aeb46"}},{"ruleId":"D2","level":"warning","message":{"text":"SarifDataFrame.\u003Cinit\u003E (cognitive 24): SarifDataFrame.\u003Cinit\u003E has cognitive complexity 24 (threshold 15). Drivers by points: if/else 12, loops 12 (nesting depth added 14). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/Sarif/src/main/java/sarif/model/SarifDataFrame.java"},"region":{"startLine":57}}}],"partialFingerprints":{"codehealthFindingId/v1":"aaad30c9426b2c52c745f3a9ccdf721ce12606e7959ce20f37bc45f133c7a69a"}},{"ruleId":"D2","level":"warning","message":{"text":"PdbResearch.study1 (cognitive 24): PdbResearch.study1 has cognitive complexity 24 (threshold 15). Drivers by points: if/else 19, loops 4, boolean chains 1 (nesting depth added 11). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/PDB/src/main/java/ghidra/app/util/pdb/pdbapplicator/PdbResearch.java"},"region":{"startLine":1010}}}],"partialFingerprints":{"codehealthFindingId/v1":"35a72487e9fd08076a0c1c90e5291a5942c244d19dd573beaca7373383a62adf"}},{"ruleId":"D2","level":"warning","message":{"text":"FidServiceLibraryIngest.populateLibraryFromProgram (cognitive 24): FidServiceLibraryIngest.populateLibraryFromProgram has cognitive complexity 24 (threshold 15). Drivers by points: if/else 20, loops 4 (nesting depth added 12). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/FunctionID/src/main/java/ghidra/feature/fid/service/FidServiceLibraryIngest.java"},"region":{"startLine":268}}}],"partialFingerprints":{"codehealthFindingId/v1":"740d202118695575dbe40eb526757ea5c6bbfb4e0207a3637534730d89a61cbc"}},{"ruleId":"D2","level":"warning","message":{"text":"SarifTaintCodeFlowResultHandler.handle (cognitive 24): SarifTaintCodeFlowResultHandler.handle has cognitive complexity 24 (threshold 15). Drivers by points: if/else 13, loops 6, ternaries 4, boolean chains 1 (nesting depth added 13). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/DecompilerDependent/src/main/java/ghidra/app/plugin/core/decompiler/taint/sarif/SarifTaintCodeFlowResultHandler.java"},"region":{"startLine":44}}}],"partialFingerprints":{"codehealthFindingId/v1":"78a16e45738feb6bf4b315c5c065d828718beadb938d98b8b856d4a6f8889771"}},{"ruleId":"D2","level":"warning","message":{"text":"ByteSequenceRowObject.getRowObjectsFromInstructionSequences (cognitive 24): ByteSequenceRowObject.getRowObjectsFromInstructionSequences has cognitive complexity 24 (threshold 15). Drivers by points: if/else 17, loops 3, match/switch 3, boolean chains 1 (nesting depth added 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/BytePatterns/src/main/java/ghidra/bitpatterns/info/ByteSequenceRowObject.java"},"region":{"startLine":236}}}],"partialFingerprints":{"codehealthFindingId/v1":"b5d3bcd5dd2d80db562282fe574a37ece49d99634de5aebd48c76193dcaa9e9d"}},{"ruleId":"D2","level":"warning","message":{"text":"BsfvTableModel.doLoad (cognitive 24): BsfvTableModel.doLoad has cognitive complexity 24 (threshold 15). Drivers by points: if/else 22, boolean chains 1, loops 1 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/BSimFeatureVisualizer/src/main/java/ghidra/bsfv/BsfvTableModel.java"},"region":{"startLine":68}}}],"partialFingerprints":{"codehealthFindingId/v1":"749f281cf18ad921b76f7f4698b7af3694bbce538a61cbfa529294f192312ad6"}},{"ruleId":"D2","level":"warning","message":{"text":"AbstractSQLFunctionDatabase.testExecutableDuplication (cognitive 24): AbstractSQLFunctionDatabase.testExecutableDuplication has cognitive complexity 24 (threshold 15). Drivers by points: if/else 23, loops 1 (nesting depth added 14). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/BSim/src/main/java/ghidra/features/bsim/query/client/AbstractSQLFunctionDatabase.java"},"region":{"startLine":1041}}}],"partialFingerprints":{"codehealthFindingId/v1":"5d0772e13ba4dc3ecbb18b4c42361e8636481e658b79f55006e892a092ca5803"}},{"ruleId":"D2","level":"warning","message":{"text":"DatabaseInformation.restoreXml (cognitive 24): DatabaseInformation.restoreXml has cognitive complexity 24 (threshold 15). Drivers by points: if/else 23, loops 1 (nesting depth added 12). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/BSim/src/main/java/ghidra/features/bsim/query/description/DatabaseInformation.java"},"region":{"startLine":93}}}],"partialFingerprints":{"codehealthFindingId/v1":"884dd9f05ec815009b23ce7e2bc86f6808e02685eb62994bf75c50b45747a8e2"}},{"ruleId":"D2","level":"warning","message":{"text":"AbstractBaseDBTraceDefinedUnitsView.subtractFrom (cognitive 24): AbstractBaseDBTraceDefinedUnitsView.subtractFrom has cognitive complexity 24 (threshold 15). Drivers by points: if/else 20, loops 3, ternaries 1 (nesting depth added 14). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/listing/AbstractBaseDBTraceDefinedUnitsView.java"},"region":{"startLine":173}}}],"partialFingerprints":{"codehealthFindingId/v1":"7984132877685b05abc2158ed91f569741ea0a314c2a64fd830f5f48370cd507"}},{"ruleId":"D2","level":"warning","message":{"text":"LabelBoundPcodeParser.findUserSymbol (cognitive 24): LabelBoundPcodeParser.findUserSymbol has cognitive complexity 24 (threshold 15). Drivers by points: if/else 15, loops 7, boolean chains 2 (nesting depth added 13). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/Debugger/src/main/java/ghidra/pcode/exec/DebuggerPcodeUtils.java"},"region":{"startLine":232}}}],"partialFingerprints":{"codehealthFindingId/v1":"55ff78d32ef315153f412bda89e0418e7b3a30a20e67952e7aaec0627afd345e"}},{"ruleId":"D2","level":"warning","message":{"text":"VmState.recordState (cognitive 24): VmState.recordState has cognitive complexity 24 (threshold 15). Drivers by points: if/else 15, boolean chains 6, error handling 3 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/Debugger-jpda/src/main/java/ghidra/dbg/jdi/rmi/jpda/JdiHooks.java"},"region":{"startLine":69}}}],"partialFingerprints":{"codehealthFindingId/v1":"e812877a080923525bba8eae3a9c331989cdda5887d5f8dcd52caddb86d19612"}},{"ruleId":"D2","level":"warning","message":{"text":"TenetPlusPlusLoader.loadTrace (cognitive 24): TenetPlusPlusLoader.loadTrace has cognitive complexity 24 (threshold 15). Drivers by points: if/else 21, error handling 2, loops 1 (nesting depth added 12). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/Debugger-importers/src/main/java/ghidra/app/util/opinion/TenetPlusPlusLoader.java"},"region":{"startLine":349}}}],"partialFingerprints":{"codehealthFindingId/v1":"fc085e3c7b8c566796236c6808897861772d31a54f5bfddf56d0cae96c8e6e37"}},{"ruleId":"D2","level":"warning","message":{"text":"AppConfig.getSaveFile (cognitive 23): AppConfig.getSaveFile has cognitive complexity 23 (threshold 15). Drivers by points: if/else 16, boolean chains 3, ternaries 2, loops 1, match/switch 1 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"GhidraBuild/LaunchSupport/src/main/java/ghidra/launch/AppConfig.java"},"region":{"startLine":392}}}],"partialFingerprints":{"codehealthFindingId/v1":"c0da5d94ffb7bdfb374f220a8787b5c4155aaaa09d574181ae21659a487073ba"}},{"ruleId":"D2","level":"warning","message":{"text":"JavaVersion.parseVersion (cognitive 23): JavaVersion.parseVersion has cognitive complexity 23 (threshold 15). Drivers by points: if/else 22, boolean chains 1 (nesting depth added 11). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"GhidraBuild/LaunchSupport/src/main/java/ghidra/launch/JavaVersion.java"},"region":{"startLine":159}}}],"partialFingerprints":{"codehealthFindingId/v1":"87f13be83fe90a2f47e579b0691c869bfa54e36d82a7a82b0e10a8c1220f4b9b"}},{"ruleId":"D2","level":"warning","message":{"text":"GhidraProjectCreatorPreferencePage.createContents (cognitive 23): GhidraProjectCreatorPreferencePage.createContents has cognitive complexity 23 (threshold 15). Drivers by points: if/else 13, ternaries 4, error handling 3, loops 3 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"GhidraBuild/EclipsePlugins/GhidraDev/GhidraDevPlugin/src/main/java/ghidradev/ghidraprojectcreator/preferences/GhidraProjectCreatorPreferencePage.java"},"region":{"startLine":67}}}],"partialFingerprints":{"codehealthFindingId/v1":"4d7c739f458e9ca04890f9e8ac2c50034a197082b74486754829460f8ee1e29a"}},{"ruleId":"D2","level":"warning","message":{"text":"PatternBlock.normalize (cognitive 23): PatternBlock.normalize has cognitive complexity 23 (threshold 15). Drivers by points: loops 12, if/else 10, boolean chains 1 (nesting depth added 10). To reduce it, break up the iteration: give each loop body a named function, and split a multi-phase loop into one function per phase so no single body carries the whole pipeline."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/processors/sleigh/pattern/PatternBlock.java"},"region":{"startLine":62}}}],"partialFingerprints":{"codehealthFindingId/v1":"65fd85593817b26774210f7dd037563a524ea2e5efcb529a0ffd48acea3b2c1c"}},{"ruleId":"D2","level":"warning","message":{"text":"SpecExtensionPanel.populateElementTable (cognitive 23): SpecExtensionPanel.populateElementTable has cognitive complexity 23 (threshold 15). Drivers by points: if/else 17, loops 3, ternaries 3 (nesting depth added 12). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/processors/sleigh/SpecExtensionPanel.java"},"region":{"startLine":288}}}],"partialFingerprints":{"codehealthFindingId/v1":"a38476b06050a2f85245e4736f392d948b9bf3855820395a3225abeb4dd4f2d2"}},{"ruleId":"D2","level":"warning","message":{"text":"SleighCompile.calcContextVarLayout (cognitive 23): SleighCompile.calcContextVarLayout has cognitive complexity 23 (threshold 15). Drivers by points: if/else 18, loops 5 (nesting depth added 12). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slgh_compile/SleighCompile.java"},"region":{"startLine":404}}}],"partialFingerprints":{"codehealthFindingId/v1":"a7f4e846b78ac98438d4faf994a295af6cd86e70cfbf0951a530e57f8d13bdbc"}},{"ruleId":"D2","level":"warning","message":{"text":"PatternBlock.normalize (cognitive 23): PatternBlock.normalize has cognitive complexity 23 (threshold 15). Drivers by points: loops 12, if/else 10, boolean chains 1 (nesting depth added 10). To reduce it, break up the iteration: give each loop body a named function, and split a multi-phase loop into one function per phase so no single body carries the whole pipeline."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghpattern/PatternBlock.java"},"region":{"startLine":55}}}],"partialFingerprints":{"codehealthFindingId/v1":"62835ff565945405c3528c10546c830bb5a66100f6c5154c1066ad384a9234af"}},{"ruleId":"D2","level":"warning","message":{"text":"FunctionStackFrame.createVariable (cognitive 23): FunctionStackFrame.createVariable has cognitive complexity 23 (threshold 15). Drivers by points: if/else 15, loops 6, boolean chains 2 (nesting depth added 11). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/function/FunctionStackFrame.java"},"region":{"startLine":81}}}],"partialFingerprints":{"codehealthFindingId/v1":"3a5d5e411d2d1e42456a3612f30bfa522a19ac46789cbf630d75dce3f45264d2"}},{"ruleId":"D2","level":"warning","message":{"text":"AddressMapDB.addNormalizedRange (cognitive 23): AddressMapDB.addNormalizedRange has cognitive complexity 23 (threshold 15). Drivers by points: if/else 10, ternaries 9, boolean chains 3, loops 1 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/map/AddressMapDB.java"},"region":{"startLine":887}}}],"partialFingerprints":{"codehealthFindingId/v1":"bfab393ef03c86014fecda80a51aadca6988f4cb4d38ec15559eff2498c60a70"}},{"ruleId":"D2","level":"warning","message":{"text":"Disassembler.disassembleNextInstructionSet (cognitive 23): Disassembler.disassembleNextInstructionSet has cognitive complexity 23 (threshold 15). Drivers by points: if/else 21, boolean chains 1, loops 1 (nesting depth added 11). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/disassemble/Disassembler.java"},"region":{"startLine":673}}}],"partialFingerprints":{"codehealthFindingId/v1":"b2b35dccd2833d8235eed9304fe67f389186d7ab81b6d12a50992033c75eb5af"}},{"ruleId":"D2","level":"warning","message":{"text":"PrimitiveExtractor.extract (cognitive 23): PrimitiveExtractor.extract has cognitive complexity 23 (threshold 15). Drivers by points: if/else 19, loops 3, match/switch 1 (nesting depth added 12). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/lang/protorules/PrimitiveExtractor.java"},"region":{"startLine":202}}}],"partialFingerprints":{"codehealthFindingId/v1":"e203ff56f4d0832658b0a0708797b8249f7125370607a3b630825cf3678dea04"}},{"ruleId":"D2","level":"warning","message":{"text":"Record.encode (cognitive 23): Record.encode has cognitive complexity 23 (threshold 15). Drivers by points: if/else 15, ternaries 6, loops 2 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/lang/ConstantPool.java"},"region":{"startLine":50}}}],"partialFingerprints":{"codehealthFindingId/v1":"7f0f360cdf68f2985fa817e521a5a4d6a973f2faa9c76d1b12410cbffd28c123"}},{"ruleId":"D2","level":"warning","message":{"text":"OperandType.toString (cognitive 23): OperandType.toString has cognitive complexity 23 (threshold 15). Drivers by points: if/else 23. To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/lang/OperandType.java"},"region":{"startLine":368}}}],"partialFingerprints":{"codehealthFindingId/v1":"7c749136fa59e304907f87c6468f9ca4d51ac42510b7c681121507af55738b94"}},{"ruleId":"D2","level":"warning","message":{"text":"PcodeDataTypeManager.encodePointer (cognitive 23): PcodeDataTypeManager.encodePointer has cognitive complexity 23 (threshold 15). Drivers by points: if/else 18, boolean chains 5 (nesting depth added 2). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/pcode/PcodeDataTypeManager.java"},"region":{"startLine":371}}}],"partialFingerprints":{"codehealthFindingId/v1":"23fff95fcdbb610c8ac87954e8bb4e112184a5b761f93ecfc257b3d0db863005"}},{"ruleId":"D2","level":"warning","message":{"text":"RefTypeFactory.getDefaultFlowType (cognitive 23): RefTypeFactory.getDefaultFlowType has cognitive complexity 23 (threshold 15). Drivers by points: if/else 15, boolean chains 7, loops 1 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/symbol/RefTypeFactory.java"},"region":{"startLine":299}}}],"partialFingerprints":{"codehealthFindingId/v1":"30db0fbf38655d08a957bce806f0e9dab961a06feda9cd03e04fdfe4160d36da"}},{"ruleId":"D2","level":"warning","message":{"text":"SimpleDiffUtility.expandAddressSetToIncludeFullDelaySlots (cognitive 23): SimpleDiffUtility.expandAddressSetToIncludeFullDelaySlots has cognitive complexity 23 (threshold 15). Drivers by points: if/else 18, boolean chains 3, loops 1, ternaries 1 (nesting depth added 12). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/util/SimpleDiffUtility.java"},"region":{"startLine":158}}}],"partialFingerprints":{"codehealthFindingId/v1":"ed8e1c8691ed9c4ae1fcc7ef9437bae47600873a61643dc52bf57aa784e1c328"}},{"ruleId":"D2","level":"warning","message":{"text":"BaseRecognizerOverride.getErrorMessage (cognitive 23): BaseRecognizerOverride.getErrorMessage has cognitive complexity 23 (threshold 15). Drivers by points: if/else 22, error handling 1 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/sleigh/grammar/BaseRecognizerOverride.java"},"region":{"startLine":35}}}],"partialFingerprints":{"codehealthFindingId/v1":"c574c6dc3202cfa70ee3a69d4e1ef0a320d1be9b91d38e492487bd4a6a697952"}},{"ruleId":"D2","level":"warning","message":{"text":"LinkedTreeNode.updateLinkedContent (cognitive 23): LinkedTreeNode.updateLinkedContent has cognitive complexity 23 (threshold 15). Drivers by points: if/else 19, loops 3, boolean chains 1 (nesting depth added 11). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Project/src/main/java/ghidra/framework/main/datatree/ChangeManager.java"},"region":{"startLine":618}}}],"partialFingerprints":{"codehealthFindingId/v1":"f099685707b5788537100f6b4298bd5d0138a68552c1ddb6cef382f265f39d6d"}},{"ruleId":"D2","level":"warning","message":{"text":"FVTable.restoreSelection (cognitive 23): FVTable.restoreSelection has cognitive complexity 23 (threshold 15). Drivers by points: if/else 18, boolean chains 5 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Project/src/main/java/ghidra/framework/main/logviewer/ui/FVTable.java"},"region":{"startLine":179}}}],"partialFingerprints":{"codehealthFindingId/v1":"a9d12010ea834393d6f30906a8c4e56721a993f0f31f111c5a9f41f10de3fc5e"}},{"ruleId":"D2","level":"warning","message":{"text":"FrontEndPlugin.openDomainFile (cognitive 23): FrontEndPlugin.openDomainFile has cognitive complexity 23 (threshold 15). Drivers by points: if/else 18, boolean chains 3, error handling 2 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Project/src/main/java/ghidra/framework/main/FrontEndPlugin.java"},"region":{"startLine":1107}}}],"partialFingerprints":{"codehealthFindingId/v1":"7b637da17a7b9ac2d2b4de3cdd4a1af46279d7825e0b651205f5a40c43cdaf77"}},{"ruleId":"D2","level":"warning","message":{"text":"TOCItem.equals (cognitive 23): TOCItem.equals has cognitive complexity 23 (threshold 15). Drivers by points: if/else 23 (nesting depth added 5). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Help/src/main/java/help/validator/model/TOCItem.java"},"region":{"startLine":160}}}],"partialFingerprints":{"codehealthFindingId/v1":"6a4a741bc135cc87204b63deb145fc8077f0838779a015e01c162d1b32de0716"}},{"ruleId":"D2","level":"warning","message":{"text":"WordDiffer.getMergedParts (cognitive 23): WordDiffer.getMergedParts has cognitive complexity 23 (threshold 15). Drivers by points: if/else 16, ternaries 6, loops 1 (nesting depth added 13). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Generic/src/main/java/generic/algorithms/WordDiffer.java"},"region":{"startLine":67}}}],"partialFingerprints":{"codehealthFindingId/v1":"c530b124203176cb5b84f522ffa63832d2270243c91c49305e6ffc5d4c19f2cf"}},{"ruleId":"D2","level":"warning","message":{"text":"RedBlackTree.deleteEntry (cognitive 23): RedBlackTree.deleteEntry has cognitive complexity 23 (threshold 15). Drivers by points: if/else 21, boolean chains 1, ternaries 1 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Generic/src/main/java/generic/stl/RedBlackTree.java"},"region":{"startLine":442}}}],"partialFingerprints":{"codehealthFindingId/v1":"774c86bcb3c63d91f560e66cb9cdbf4e6f4c3092bdf7a2cdeb6bb9ede497be54"}},{"ruleId":"D2","level":"warning","message":{"text":"Node.remove (cognitive 23): Node.remove has cognitive complexity 23 (threshold 15). Drivers by points: if/else 21, boolean chains 1, loops 1 (nesting depth added 4). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition, and where an else follows a branch that already returns, drop the trailing else and let the rest of the body continue at one level."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Generic/src/main/java/ghidra/generic/util/datastruct/TreeValueSortedMap.java"},"region":{"startLine":398}}}],"partialFingerprints":{"codehealthFindingId/v1":"a3b069ee99bfcd4e02c941fe9dc7a82a0ed57937d775f5193b817f33003a86fd"}},{"ruleId":"D2","level":"warning","message":{"text":"RedBlackTree.getOrCreateEntry (cognitive 23): RedBlackTree.getOrCreateEntry has cognitive complexity 23 (threshold 15). Drivers by points: if/else 22, loops 1 (nesting depth added 12). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Generic/src/main/java/ghidra/util/datastruct/RedBlackTree.java"},"region":{"startLine":139}}}],"partialFingerprints":{"codehealthFindingId/v1":"cd05eebe5a30e99d08f90aee2b2056cb3a0f7ca6a0b2460e6d1227eec53aaa35"}},{"ruleId":"D2","level":"warning","message":{"text":"NumericUtilities.convertMaskToHexString (cognitive 23): NumericUtilities.convertMaskToHexString has cognitive complexity 23 (threshold 15). Drivers by points: if/else 16, loops 5, boolean chains 2 (nesting depth added 11). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Generic/src/main/java/ghidra/util/NumericUtilities.java"},"region":{"startLine":512}}}],"partialFingerprints":{"codehealthFindingId/v1":"8f7b6c03fd1f1159c198ec776648feaaae9d1c10971e3b305f8ebfa7c35460ac"}},{"ruleId":"D2","level":"warning","message":{"text":"AbstractDockingTest.findButtonByActionName (cognitive 23): AbstractDockingTest.findButtonByActionName has cognitive complexity 23 (threshold 15). Drivers by points: if/else 21, boolean chains 1, loops 1 (nesting depth added 14). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Docking/src/main/java/docking/test/AbstractDockingTest.java"},"region":{"startLine":1469}}}],"partialFingerprints":{"codehealthFindingId/v1":"671d6585efccdff8f70fc4e24406fcf1396c4207f3594c6a58013b13087d5624"}},{"ruleId":"D2","level":"warning","message":{"text":"BufferMgr.takeRecoverySnapshot (cognitive 23): BufferMgr.takeRecoverySnapshot has cognitive complexity 23 (threshold 15). Drivers by points: if/else 21, boolean chains 1, loops 1 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/DB/src/main/java/db/buffers/BufferMgr.java"},"region":{"startLine":1479}}}],"partialFingerprints":{"codehealthFindingId/v1":"e0fea694438892185b23485d2e1a3fbff9b630fb67cf8b9d7860f70dfb8cbf5a"}},{"ruleId":"D2","level":"warning","message":{"text":"BSimProgramCorrelatorMatching.findAcceptedSeeds (cognitive 23): BSimProgramCorrelatorMatching.findAcceptedSeeds has cognitive complexity 23 (threshold 15). Drivers by points: if/else 20, boolean chains 2, loops 1 (nesting depth added 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/VersionTrackingBSim/src/main/java/ghidra/feature/vt/api/BSimProgramCorrelatorMatching.java"},"region":{"startLine":558}}}],"partialFingerprints":{"codehealthFindingId/v1":"a502672882dd7c97a62ad1ccc55cde84b2ebe0783a84ba7a5be93703469fe263"}},{"ruleId":"D2","level":"warning","message":{"text":"SwiftFunctionTypeNode.demangle (cognitive 23): SwiftFunctionTypeNode.demangle has cognitive complexity 23 (threshold 15). Drivers by points: if/else 19, match/switch 2, boolean chains 1, loops 1 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/Swift/src/main/java/ghidra/app/util/demangler/swift/nodes/SwiftFunctionTypeNode.java"},"region":{"startLine":30}}}],"partialFingerprints":{"codehealthFindingId/v1":"4556c70e6c71e2695490e2184cf0a62045a604bc6cabe29cd5ee5eac18735e5a"}},{"ruleId":"D2","level":"warning","message":{"text":"DefaultPdbApplicator.processLinkerModuleSpecialInformation (cognitive 23): DefaultPdbApplicator.processLinkerModuleSpecialInformation has cognitive complexity 23 (threshold 15). Drivers by points: if/else 20, loops 2, boolean chains 1 (nesting depth added 13). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/PDB/src/main/java/ghidra/app/util/pdb/pdbapplicator/DefaultPdbApplicator.java"},"region":{"startLine":2086}}}],"partialFingerprints":{"codehealthFindingId/v1":"ee923d6f3bde81a65b04241317bcc8bf623822eaa0b68b6b231b568f18cf78ee"}},{"ruleId":"D2","level":"warning","message":{"text":"MDTypeInfoParser.parse (cognitive 23): MDTypeInfoParser.parse has cognitive complexity 23 (threshold 15). Drivers by points: ternaries 12, if/else 7, match/switch 3, boolean chains 1 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/MicrosoftDmang/src/main/java/mdemangler/typeinfo/MDTypeInfoParser.java"},"region":{"startLine":45}}}],"partialFingerprints":{"codehealthFindingId/v1":"0328f7cf8ee8f3d8da53f3d3dc03f0ef85569ad6f8e9175b901e0a202bb0a57d"}},{"ruleId":"D2","level":"warning","message":{"text":"MicrosoftDemanglerUtil.processFunction (cognitive 23): MicrosoftDemanglerUtil.processFunction has cognitive complexity 23 (threshold 15). Drivers by points: if/else 18, boolean chains 3, loops 2 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/MicrosoftDemangler/src/main/java/ghidra/app/util/demangler/microsoft/MicrosoftDemanglerUtil.java"},"region":{"startLine":437}}}],"partialFingerprints":{"codehealthFindingId/v1":"fd214b184e7feab2193b14415dfb9bbd71fb25643a29c94c90573af01d29f51c"}},{"ruleId":"D2","level":"warning","message":{"text":"RepositoryFile.delete (cognitive 23): RepositoryFile.delete has cognitive complexity 23 (threshold 15). Drivers by points: if/else 20, loops 3 (nesting depth added 13). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/GhidraServer/src/main/java/ghidra/server/store/RepositoryFile.java"},"region":{"startLine":252}}}],"partialFingerprints":{"codehealthFindingId/v1":"6bbeb85bd492f02aaaf581871cd4a4992af542ac71a4495bc27d3f5b6a1c8f7f"}},{"ruleId":"D2","level":"warning","message":{"text":"ServerAdmin.getPassword (cognitive 23): ServerAdmin.getPassword has cognitive complexity 23 (threshold 15). Drivers by points: if/else 15, loops 6, boolean chains 2 (nesting depth added 11). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/GhidraServer/src/main/java/ghidra/server/ServerAdmin.java"},"region":{"startLine":288}}}],"partialFingerprints":{"codehealthFindingId/v1":"a285850ce729e4a5031ad44569d04e55357d95a1454f24fe70fc81d48d6d141e"}},{"ruleId":"D2","level":"warning","message":{"text":"OrthogonalEdgeRouter.findRoutingColumn (cognitive 23): OrthogonalEdgeRouter.findRoutingColumn has cognitive complexity 23 (threshold 15). Drivers by points: if/else 15, loops 3, ternaries 3, boolean chains 2 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/FunctionGraph/src/main/java/ghidra/app/plugin/core/functiongraph/graph/layout/flowchart/OrthogonalEdgeRouter.java"},"region":{"startLine":85}}}],"partialFingerprints":{"codehealthFindingId/v1":"118b01b0d5cabf059276b9543e302c9ffef55dcc5a97566fdfb75a1a4ea8a8c7"}},{"ruleId":"D2","level":"warning","message":{"text":"DexMarkupSwitchTableAnalyzer.analyze (cognitive 23): DexMarkupSwitchTableAnalyzer.analyze has cognitive complexity 23 (threshold 15). Drivers by points: if/else 19, error handling 2, loops 1, ternaries 1 (nesting depth added 12). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/android/dex/analyzer/DexMarkupSwitchTableAnalyzer.java"},"region":{"startLine":39}}}],"partialFingerprints":{"codehealthFindingId/v1":"51c9b874692a629eaad5f9536d262e21644229c6f242e11eda96d47116c0fbed"}},{"ruleId":"D2","level":"warning","message":{"text":"CTADLTaintState.writeRule (cognitive 23): CTADLTaintState.writeRule has cognitive complexity 23 (threshold 15). Drivers by points: if/else 19, boolean chains 3, ternaries 1 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/DecompilerDependent/src/main/java/ghidra/app/plugin/core/decompiler/taint/ctadl/CTADLTaintState.java"},"region":{"startLine":114}}}],"partialFingerprints":{"codehealthFindingId/v1":"02546c3d5eba949f4958e2e2486e8e8ae85f075ac868ec34adb9b6d318f955e8"}},{"ruleId":"D2","level":"warning","message":{"text":"FormatStringParser.searchWithNullModifier (cognitive 23): FormatStringParser.searchWithNullModifier has cognitive complexity 23 (threshold 15). Drivers by points: if/else 19, boolean chains 4 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/DecompilerDependent/src/main/java/ghidra/app/plugin/core/string/variadic/FormatStringParser.java"},"region":{"startLine":385}}}],"partialFingerprints":{"codehealthFindingId/v1":"ae71ebc116faff273e778510d6461a0a3415658dc73e401f4fd604f3d29b3b51"}},{"ruleId":"D2","level":"warning","message":{"text":"Pinning.breakTieWithCtrlFlow (cognitive 23): Pinning.breakTieWithCtrlFlow has cognitive complexity 23 (threshold 15). Drivers by points: if/else 14, loops 6, ternaries 2, boolean chains 1 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/CodeCompare/src/main/java/ghidra/features/codecompare/graphanalysis/Pinning.java"},"region":{"startLine":292}}}],"partialFingerprints":{"codehealthFindingId/v1":"9a2ae2341fdf30b218e48780d008a0ac9534607d540e66ef895468c1d43fa226"}},{"ruleId":"D2","level":"warning","message":{"text":"Pinning.pinAssociates (cognitive 23): Pinning.pinAssociates has cognitive complexity 23 (threshold 15). Drivers by points: if/else 15, loops 6, boolean chains 2 (nesting depth added 12). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/CodeCompare/src/main/java/ghidra/features/codecompare/graphanalysis/Pinning.java"},"region":{"startLine":226}}}],"partialFingerprints":{"codehealthFindingId/v1":"4acbdb6ecdcc4039630876ea335af677cdba50e40cecaa13c14fa462655c3bd3"}},{"ruleId":"D2","level":"warning","message":{"text":"FunctionStartAction.applyActionToSet (cognitive 23): FunctionStartAction.applyActionToSet has cognitive complexity 23 (threshold 15). Drivers by points: if/else 20, boolean chains 3 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/BytePatterns/src/main/java/ghidra/app/analyzers/FunctionStartAnalyzer.java"},"region":{"startLine":289}}}],"partialFingerprints":{"codehealthFindingId/v1":"bbe529c614da7f1bdfaadcf5af8df12e16cf3ee6e61fdaef9faf8af2052f214f"}},{"ruleId":"D2","level":"warning","message":{"text":"FunctionBitPatternInfo.getInstructionsAgainstFlow (cognitive 23): FunctionBitPatternInfo.getInstructionsAgainstFlow has cognitive complexity 23 (threshold 15). Drivers by points: if/else 15, loops 5, error handling 3 (nesting depth added 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/BytePatterns/src/main/java/ghidra/bitpatterns/info/FunctionBitPatternInfo.java"},"region":{"startLine":224}}}],"partialFingerprints":{"codehealthFindingId/v1":"6cf7ddc77a20efe2b2fe717ee68344f1de4d33883cb5fb75a13f213cb2439ee8"}},{"ruleId":"D2","level":"warning","message":{"text":"PcodeCodeMemberVisitor.processWorkItem (cognitive 23): PcodeCodeMemberVisitor.processWorkItem has cognitive complexity 23 (threshold 15). Drivers by points: if/else 21, boolean chains 1, loops 1 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Extensions/Lisa/src/main/java/ghidra/lisa/pcode/PcodeCodeMemberVisitor.java"},"region":{"startLine":167}}}],"partialFingerprints":{"codehealthFindingId/v1":"9e332cc52b57772d7b18def1a691e855d5329b29fa9b69c2c266708675a5ef9b"}},{"ruleId":"D2","level":"warning","message":{"text":"TraceMethod.validateArguments (cognitive 23): TraceMethod.validateArguments has cognitive complexity 23 (threshold 15). Drivers by points: if/else 19, boolean chains 3, loops 1 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/model/target/iface/TraceMethod.java"},"region":{"startLine":561}}}],"partialFingerprints":{"codehealthFindingId/v1":"54c860328b914dd1db6e950bb3edd63f2a829cc80d8e5157c3066f32626da891"}},{"ruleId":"D2","level":"warning","message":{"text":"OverlappingObjectIterator.seekNext (cognitive 23): OverlappingObjectIterator.seekNext has cognitive complexity 23 (threshold 15). Drivers by points: if/else 22, loops 1 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/util/OverlappingObjectIterator.java"},"region":{"startLine":134}}}],"partialFingerprints":{"codehealthFindingId/v1":"2d620051dbce02f9ca7e4b3c5560683a08a164fab00777bb50d8acd8ac135b81"}},{"ruleId":"D2","level":"warning","message":{"text":"FridaDebuggerPlatformOpinion.getOffers (cognitive 23): FridaDebuggerPlatformOpinion.getOffers has cognitive complexity 23 (threshold 15). Drivers by points: if/else 18, boolean chains 5 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/platform/frida/FridaDebuggerPlatformOpinion.java"},"region":{"startLine":91}}}],"partialFingerprints":{"codehealthFindingId/v1":"28052e093ac96b66a66764edc5470a249d1b0483cccba546cbf9ddd052aa93de"}},{"ruleId":"D2","level":"warning","message":{"text":"LldbDebuggerPlatformOpinion.getOffers (cognitive 23): LldbDebuggerPlatformOpinion.getOffers has cognitive complexity 23 (threshold 15). Drivers by points: if/else 18, boolean chains 5 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/platform/lldb/LldbDebuggerPlatformOpinion.java"},"region":{"startLine":91}}}],"partialFingerprints":{"codehealthFindingId/v1":"620da1280ffe963c084b75a57197e0b41d11d07d12be3a839eb542d7c77a9dfe"}},{"ruleId":"D2","level":"warning","message":{"text":"LaunchSupport.askJavaHome (cognitive 22): LaunchSupport.askJavaHome has cognitive complexity 22 (threshold 15). Drivers by points: if/else 12, error handling 4, ternaries 3, boolean chains 2, loops 1 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"GhidraBuild/LaunchSupport/src/main/java/LaunchSupport.java"},"region":{"startLine":270}}}],"partialFingerprints":{"codehealthFindingId/v1":"19e22e035051b8b8a7af2fbe197a2f86314b035e6c4b22658536a78dd327403d"}},{"ruleId":"D2","level":"warning","message":{"text":"1SwitchEvaluator.evaluateContext (cognitive 22): 1SwitchEvaluator.evaluateContext has cognitive complexity 22 (threshold 15). Drivers by points: if/else 21, boolean chains 1 (nesting depth added 14). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Processors/68000/src/main/java/ghidra/app/plugin/core/analysis/Motorola68KAnalyzer.java"},"region":{"startLine":207}}}],"partialFingerprints":{"codehealthFindingId/v1":"4af6e74ccfcc83b95b7577dea01a31b22d14155c50f284c7ae3d3c15f3f604a7"}},{"ruleId":"D2","level":"warning","message":{"text":"AppCleaner.launch (cognitive 22): AppCleaner.launch has cognitive complexity 22 (threshold 15). Drivers by points: if/else 13, loops 3, ternaries 3, error handling 2, match/switch 1 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Utility/src/main/java/utility/application/AppCleaner.java"},"region":{"startLine":46}}}],"partialFingerprints":{"codehealthFindingId/v1":"bf22d8fbcf35ac97444ea9c2e4e3206991d67e3de1ca3fba4a60fe4edb35bf73"}},{"ruleId":"D2","level":"warning","message":{"text":"DataTypeArchiveTransformer.getMatchingDataType (cognitive 22): DataTypeArchiveTransformer.getMatchingDataType has cognitive complexity 22 (threshold 15). Drivers by points: if/else 17, loops 3, boolean chains 2 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/DataTypeArchiveTransformer.java"},"region":{"startLine":592}}}],"partialFingerprints":{"codehealthFindingId/v1":"9688ffbaca8afe53b876c951a4da0f922524b64b90e92386c19524ec0cd671bb"}},{"ruleId":"D2","level":"warning","message":{"text":"AddressSet.add (cognitive 22): AddressSet.add has cognitive complexity 22 (threshold 15). Drivers by points: if/else 18, boolean chains 4 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/address/AddressSet.java"},"region":{"startLine":121}}}],"partialFingerprints":{"codehealthFindingId/v1":"7e73b9a34daea303eb38f36b0a897b0a14e4a82eb2e259c6fd087b5371da6bc3"}},{"ruleId":"D2","level":"warning","message":{"text":"MultEntSubModel.getAddressSetContaining (cognitive 22): MultEntSubModel.getAddressSetContaining has cognitive complexity 22 (threshold 15). Drivers by points: if/else 15, loops 4, boolean chains 3 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/block/MultEntSubModel.java"},"region":{"startLine":113}}}],"partialFingerprints":{"codehealthFindingId/v1":"3380dc7e7eadbd8ad6a7a99121e8d3006380485ef8a69205c7cb9f27a3c9d192"}},{"ruleId":"D2","level":"warning","message":{"text":"DataOrganization.isEquivalent (cognitive 22): DataOrganization.isEquivalent has cognitive complexity 22 (threshold 15). Drivers by points: if/else 16, boolean chains 5, loops 1 (nesting depth added 1). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/DataOrganization.java"},"region":{"startLine":174}}}],"partialFingerprints":{"codehealthFindingId/v1":"ee2669dd03cc992412af1e0b13349a9130c2a8d923b5c9db6acb7a8e9618ea08"}},{"ruleId":"D2","level":"warning","message":{"text":"StandAloneDataTypeManager.initializeOtherAdapters (cognitive 22): StandAloneDataTypeManager.initializeOtherAdapters has cognitive complexity 22 (threshold 15). Drivers by points: if/else 16, error handling 5, boolean chains 1 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/StandAloneDataTypeManager.java"},"region":{"startLine":327}}}],"partialFingerprints":{"codehealthFindingId/v1":"b8bd3d5f6cac0f870e247ad6eaa2e8ef983fe9c9ceb8390e14de318069197df8"}},{"ruleId":"D2","level":"warning","message":{"text":"ParamEntry.getJoinPieces (cognitive 22): ParamEntry.getJoinPieces has cognitive complexity 22 (threshold 15). Drivers by points: if/else 16, loops 5, boolean chains 1 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/lang/ParamEntry.java"},"region":{"startLine":125}}}],"partialFingerprints":{"codehealthFindingId/v1":"b1178068e2aa89ee747477f176d7e54a87d4c03499ad2b05975fe2c1ac17ea9f"}},{"ruleId":"D2","level":"warning","message":{"text":"PcodeDataTypeManager.getMetatype (cognitive 22): PcodeDataTypeManager.getMetatype has cognitive complexity 22 (threshold 15). Drivers by points: if/else 21, match/switch 1 (nesting depth added 9). The drivers above price the dispatch low by construction \u2014 a dispatch is charged once however many cases it lists, while each branch inside an arm is charged in full \u2014 so most of this count is what the case bodies hold, and the arms are where it can be reduced. To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/pcode/PcodeDataTypeManager.java"},"region":{"startLine":1352}}}],"partialFingerprints":{"codehealthFindingId/v1":"1a325b6348fa81dc1dbb2585d4436bde1d66c537031d133ef02c0fdb723ae21c"}},{"ruleId":"D2","level":"warning","message":{"text":"DefComparator.compare (cognitive 22): DefComparator.compare has cognitive complexity 22 (threshold 15). Drivers by points: if/else 18, ternaries 4 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/pcode/VarnodeBank.java"},"region":{"startLine":82}}}],"partialFingerprints":{"codehealthFindingId/v1":"aa3b6fd13dc686f8c3fce52a728cb84cb40d6ed943cabd6e8952ab1aa51817c5"}},{"ruleId":"D2","level":"warning","message":{"text":"GhidraFolderData.refreshFiles (cognitive 22): GhidraFolderData.refreshFiles has cognitive complexity 22 (threshold 15). Drivers by points: if/else 12, error handling 4, loops 4, boolean chains 2 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Project/src/main/java/ghidra/framework/data/GhidraFolderData.java"},"region":{"startLine":689}}}],"partialFingerprints":{"codehealthFindingId/v1":"ce374488a557e8940ce81ac48534f02d01de4a631818d4a7ed0442ed5e85d2dc"}},{"ruleId":"D2","level":"warning","message":{"text":"ToolServicesImpl.getCompatibleTools (cognitive 22): ToolServicesImpl.getCompatibleTools has cognitive complexity 22 (threshold 15). Drivers by points: if/else 15, loops 6, error handling 1 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Project/src/main/java/ghidra/framework/project/tool/ToolServicesImpl.java"},"region":{"startLine":381}}}],"partialFingerprints":{"codehealthFindingId/v1":"68909f8085a14eceea695b79b0e43d03dab611ad985f692fed8c1acae15e075d"}},{"ruleId":"D2","level":"warning","message":{"text":"DefaultProject.restore (cognitive 22): DefaultProject.restore has cognitive complexity 22 (threshold 15). Drivers by points: loops 8, error handling 7, if/else 7 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Project/src/main/java/ghidra/framework/project/DefaultProject.java"},"region":{"startLine":435}}}],"partialFingerprints":{"codehealthFindingId/v1":"1349c3a69c93d5d7faaec6207c055eb64845d7fa982671f15845ab2bc5db8f55"}},{"ruleId":"D2","level":"warning","message":{"text":"LongExpressionValue.applyBinaryOperator (cognitive 22): LongExpressionValue.applyBinaryOperator has cognitive complexity 22 (threshold 15). Drivers by points: ternaries 20, if/else 1, match/switch 1 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Generic/src/main/java/generic/expressions/LongExpressionValue.java"},"region":{"startLine":57}}}],"partialFingerprints":{"codehealthFindingId/v1":"33f424f9cab3df9631fc0de3f1d43c5472da5d57797c17ab45324a4be51a2c93"}},{"ruleId":"D2","level":"warning","message":{"text":"FileChooserPanel.createFileChooser (cognitive 22): FileChooserPanel.createFileChooser has cognitive complexity 22 (threshold 15). Drivers by points: if/else 22 (nesting depth added 11). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Docking/src/main/java/docking/options/editor/FileChooserEditor.java"},"region":{"startLine":167}}}],"partialFingerprints":{"codehealthFindingId/v1":"fc80410eb4e66b80883a386d38a32457373175479b89f606ec26c22d18ddbff3"}},{"ruleId":"D2","level":"warning","message":{"text":"PopupWindowPlacerBuilder.edge (cognitive 22): PopupWindowPlacerBuilder.edge has cognitive complexity 22 (threshold 15). Drivers by points: if/else 18, loops 4 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Docking/src/main/java/docking/widgets/shapes/PopupWindowPlacerBuilder.java"},"region":{"startLine":280}}}],"partialFingerprints":{"codehealthFindingId/v1":"d9ebd4b8465e6e70b79e0179e94ab6dcbf15296b5171778d7eee1a12051bdd67"}},{"ruleId":"D2","level":"warning","message":{"text":"DefaultCompositeMember.addStructureMember (cognitive 22): DefaultCompositeMember.addStructureMember has cognitive complexity 22 (threshold 15). Drivers by points: if/else 21, error handling 1 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/PDB/src/main/java/ghidra/app/util/bin/format/pdb/DefaultCompositeMember.java"},"region":{"startLine":991}}}],"partialFingerprints":{"codehealthFindingId/v1":"e90621974ab1fd7f71bcf4d5af7ad8e8dac064f8e19a1bc393c88beda6443bad"}},{"ruleId":"D2","level":"warning","message":{"text":"CppCompositeType.findVirtualBaseVxtPtrs (cognitive 22): CppCompositeType.findVirtualBaseVxtPtrs has cognitive complexity 22 (threshold 15). Drivers by points: loops 22 (nesting depth added 10). To reduce it, break up the iteration: give each loop body a named function, and split a multi-phase loop into one function per phase so no single body carries the whole pipeline."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/PDB/src/main/java/ghidra/app/util/pdb/pdbapplicator/CppCompositeType.java"},"region":{"startLine":1593}}}],"partialFingerprints":{"codehealthFindingId/v1":"34cb3599ea4a5e60eef7e447dd00263c6c894640ad5a17f425a869bd1465f50a"}},{"ruleId":"D2","level":"warning","message":{"text":"EHFunctionInfoModel.doGetDataType (cognitive 22): EHFunctionInfoModel.doGetDataType has cognitive complexity 22 (threshold 15). Drivers by points: if/else 21, boolean chains 1 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/MicrosoftCodeAnalyzer/src/main/java/ghidra/app/cmd/data/exceptionhandling/EHFunctionInfoModel.java"},"region":{"startLine":292}}}],"partialFingerprints":{"codehealthFindingId/v1":"3499782bddcb76afb6ae186a792ad26db849836ce9202b522d446fef0e770b78"}},{"ruleId":"D2","level":"warning","message":{"text":"RttiUtil.getVfTableCount (cognitive 22): RttiUtil.getVfTableCount has cognitive complexity 22 (threshold 15). Drivers by points: if/else 15, boolean chains 6, loops 1 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/MicrosoftCodeAnalyzer/src/main/java/ghidra/app/cmd/data/rtti/RttiUtil.java"},"region":{"startLine":218}}}],"partialFingerprints":{"codehealthFindingId/v1":"c1d1a75b8f22bf1bb05d4735f697af2a274936475a61cec68a1460da234c8366"}},{"ruleId":"D2","level":"warning","message":{"text":"OatDexFileUtilities.markupMethod (cognitive 22): OatDexFileUtilities.markupMethod has cognitive complexity 22 (threshold 15). Drivers by points: if/else 17, loops 5 (nesting depth added 12). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/android/oat/oatdexfile/OatDexFileUtilities.java"},"region":{"startLine":107}}}],"partialFingerprints":{"codehealthFindingId/v1":"c88f48f55ac0383b43a82cc3bde2796679b1ba3629a7e61062dcdffcd0c3dd29"}},{"ruleId":"D2","level":"warning","message":{"text":"iOS_KextStubFixupAnalyzer.recurseFolder (cognitive 22): iOS_KextStubFixupAnalyzer.recurseFolder has cognitive complexity 22 (threshold 15). Drivers by points: if/else 15, ternaries 3, error handling 2, loops 2 (nesting depth added 11). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/ios/generic/iOS_KextStubFixupAnalyzer.java"},"region":{"startLine":297}}}],"partialFingerprints":{"codehealthFindingId/v1":"062f4aceab1216aa93199fec0258628ae7e837d8cbee742320233e14da525afc"}},{"ruleId":"D2","level":"warning","message":{"text":"LzssCodec.decompress (cognitive 22): LzssCodec.decompress has cognitive complexity 22 (threshold 15). Drivers by points: if/else 17, loops 5 (nesting depth added 12). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/lzss/LzssCodec.java"},"region":{"startLine":187}}}],"partialFingerprints":{"codehealthFindingId/v1":"586e4f915bbf5dcc2d90f626e2c67082b96a12ad939d23e1b1974bfef1267687"}},{"ruleId":"D2","level":"warning","message":{"text":"FormatStringParser.handleOutputConversionArgument (cognitive 22): FormatStringParser.handleOutputConversionArgument has cognitive complexity 22 (threshold 15). Drivers by points: if/else 18, boolean chains 4 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/DecompilerDependent/src/main/java/ghidra/app/plugin/core/string/variadic/FormatStringParser.java"},"region":{"startLine":218}}}],"partialFingerprints":{"codehealthFindingId/v1":"b430d60252059599db2d91ca27c427a8a8c72b90e1b654b4d887c41ab4e5b0da"}},{"ruleId":"D2","level":"warning","message":{"text":"FunctionStartAction.checkPreRequisites (cognitive 22): FunctionStartAction.checkPreRequisites has cognitive complexity 22 (threshold 15). Drivers by points: if/else 22 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/BytePatterns/src/main/java/ghidra/app/analyzers/FunctionStartAnalyzer.java"},"region":{"startLine":223}}}],"partialFingerprints":{"codehealthFindingId/v1":"15828eb5c8d7a6de31ef75906ee7cd069bf0836cafecd9f6c6ae9e38564958b8"}},{"ruleId":"D2","level":"warning","message":{"text":"ClipboardPanel.getMatchType (cognitive 22): ClipboardPanel.getMatchType has cognitive complexity 22 (threshold 15). Drivers by points: if/else 17, loops 3, error handling 2 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/BytePatterns/src/main/java/ghidra/bitpatterns/gui/ClipboardPanel.java"},"region":{"startLine":317}}}],"partialFingerprints":{"codehealthFindingId/v1":"d1d28b08ea133b99094c0c6e4feeab6ea90f813f9890d359d20bf44477d66793"}},{"ruleId":"D2","level":"warning","message":{"text":"AbstractSQLFunctionDatabase.doQuery (cognitive 22): AbstractSQLFunctionDatabase.doQuery has cognitive complexity 22 (threshold 15). Drivers by points: if/else 22. To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/BSim/src/main/java/ghidra/features/bsim/query/client/AbstractSQLFunctionDatabase.java"},"region":{"startLine":1558}}}],"partialFingerprints":{"codehealthFindingId/v1":"1d9ffd84694d7929ca93a4874c076d6cce38e3cd2d9fff1d4a5b43dccd03b74f"}},{"ruleId":"D2","level":"warning","message":{"text":"AbstractSQLFunctionDatabase.fdbQueryVectorMatch (cognitive 22): AbstractSQLFunctionDatabase.fdbQueryVectorMatch has cognitive complexity 22 (threshold 15). Drivers by points: if/else 17, loops 4, boolean chains 1 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/BSim/src/main/java/ghidra/features/bsim/query/client/AbstractSQLFunctionDatabase.java"},"region":{"startLine":1812}}}],"partialFingerprints":{"codehealthFindingId/v1":"0f369874a8ec01db01472f72df09451769f7c499c2f88811350f2a90841d5b76"}},{"ruleId":"D2","level":"warning","message":{"text":"ElasticDatabase.insertVectorRange (cognitive 22): ElasticDatabase.insertVectorRange has cognitive complexity 22 (threshold 15). Drivers by points: if/else 19, loops 3 (nesting depth added 13). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/BSim/src/main/java/ghidra/features/bsim/query/elastic/ElasticDatabase.java"},"region":{"startLine":1735}}}],"partialFingerprints":{"codehealthFindingId/v1":"606ebd925b59fd3adc980b88e77c7225acac528947c22a4fa1c24fb77d7896bb"}},{"ruleId":"D2","level":"warning","message":{"text":"TaintVec.setShifted (cognitive 22): TaintVec.setShifted has cognitive complexity 22 (threshold 15). Drivers by points: if/else 9, ternaries 6, loops 4, boolean chains 3 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/TaintAnalysis/src/main/java/ghidra/taint/model/TaintVec.java"},"region":{"startLine":487}}}],"partialFingerprints":{"codehealthFindingId/v1":"231850e721cab075da86ff51f3f2801f3a62887e0ab67a9322c503a7efd545c1"}},{"ruleId":"D2","level":"warning","message":{"text":"AutoOptions.registerOptionsDefined (cognitive 22): AutoOptions.registerOptionsDefined has cognitive complexity 22 (threshold 15). Drivers by points: if/else 15, error handling 5, boolean chains 1, loops 1 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/ProposedUtils/src/main/java/ghidra/framework/options/AutoOptions.java"},"region":{"startLine":113}}}],"partialFingerprints":{"codehealthFindingId/v1":"71a35bd0d62cce517c6caf8e0876d50e7c775a5d915e1aea79da439f5e25da86"}},{"ruleId":"D2","level":"warning","message":{"text":"TraceRmiTarget.findObject (cognitive 22): TraceRmiTarget.findObject has cognitive complexity 22 (threshold 15). Drivers by points: if/else 22 (nesting depth added 13). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/Debugger-rmi-trace/src/main/java/ghidra/app/plugin/core/debug/service/tracermi/TraceRmiTarget.java"},"region":{"startLine":243}}}],"partialFingerprints":{"codehealthFindingId/v1":"59b42e8c5bab7749fa47e2cdf74b350aa63410e4e6fcd62d930e51cc625f22e7"}},{"ruleId":"D2","level":"warning","message":{"text":"SleighCompileRegressionTest.comparesOK (cognitive 22): SleighCompileRegressionTest.comparesOK has cognitive complexity 22 (threshold 15). Drivers by points: if/else 13, loops 5, boolean chains 4 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Test/IntegrationTest/src/test.slow/java/ghidra/pcodeCPort/slgh_compile/regression/SleighCompileRegressionTest.java"},"region":{"startLine":178}}}],"partialFingerprints":{"codehealthFindingId/v1":"fd8d6617b38e7e4288f6a69121d699da63f970c774566cbd467850ac3ec57169"}},{"ruleId":"D2","level":"warning","message":{"text":"LSHBinner.hash16DotProduct (cognitive 22): LSHBinner.hash16DotProduct has cognitive complexity 22 (threshold 15). Drivers by points: if/else 13, loops 9 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Extensions/BSimElasticPlugin/src/org/elasticsearch/plugin/analysis/lsh/LSHBinner.java"},"region":{"startLine":205}}}],"partialFingerprints":{"codehealthFindingId/v1":"cc35a38ed21eb36ca936d8d4e841f3714819750ac5110f64d17edbdffd7d0987"}},{"ruleId":"D2","level":"warning","message":{"text":"SocketSetupRunnable.run (cognitive 21): SocketSetupRunnable.run has cognitive complexity 21 (threshold 15). Drivers by points: if/else 11, error handling 8, boolean chains 1, loops 1 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"GhidraBuild/EclipsePlugins/GhidraDev/GhidraDevPlugin/src/main/java/ghidradev/ghidrasymbollookup/SocketSetupRunnable.java"},"region":{"startLine":42}}}],"partialFingerprints":{"codehealthFindingId/v1":"dcf93c0679d16ecdb012e8cdc0c5a4cbb0de1ce6848017c770864e91ed37dd78"}},{"ruleId":"D2","level":"warning","message":{"text":"1.evaluateContext (cognitive 21): 1.evaluateContext has cognitive complexity 21 (threshold 15). Drivers by points: if/else 17, boolean chains 2, loops 2 (nesting depth added 11). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Processors/Sparc/src/main/java/ghidra/app/plugin/core/analysis/SparcAnalyzer.java"},"region":{"startLine":74}}}],"partialFingerprints":{"codehealthFindingId/v1":"9c6ce009aa8407f0fe9aae6c78e99606d2bd5b684ddc1e7cfc5fa14c42c81b55"}},{"ruleId":"D2","level":"warning","message":{"text":"PowerPCAddressAnalyzer.isPEFCallingConvention (cognitive 21): PowerPCAddressAnalyzer.isPEFCallingConvention has cognitive complexity 21 (threshold 15). Drivers by points: if/else 14, boolean chains 4, loops 3 (nesting depth added 11). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Processors/PowerPC/src/main/java/ghidra/app/plugin/core/analysis/PowerPCAddressAnalyzer.java"},"region":{"startLine":700}}}],"partialFingerprints":{"codehealthFindingId/v1":"9c6156794ca2899a598f8c10e6432abb340a683420421b33234cbb80cb351b02"}},{"ruleId":"D2","level":"warning","message":{"text":"1.markupDualInstructions (cognitive 21): 1.markupDualInstructions has cognitive complexity 21 (threshold 15). Drivers by points: if/else 15, error handling 4, boolean chains 2 (nesting depth added 13). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Processors/MIPS/src/main/java/ghidra/app/plugin/core/analysis/MipsAddressAnalyzer.java"},"region":{"startLine":360}}}],"partialFingerprints":{"codehealthFindingId/v1":"e692c799740e68fe958e471c60132275bb9377c810f015ab7f771cc460009925"}},{"ruleId":"D2","level":"warning","message":{"text":"MIPS_ElfRelocationContext.processRelocation (cognitive 21): MIPS_ElfRelocationContext.processRelocation has cognitive complexity 21 (threshold 15). Drivers by points: if/else 15, ternaries 3, loops 2, boolean chains 1 (nesting depth added 11). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Processors/MIPS/src/main/java/ghidra/app/util/bin/format/elf/relocation/MIPS_ElfRelocationContext.java"},"region":{"startLine":66}}}],"partialFingerprints":{"codehealthFindingId/v1":"96468617cd18369fbf2ed6ab0c6f0ce4c5431788a44a5e2b812a3ab8ed972068"}},{"ruleId":"D2","level":"warning","message":{"text":"ConstTpl.decode (cognitive 21): ConstTpl.decode has cognitive complexity 21 (threshold 15). Drivers by points: if/else 20, boolean chains 1 (nesting depth added 4). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition, and where an else follows a branch that already returns, drop the trailing else and let the rest of the body continue at one level."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/processors/sleigh/template/ConstTpl.java"},"region":{"startLine":285}}}],"partialFingerprints":{"codehealthFindingId/v1":"7da194e1a25896f1b4003772469448e0bcc08d033a7a80e36ca7d15948db4bfd"}},{"ruleId":"D2","level":"warning","message":{"text":"Constructor.printSeparator (cognitive 21): Constructor.printSeparator has cognitive complexity 21 (threshold 15). Drivers by points: if/else 15, boolean chains 4, loops 2 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/processors/sleigh/Constructor.java"},"region":{"startLine":131}}}],"partialFingerprints":{"codehealthFindingId/v1":"7759bfc26cf6af41876af08fcc4602759b87a3462e5aca5bb9c162f63979e89e"}},{"ruleId":"D2","level":"warning","message":{"text":"PcodeEmit.dump (cognitive 21): PcodeEmit.dump has cognitive complexity 21 (threshold 15). Drivers by points: if/else 19, boolean chains 1, loops 1 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/processors/sleigh/PcodeEmit.java"},"region":{"startLine":502}}}],"partialFingerprints":{"codehealthFindingId/v1":"9c56c7ad032b9cc6fcfd0a2f5187e6dd80744333ef9ea650c27b477f72de48f2"}},{"ruleId":"D2","level":"warning","message":{"text":"SleighDebugLogger.dumpConstructor (cognitive 21): SleighDebugLogger.dumpConstructor has cognitive complexity 21 (threshold 15). Drivers by points: if/else 17, loops 4 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/processors/sleigh/SleighDebugLogger.java"},"region":{"startLine":444}}}],"partialFingerprints":{"codehealthFindingId/v1":"67ba153fedce73b810fd2a4b8afd9bd0262851e1b815f3220c3bebaad550fd4a"}},{"ruleId":"D2","level":"warning","message":{"text":"SleighInstructionPrototype.resolveHandles (cognitive 21): SleighInstructionPrototype.resolveHandles has cognitive complexity 21 (threshold 15). Drivers by points: if/else 18, loops 3 (nesting depth added 12). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/processors/sleigh/SleighInstructionPrototype.java"},"region":{"startLine":1431}}}],"partialFingerprints":{"codehealthFindingId/v1":"a25f9f550efbd15dfb5fca84189708e0a4b5498bd0b783d64dae378ff0b2bc7b"}},{"ruleId":"D2","level":"warning","message":{"text":"TokenPattern.doCat (cognitive 21): TokenPattern.doCat has cognitive complexity 21 (threshold 15). Drivers by points: if/else 15, loops 4, boolean chains 2 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghpatexpress/TokenPattern.java"},"region":{"startLine":406}}}],"partialFingerprints":{"codehealthFindingId/v1":"fe881a78601b84577133e97bf0e010dff789cebb538997546469721a034a1ed3"}},{"ruleId":"D2","level":"warning","message":{"text":"DataTypeArchiveTransformer.processAnonymous (cognitive 21): DataTypeArchiveTransformer.processAnonymous has cognitive complexity 21 (threshold 15). Drivers by points: if/else 14, boolean chains 5, loops 2 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/DataTypeArchiveTransformer.java"},"region":{"startLine":308}}}],"partialFingerprints":{"codehealthFindingId/v1":"55584d7a0a13a1d57d1ede5bcfccf5f32a890be8729c7aaf3eb317895ba38c54"}},{"ruleId":"D2","level":"warning","message":{"text":"ExternalManagerDB.findMatchingLocationByName (cognitive 21): ExternalManagerDB.findMatchingLocationByName has cognitive complexity 21 (threshold 15). Drivers by points: if/else 14, loops 6, ternaries 1 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/external/ExternalManagerDB.java"},"region":{"startLine":366}}}],"partialFingerprints":{"codehealthFindingId/v1":"7b2faf144f87f0dd81afe40a4cebbd756587f727419cdd11f33693f57dda3eac"}},{"ruleId":"D2","level":"warning","message":{"text":"ExternalManagerDB.getExternalLocations (cognitive 21): ExternalManagerDB.getExternalLocations has cognitive complexity 21 (threshold 15). Drivers by points: if/else 13, loops 6, boolean chains 2 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/external/ExternalManagerDB.java"},"region":{"startLine":424}}}],"partialFingerprints":{"codehealthFindingId/v1":"26194d29e54d789101b2dab6e8e90eae351be29fbfae59e11fd9b7b2a735539a"}},{"ruleId":"D2","level":"warning","message":{"text":"FunctionManagerDB.initSignatureSource (cognitive 21): FunctionManagerDB.initSignatureSource has cognitive complexity 21 (threshold 15). Drivers by points: if/else 18, boolean chains 2, loops 1 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/function/FunctionManagerDB.java"},"region":{"startLine":656}}}],"partialFingerprints":{"codehealthFindingId/v1":"7b25a73e48e87a1911222c095208f679e3cc0898d6d6d069b233c44aa68223aa"}},{"ruleId":"D2","level":"warning","message":{"text":"AddressMapDB.decode (cognitive 21): AddressMapDB.decode has cognitive complexity 21 (threshold 15). Drivers by points: if/else 13, error handling 7, match/switch 1 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/map/AddressMapDB.java"},"region":{"startLine":538}}}],"partialFingerprints":{"codehealthFindingId/v1":"c79e80b843267a818670c056e19505c48b640e4db92fff9e17a10decaed60a0b"}},{"ruleId":"D2","level":"warning","message":{"text":"AddressMapDB.getBaseAddressIndex (cognitive 21): AddressMapDB.getBaseAddressIndex has cognitive complexity 21 (threshold 15). Drivers by points: if/else 18, ternaries 2, boolean chains 1 (nesting depth added 4). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition, and where an else follows a branch that already returns, drop the trailing else and let the rest of the body continue at one level."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/map/AddressMapDB.java"},"region":{"startLine":416}}}],"partialFingerprints":{"codehealthFindingId/v1":"f9ab942e723093c51b9e4358e1e98d689cc8167205fda62fa650b9663f272a17"}},{"ruleId":"D2","level":"warning","message":{"text":"DatabaseRangeMapAdapter.setLanguage (cognitive 21): DatabaseRangeMapAdapter.setLanguage has cognitive complexity 21 (threshold 15). Drivers by points: if/else 13, loops 4, boolean chains 2, error handling 2 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/register/DatabaseRangeMapAdapter.java"},"region":{"startLine":132}}}],"partialFingerprints":{"codehealthFindingId/v1":"dcbf2a5213daba84616c3c29f49999f820461679e921cb1dcd603cb766545bda"}},{"ruleId":"D2","level":"warning","message":{"text":"Disassembler.markInstructionError (cognitive 21): Disassembler.markInstructionError has cognitive complexity 21 (threshold 15). Drivers by points: if/else 14, error handling 3, boolean chains 2, ternaries 2 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/disassemble/Disassembler.java"},"region":{"startLine":1447}}}],"partialFingerprints":{"codehealthFindingId/v1":"8e9d82bf78c2dd13f82b13414d1c1cdaa170483d422c15d894b5fd38fa47176e"}},{"ruleId":"D2","level":"warning","message":{"text":"SimpleSourceReferenceIterator.followIndirection (cognitive 21): SimpleSourceReferenceIterator.followIndirection has cognitive complexity 21 (threshold 15). Drivers by points: if/else 14, ternaries 3, boolean chains 2, loops 2 (nesting depth added 11). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/block/SimpleSourceReferenceIterator.java"},"region":{"startLine":190}}}],"partialFingerprints":{"codehealthFindingId/v1":"05cc88c5a04a5ea7c3ff8deac6b0c391a31c60cbcb4cfa70ab87b435bc83ee75"}},{"ruleId":"D2","level":"warning","message":{"text":"DataOrganizationImpl.save (cognitive 21): DataOrganizationImpl.save has cognitive complexity 21 (threshold 15). Drivers by points: if/else 19, loops 2 (nesting depth added 1). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/DataOrganizationImpl.java"},"region":{"startLine":594}}}],"partialFingerprints":{"codehealthFindingId/v1":"6204ab1e7c48445cd86c1531adc9344c409914ff04b9fbdba053a3de2dc096e4"}},{"ruleId":"D2","level":"warning","message":{"text":"NoisyStructureBuilder.addDataType (cognitive 21): NoisyStructureBuilder.addDataType has cognitive complexity 21 (threshold 15). Drivers by points: if/else 17, boolean chains 4 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/NoisyStructureBuilder.java"},"region":{"startLine":86}}}],"partialFingerprints":{"codehealthFindingId/v1":"ccabbc3cb6b76c8227cf378d45a0bbef8a4ee371d9411733dade80a4d03ddec5"}},{"ruleId":"D2","level":"warning","message":{"text":"StringRenderBuilder.renderChars (cognitive 21): StringRenderBuilder.renderChars has cognitive complexity 21 (threshold 15). Drivers by points: if/else 12, match/switch 7, boolean chains 1, loops 1 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/StringRenderBuilder.java"},"region":{"startLine":171}}}],"partialFingerprints":{"codehealthFindingId/v1":"60aa7411c50fd98b4b0096bd2ed4380d342951c918b563a23399392a4400601a"}},{"ruleId":"D2","level":"warning","message":{"text":"PrototypeModel.isEquivalent (cognitive 21): PrototypeModel.isEquivalent has cognitive complexity 21 (threshold 15). Drivers by points: if/else 16, boolean chains 3, ternaries 2. To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/lang/PrototypeModel.java"},"region":{"startLine":808}}}],"partialFingerprints":{"codehealthFindingId/v1":"fb926ce0d4791a1aac9a37cb303b364991cf523541eaee2a80b63adc1d7f4369"}},{"ruleId":"D2","level":"warning","message":{"text":"VariableImpl.\u003Cinit\u003E (cognitive 21): VariableImpl.\u003Cinit\u003E has cognitive complexity 21 (threshold 15). Drivers by points: if/else 16, boolean chains 4, ternaries 1 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/listing/VariableImpl.java"},"region":{"startLine":148}}}],"partialFingerprints":{"codehealthFindingId/v1":"1439e63467a4fedd394a7aa64149f6c276660a512861558cd5af9987fcfdc15a"}},{"ruleId":"D2","level":"warning","message":{"text":"DynamicHash.calcConstantHash (cognitive 21): DynamicHash.calcConstantHash has cognitive complexity 21 (threshold 15). Drivers by points: if/else 11, loops 9, boolean chains 1 (nesting depth added 13). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/pcode/DynamicHash.java"},"region":{"startLine":841}}}],"partialFingerprints":{"codehealthFindingId/v1":"1f81b727d6f1e0ace3bf3054ce4833bf5015d7fa210c7ea07b6d7828660502b7"}},{"ruleId":"D2","level":"warning","message":{"text":"HighGlobal.decode (cognitive 21): HighGlobal.decode has cognitive complexity 21 (threshold 15). Drivers by points: if/else 20, loops 1 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/pcode/HighGlobal.java"},"region":{"startLine":50}}}],"partialFingerprints":{"codehealthFindingId/v1":"656e35b35aeea9231e14d6038c42a219458ca771b929b0ac70809c798871796a"}},{"ruleId":"D2","level":"warning","message":{"text":"AcyclicCallGraphBuilder.initializeNode (cognitive 21): AcyclicCallGraphBuilder.initializeNode has cognitive complexity 21 (threshold 15). Drivers by points: if/else 17, loops 3, boolean chains 1 (nesting depth added 13). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/util/AcyclicCallGraphBuilder.java"},"region":{"startLine":126}}}],"partialFingerprints":{"codehealthFindingId/v1":"8e8ecd71322e2a77133d78f3e908577246766a204ce9e7aa6e2cc6ed8014aafd"}},{"ruleId":"D2","level":"warning","message":{"text":"DefinedDataIterator.recursiveMatchesDataTypePredicate (cognitive 21): DefinedDataIterator.recursiveMatchesDataTypePredicate has cognitive complexity 21 (threshold 15). Drivers by points: if/else 14, loops 7 (nesting depth added 12). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/util/DefinedDataIterator.java"},"region":{"startLine":152}}}],"partialFingerprints":{"codehealthFindingId/v1":"47ba5fbe4dadd8ecc93c724b64f99a3546f5080c99f2256a3f310241ebd68db8"}},{"ruleId":"D2","level":"warning","message":{"text":"GhidraFileData.getDomainObject (cognitive 21): GhidraFileData.getDomainObject has cognitive complexity 21 (threshold 15). Drivers by points: if/else 20, error handling 1 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Project/src/main/java/ghidra/framework/data/GhidraFileData.java"},"region":{"startLine":607}}}],"partialFingerprints":{"codehealthFindingId/v1":"6520a4b4e2817a9fe3de1a6bb3b8e5c7ecd75eeac8526a4b14ea3e00e5cc8c5b"}},{"ruleId":"D2","level":"warning","message":{"text":"FVTable.decrementSelection (cognitive 21): FVTable.decrementSelection has cognitive complexity 21 (threshold 15). Drivers by points: if/else 15, error handling 5, boolean chains 1 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Project/src/main/java/ghidra/framework/main/logviewer/ui/FVTable.java"},"region":{"startLine":441}}}],"partialFingerprints":{"codehealthFindingId/v1":"da4c8fc0ddc3cd5ffa145dbc9b4b3163fddf49df9e1254df801c866c5194f4c9"}},{"ruleId":"D2","level":"warning","message":{"text":"FileViewer.handleFVEvent (cognitive 21): FileViewer.handleFVEvent has cognitive complexity 21 (threshold 15). Drivers by points: if/else 8, error handling 6, ternaries 4, loops 2, match/switch 1 (nesting depth added 10). The drivers above price the dispatch low by construction \u2014 a dispatch is charged once however many cases it lists, while each branch inside an arm is charged in full \u2014 so most of this count is what the case bodies hold, and the arms are where it can be reduced. To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Project/src/main/java/ghidra/framework/main/logviewer/ui/FileViewer.java"},"region":{"startLine":136}}}],"partialFingerprints":{"codehealthFindingId/v1":"5c379a0011cd1dbe101d753be639bab186bcfcdbfc1766a38580e2d8afd475be"}},{"ruleId":"D2","level":"warning","message":{"text":"VersionControlAddAction.addToVersionControl (cognitive 21): VersionControlAddAction.addToVersionControl has cognitive complexity 21 (threshold 15). Drivers by points: if/else 17, loops 4 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Project/src/main/java/ghidra/framework/main/projectdata/actions/VersionControlAddAction.java"},"region":{"startLine":75}}}],"partialFingerprints":{"codehealthFindingId/v1":"11302072208d9b3492e623da9267af8d273f4315fc50d60fcafff59fc318d5ac"}},{"ruleId":"D2","level":"warning","message":{"text":"VersionControlCheckInAction.checkIn (cognitive 21): VersionControlCheckInAction.checkIn has cognitive complexity 21 (threshold 15). Drivers by points: if/else 17, loops 3, boolean chains 1 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Project/src/main/java/ghidra/framework/main/projectdata/actions/VersionControlCheckInAction.java"},"region":{"startLine":109}}}],"partialFingerprints":{"codehealthFindingId/v1":"9974780ecc8d45beb711321e8937c6ebe58f4e6519b22c069d89cdea21012300"}},{"ruleId":"D2","level":"warning","message":{"text":"FrontEndTool.checkIn (cognitive 21): FrontEndTool.checkIn has cognitive complexity 21 (threshold 15). Drivers by points: if/else 17, loops 3, boolean chains 1 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Project/src/main/java/ghidra/framework/main/FrontEndTool.java"},"region":{"startLine":529}}}],"partialFingerprints":{"codehealthFindingId/v1":"195acc102d220badaacd777adbd8f119fded9e59040d8140006c689b208ee5d9"}},{"ruleId":"D2","level":"warning","message":{"text":"FrontEndTool.merge (cognitive 21): FrontEndTool.merge has cognitive complexity 21 (threshold 15). Drivers by points: if/else 17, loops 3, boolean chains 1 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Project/src/main/java/ghidra/framework/main/FrontEndTool.java"},"region":{"startLine":597}}}],"partialFingerprints":{"codehealthFindingId/v1":"014afd1898cfa2991132d804e0d7ec9e850c8ba42512cb848266500b93d0b20a"}},{"ruleId":"D2","level":"warning","message":{"text":"DirectedGraph.getEntryPoints (cognitive 21): DirectedGraph.getEntryPoints has cognitive complexity 21 (threshold 15). Drivers by points: if/else 13, loops 8 (nesting depth added 13). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Generic/src/main/java/ghidra/util/graph/DirectedGraph.java"},"region":{"startLine":483}}}],"partialFingerprints":{"codehealthFindingId/v1":"580b54e08a482a64f29c1b64e07e33e59811e3c2778252380e4b07ebe30d368e"}},{"ruleId":"D2","level":"warning","message":{"text":"ClientUtil.handleException (cognitive 21): ClientUtil.handleException has cognitive complexity 21 (threshold 15). Drivers by points: if/else 19, boolean chains 2 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/FileSystem/src/main/java/ghidra/framework/client/ClientUtil.java"},"region":{"startLine":196}}}],"partialFingerprints":{"codehealthFindingId/v1":"73774d062b007b096dd79c886ed47a33c9b1524d0d9e9f7c42f79f36fcaba67d"}},{"ruleId":"D2","level":"warning","message":{"text":"HeadlessClientAuthenticator.getPassword (cognitive 21): HeadlessClientAuthenticator.getPassword has cognitive complexity 21 (threshold 15). Drivers by points: if/else 12, loops 6, boolean chains 2, error handling 1 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/FileSystem/src/main/java/ghidra/framework/client/HeadlessClientAuthenticator.java"},"region":{"startLine":191}}}],"partialFingerprints":{"codehealthFindingId/v1":"9b4458b3dc2eff1bd774abeea738f451b822f09c6233ace3e49abeb60c6552e8"}},{"ruleId":"D2","level":"warning","message":{"text":"HeadlessClientAuthenticator.installHeadlessClientAuthenticator (cognitive 21): HeadlessClientAuthenticator.installHeadlessClientAuthenticator has cognitive complexity 21 (threshold 15). Drivers by points: if/else 13, error handling 8 (nesting depth added 11). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/FileSystem/src/main/java/ghidra/framework/client/HeadlessClientAuthenticator.java"},"region":{"startLine":126}}}],"partialFingerprints":{"codehealthFindingId/v1":"f2e7dabf1128b0d9faad83291f9f663e55ef704ec2d6c7026bb7c90fdf58bcaa"}},{"ruleId":"D2","level":"warning","message":{"text":"RepositoryServerAdapter.connect (cognitive 21): RepositoryServerAdapter.connect has cognitive complexity 21 (threshold 15). Drivers by points: error handling 7, if/else 6, ternaries 5, loops 2, boolean chains 1 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/FileSystem/src/main/java/ghidra/framework/client/RepositoryServerAdapter.java"},"region":{"startLine":140}}}],"partialFingerprints":{"codehealthFindingId/v1":"eb0a7503b41f4063b7182e0c1a495e972d21fafbf0262ce2cc87bbe1772bf2d8"}},{"ruleId":"D2","level":"warning","message":{"text":"PackedDatabaseCache.readCache (cognitive 21): PackedDatabaseCache.readCache has cognitive complexity 21 (threshold 15). Drivers by points: if/else 14, boolean chains 3, loops 3, error handling 1 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/FileSystem/src/main/java/ghidra/framework/store/db/PackedDatabaseCache.java"},"region":{"startLine":100}}}],"partialFingerprints":{"codehealthFindingId/v1":"b32d5bccb61d5e02aa2d3edd4476a59538c7dce5fbe200202bec0c553a689362"}},{"ruleId":"D2","level":"warning","message":{"text":"LocalFolderItem.\u003Cinit\u003E (cognitive 21): LocalFolderItem.\u003Cinit\u003E has cognitive complexity 21 (threshold 15). Drivers by points: if/else 17, boolean chains 4 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/FileSystem/src/main/java/ghidra/framework/store/local/LocalFolderItem.java"},"region":{"startLine":93}}}],"partialFingerprints":{"codehealthFindingId/v1":"9826ce5aecbb63bdec9dcacc523867ce99348c053f586a7ebc1144a4a8a0bbfc"}},{"ruleId":"D2","level":"warning","message":{"text":"DetachedWindowNode.generateTitles (cognitive 21): DetachedWindowNode.generateTitles has cognitive complexity 21 (threshold 15). Drivers by points: if/else 12, loops 9 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Docking/src/main/java/docking/DetachedWindowNode.java"},"region":{"startLine":267}}}],"partialFingerprints":{"codehealthFindingId/v1":"c2ad90b937d073f04608ecad856f4925b63d20f24aadbc24bf54b1a4cde1a7ce"}},{"ruleId":"D2","level":"warning","message":{"text":"ShortDurationFieldKeyIterator.hasNext (cognitive 21): ShortDurationFieldKeyIterator.hasNext has cognitive complexity 21 (threshold 15). Drivers by points: if/else 16, ternaries 3, boolean chains 2 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/DB/src/main/java/db/Table.java"},"region":{"startLine":3921}}}],"partialFingerprints":{"codehealthFindingId/v1":"f9f127de25d5b2635bc15679f90907475f959fec692b7c70bf6042d3d6241e4b"}},{"ruleId":"D2","level":"warning","message":{"text":"ShortDurationFieldKeyIterator.hasPrevious (cognitive 21): ShortDurationFieldKeyIterator.hasPrevious has cognitive complexity 21 (threshold 15). Drivers by points: if/else 16, ternaries 3, boolean chains 2 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/DB/src/main/java/db/Table.java"},"region":{"startLine":3974}}}],"partialFingerprints":{"codehealthFindingId/v1":"4d820fa0c7813f85ffcf5262308cece6c424df8d728fe8e628fbf778522211d5"}},{"ruleId":"D2","level":"warning","message":{"text":"BSimProgramCorrelatorMatching.calculateBestNeighbor (cognitive 21): BSimProgramCorrelatorMatching.calculateBestNeighbor has cognitive complexity 21 (threshold 15). Drivers by points: if/else 17, loops 3, boolean chains 1 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/VersionTrackingBSim/src/main/java/ghidra/feature/vt/api/BSimProgramCorrelatorMatching.java"},"region":{"startLine":726}}}],"partialFingerprints":{"codehealthFindingId/v1":"db5bd7288b23de51644211e88afa9a1e05fd945de1b85452853af4257aaacb26"}},{"ruleId":"D2","level":"warning","message":{"text":"FunctionSignatureStringable.getParameters (cognitive 21): FunctionSignatureStringable.getParameters has cognitive complexity 21 (threshold 15). Drivers by points: if/else 14, ternaries 4, boolean chains 2, loops 1 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/VersionTracking/src/main/java/ghidra/feature/vt/api/stringable/FunctionSignatureStringable.java"},"region":{"startLine":965}}}],"partialFingerprints":{"codehealthFindingId/v1":"25bd4505ce5445c7d54859fd780d11ed4e9e69f03493ba4ba198e12d88acf8e5"}},{"ruleId":"D2","level":"warning","message":{"text":"DefaultCompositeMember.kidnapElderSiblingsFromParentStructure (cognitive 21): DefaultCompositeMember.kidnapElderSiblingsFromParentStructure has cognitive complexity 21 (threshold 15). Drivers by points: if/else 14, loops 4, boolean chains 3 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/PDB/src/main/java/ghidra/app/util/bin/format/pdb/DefaultCompositeMember.java"},"region":{"startLine":1288}}}],"partialFingerprints":{"codehealthFindingId/v1":"acc075610e804e0bef9b9b7e572b26b16a5102d0bde088f8eec2f8b084ca646a"}},{"ruleId":"D2","level":"warning","message":{"text":"MDModifierType.insertInternal (cognitive 21): MDModifierType.insertInternal has cognitive complexity 21 (threshold 15). Drivers by points: if/else 17, boolean chains 4 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/MicrosoftDmang/src/main/java/mdemangler/datatype/modifier/MDModifierType.java"},"region":{"startLine":227}}}],"partialFingerprints":{"codehealthFindingId/v1":"48513da21f03b63fa66e5d6f5bad7fb66ef6b5f47a105ad97c498941873b85c6"}},{"ruleId":"D2","level":"warning","message":{"text":"MDMangParseInfo.getParseInfo_orig (cognitive 21): MDMangParseInfo.getParseInfo_orig has cognitive complexity 21 (threshold 15). Drivers by points: if/else 9, loops 8, boolean chains 4 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/MicrosoftDmang/src/main/java/mdemangler/MDMangParseInfo.java"},"region":{"startLine":129}}}],"partialFingerprints":{"codehealthFindingId/v1":"bdb2fb976c33f8d1e8dc880c14e5c8d368dc84201a51a0f8509cb2713443a7a8"}},{"ruleId":"D2","level":"warning","message":{"text":"GhidraServer.findHost (cognitive 21): GhidraServer.findHost has cognitive complexity 21 (threshold 15). Drivers by points: if/else 11, loops 6, error handling 4 (nesting depth added 13). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/GhidraServer/src/main/java/ghidra/server/remote/GhidraServer.java"},"region":{"startLine":441}}}],"partialFingerprints":{"codehealthFindingId/v1":"dd6b088eaee173203e8388faaa4fd5eb407cc1f54f1d51722233227141d2495d"}},{"ruleId":"D2","level":"warning","message":{"text":"DumpFile.setProgramContext (cognitive 21): DumpFile.setProgramContext has cognitive complexity 21 (threshold 15). Drivers by points: error handling 8, if/else 8, loops 5 (nesting depth added 13). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/dump/DumpFile.java"},"region":{"startLine":243}}}],"partialFingerprints":{"codehealthFindingId/v1":"3e2be9d230560141583e301ccc0478a7f5661e3e30c92843d66b91ac02801d30"}},{"ruleId":"D2","level":"warning","message":{"text":"MachoPrelinkFileSystem.processSystemKext (cognitive 21): MachoPrelinkFileSystem.processSystemKext has cognitive complexity 21 (threshold 15). Drivers by points: if/else 14, loops 6, boolean chains 1 (nesting depth added 12). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/ios/prelink/MachoPrelinkFileSystem.java"},"region":{"startLine":285}}}],"partialFingerprints":{"codehealthFindingId/v1":"63784b5b3918f776f509d87e142773c62ae18bacf3b8c103d3b25853cc28295d"}},{"ruleId":"D2","level":"warning","message":{"text":"EncodeState.insertNode (cognitive 21): EncodeState.insertNode has cognitive complexity 21 (threshold 15). Drivers by points: if/else 18, loops 3 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/lzss/LzssCodec.java"},"region":{"startLine":95}}}],"partialFingerprints":{"codehealthFindingId/v1":"45fb074227221cd71be3590db554f34e3848c149fdd5df8422bfef88f848a358"}},{"ruleId":"D2","level":"warning","message":{"text":"OverridePrototypeAction.generateSignature (cognitive 21): OverridePrototypeAction.generateSignature has cognitive complexity 21 (threshold 15). Drivers by points: if/else 16, loops 3, boolean chains 2 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/Decompiler/src/main/java/ghidra/app/plugin/core/decompile/actions/OverridePrototypeAction.java"},"region":{"startLine":171}}}],"partialFingerprints":{"codehealthFindingId/v1":"90f2ed4143177719af7e9eca426ac099df435a5206794ccf9fe7e92417f31f08"}},{"ruleId":"D2","level":"warning","message":{"text":"DataGraph.\u003Cinit\u003E (cognitive 21): DataGraph.\u003Cinit\u003E has cognitive complexity 21 (threshold 15). Drivers by points: if/else 15, loops 5, ternaries 1 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/CodeCompare/src/main/java/ghidra/features/codecompare/graphanalysis/DataGraph.java"},"region":{"startLine":92}}}],"partialFingerprints":{"codehealthFindingId/v1":"b69e3d480cc19b3196aefd4b4408cd272a82c429e26d06ff91e0909bd669252e"}},{"ruleId":"D2","level":"warning","message":{"text":"Pinning.pinMain (cognitive 21): Pinning.pinMain has cognitive complexity 21 (threshold 15). Drivers by points: if/else 12, ternaries 8, loops 1 (nesting depth added 13). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/CodeCompare/src/main/java/ghidra/features/codecompare/graphanalysis/Pinning.java"},"region":{"startLine":493}}}],"partialFingerprints":{"codehealthFindingId/v1":"f32b43c76c4dcff16723e784277db9aa0931ac86794e0ffb8629575b1dab4dd9"}},{"ruleId":"D2","level":"warning","message":{"text":"AbstractSQLFunctionDatabase.fdbQueryPair (cognitive 21): AbstractSQLFunctionDatabase.fdbQueryPair has cognitive complexity 21 (threshold 15). Drivers by points: if/else 18, loops 2, boolean chains 1 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/BSim/src/main/java/ghidra/features/bsim/query/client/AbstractSQLFunctionDatabase.java"},"region":{"startLine":1684}}}],"partialFingerprints":{"codehealthFindingId/v1":"27f73b22a65e816d840c8630f1372726bda1b53569afc6e6a84ce6f860e9f5f7"}},{"ruleId":"D2","level":"warning","message":{"text":"PostgresFunctionDatabase.preWarm (cognitive 21): PostgresFunctionDatabase.preWarm has cognitive complexity 21 (threshold 15). Drivers by points: if/else 14, loops 7 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/BSim/src/main/java/ghidra/features/bsim/query/client/PostgresFunctionDatabase.java"},"region":{"startLine":341}}}],"partialFingerprints":{"codehealthFindingId/v1":"863158f05694fe7e691a3160124bb036058c4900f760eb84aa80befb27bbb64a"}},{"ruleId":"D2","level":"warning","message":{"text":"ElasticDatabase.fdbQueryPair (cognitive 21): ElasticDatabase.fdbQueryPair has cognitive complexity 21 (threshold 15). Drivers by points: if/else 18, loops 2, boolean chains 1 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/BSim/src/main/java/ghidra/features/bsim/query/elastic/ElasticDatabase.java"},"region":{"startLine":3078}}}],"partialFingerprints":{"codehealthFindingId/v1":"e8b1635e5d6861a333813d00ab423d8780e146a36ee31bdee654908cd7ef5e95"}},{"ruleId":"D2","level":"warning","message":{"text":"DebuggerBreakpointMarkerPlugin.processEvent (cognitive 21): DebuggerBreakpointMarkerPlugin.processEvent has cognitive complexity 21 (threshold 15). Drivers by points: if/else 16, loops 5 (nesting depth added 14). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/gui/breakpoint/DebuggerBreakpointMarkerPlugin.java"},"region":{"startLine":1092}}}],"partialFingerprints":{"codehealthFindingId/v1":"69b61fc3d2ff185593088f5ab6216e1291de5fff2fc76aa87732d0ed837112fa"}},{"ruleId":"D2","level":"warning","message":{"text":"ProgramEmulationUtils.initializeRegisters (cognitive 21): ProgramEmulationUtils.initializeRegisters has cognitive complexity 21 (threshold 15). Drivers by points: ternaries 9, if/else 8, loops 3, boolean chains 1 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/service/emulation/ProgramEmulationUtils.java"},"region":{"startLine":343}}}],"partialFingerprints":{"codehealthFindingId/v1":"8b9d8a9e2a6451437f6cda1f2b25671172882419993264bf74ab5aaf78cef858"}},{"ruleId":"D2","level":"warning","message":{"text":"AnalysisForPC.computeUnwindInfo (cognitive 21): AnalysisForPC.computeUnwindInfo has cognitive complexity 21 (threshold 15). Drivers by points: if/else 11, error handling 7, loops 3 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/stack/UnwindAnalysis.java"},"region":{"startLine":450}}}],"partialFingerprints":{"codehealthFindingId/v1":"e2ca1881533f784cb76c54b977d9e3fae0489cb11b0f4ca8d1a512bbec726e44"}},{"ruleId":"D2","level":"warning","message":{"text":"AbstractDebuggerLogicalBreakpointServiceTest.assertServiceAgreesWithOpenProgramsAndTraces (cognitive 21): AbstractDebuggerLogicalBreakpointServiceTest.assertServiceAgreesWithOpenProgramsAndTraces has cognitive complexity 21 (threshold 15). Drivers by points: loops 15, if/else 6 (nesting depth added 10). To reduce it, break up the iteration: give each loop body a named function, and split a multi-phase loop into one function per phase so no single body carries the whole pipeline."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Test/DebuggerIntegrationTest/src/test/java/ghidra/app/plugin/core/debug/service/breakpoint/AbstractDebuggerLogicalBreakpointServiceTest.java"},"region":{"startLine":199}}}],"partialFingerprints":{"codehealthFindingId/v1":"7e86575df44d78bdc75797966b18a50a7a177cd404ca22b66d6fe25e34ed52aa"}},{"ruleId":"D2","level":"warning","message":{"text":"PowerPC64_ElfRelocationHandler.relocate (cognitive 20): PowerPC64_ElfRelocationHandler.relocate has cognitive complexity 20 (threshold 15). Drivers by points: if/else 12, ternaries 4, match/switch 3, boolean chains 1 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Processors/PowerPC/src/main/java/ghidra/app/util/bin/format/elf/relocation/PowerPC64_ElfRelocationHandler.java"},"region":{"startLine":57}}}],"partialFingerprints":{"codehealthFindingId/v1":"85e3c090a8b77f6ed80950e3556dcad9f6dd43b48888bb57c5f7188782a04cd1"}},{"ruleId":"D2","level":"warning","message":{"text":"HexagonPrologEpilogAnalyzer.isEpilog (cognitive 20): HexagonPrologEpilogAnalyzer.isEpilog has cognitive complexity 20 (threshold 15). Drivers by points: if/else 16, boolean chains 3, loops 1 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Processors/Hexagon/src/main/java/ghidra/app/plugin/core/analysis/HexagonPrologEpilogAnalyzer.java"},"region":{"startLine":188}}}],"partialFingerprints":{"codehealthFindingId/v1":"6ffaa2393826960d32978113aea8e92f78f285d3d4842d5e970d94647a4c4867"}},{"ruleId":"D2","level":"warning","message":{"text":"Motorola68KAnalyzer.recoverSwitches (cognitive 20): Motorola68KAnalyzer.recoverSwitches has cognitive complexity 20 (threshold 15). Drivers by points: if/else 14, boolean chains 3, loops 3 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Processors/68000/src/main/java/ghidra/app/plugin/core/analysis/Motorola68KAnalyzer.java"},"region":{"startLine":174}}}],"partialFingerprints":{"codehealthFindingId/v1":"f983fc597ff8a6444e173e8ab9aab197ca807a145e48805162f9c425544ba969"}},{"ruleId":"D2","level":"warning","message":{"text":"OrExpressionSolver.tryCircularShiftExpression (cognitive 20): OrExpressionSolver.tryCircularShiftExpression has cognitive complexity 20 (threshold 15). Drivers by points: if/else 17, boolean chains 3 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/assembler/sleigh/expr/OrExpressionSolver.java"},"region":{"startLine":96}}}],"partialFingerprints":{"codehealthFindingId/v1":"23b5195bac661575b154714906950cb5a530a14a2466289dd397df603502f1a8"}},{"ruleId":"D2","level":"warning","message":{"text":"AssemblyContextGraph.computeOutEdges (cognitive 20): AssemblyContextGraph.computeOutEdges has cognitive complexity 20 (threshold 15). Drivers by points: if/else 14, loops 6 (nesting depth added 13). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/assembler/sleigh/sem/AssemblyContextGraph.java"},"region":{"startLine":344}}}],"partialFingerprints":{"codehealthFindingId/v1":"c016bc9e0b27017efb4e16e13112c4f52e327120ac317aa434bd644cf8270530"}},{"ruleId":"D2","level":"warning","message":{"text":"ConstructorPcodeTemplate.getPcode (cognitive 20): ConstructorPcodeTemplate.getPcode has cognitive complexity 20 (threshold 15). Drivers by points: if/else 19, loops 1 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/processors/generic/ConstructorPcodeTemplate.java"},"region":{"startLine":169}}}],"partialFingerprints":{"codehealthFindingId/v1":"2c0cc060a6c37d54e7c879270c0da838ef6e020920e99102dd18f50c4f486574"}},{"ruleId":"D2","level":"warning","message":{"text":"ContextPattern.debugPatternMatch (cognitive 20): ContextPattern.debugPatternMatch has cognitive complexity 20 (threshold 15). Drivers by points: if/else 12, loops 4, ternaries 4 (nesting depth added 12). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/processors/sleigh/pattern/ContextPattern.java"},"region":{"startLine":94}}}],"partialFingerprints":{"codehealthFindingId/v1":"ca731c132c5302f4f117a0e001a56f9f0a256a18d4aec80eee3282f3ebb57e9a"}},{"ruleId":"D2","level":"warning","message":{"text":"ConstTpl.fix (cognitive 20): ConstTpl.fix has cognitive complexity 20 (threshold 15). Drivers by points: if/else 17, match/switch 3 (nesting depth added 12). The drivers above price the dispatch low by construction \u2014 a dispatch is charged once however many cases it lists, while each branch inside an arm is charged in full \u2014 so most of this count is what the case bodies hold, and the arms are where it can be reduced. To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/processors/sleigh/template/ConstTpl.java"},"region":{"startLine":139}}}],"partialFingerprints":{"codehealthFindingId/v1":"b2019dc99e3c59ecc5094fa6cb3e1018fd93f02ad69da2b6440393876a545c45"}},{"ruleId":"D2","level":"warning","message":{"text":"PseudoDisassembler.pseudoDisassemble (cognitive 20): PseudoDisassembler.pseudoDisassemble has cognitive complexity 20 (threshold 15). Drivers by points: if/else 16, boolean chains 4 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/util/PseudoDisassembler.java"},"region":{"startLine":860}}}],"partialFingerprints":{"codehealthFindingId/v1":"043ef148920fbf76ffa46768f54d7433fa8f8ad2674de37fefeed2cb01d8ffa0"}},{"ruleId":"D2","level":"warning","message":{"text":"SleighCompileOptions.processArg (cognitive 20): SleighCompileOptions.processArg has cognitive complexity 20 (threshold 15). Drivers by points: if/else 16, boolean chains 3, match/switch 1 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slgh_compile/SleighCompileOptions.java"},"region":{"startLine":170}}}],"partialFingerprints":{"codehealthFindingId/v1":"40e861a7fee615dfa428ba63f02133914a59b71bba763ba7a42e2d6c48f4a2de"}},{"ruleId":"D2","level":"warning","message":{"text":"DataTypeManagerDB.resolve (cognitive 20): DataTypeManagerDB.resolve has cognitive complexity 20 (threshold 15). Drivers by points: if/else 17, boolean chains 3 (nesting depth added 2). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition, and where an else follows a branch that already returns, drop the trailing else and let the rest of the body continue at one level."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/DataTypeManagerDB.java"},"region":{"startLine":1194}}}],"partialFingerprints":{"codehealthFindingId/v1":"07f126cd9ea90df09aa7ad22cf4a12b4cf36da114e106f80e9b46f1460191f84"}},{"ruleId":"D2","level":"warning","message":{"text":"UnionDB.delete (cognitive 20): UnionDB.delete has cognitive complexity 20 (threshold 15). Drivers by points: if/else 18, error handling 1, loops 1 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/UnionDB.java"},"region":{"startLine":217}}}],"partialFingerprints":{"codehealthFindingId/v1":"1b1a044b7e71a4244d42d770ea3518559bdceb3e5a60e60341ef2b65e057be28"}},{"ruleId":"D2","level":"warning","message":{"text":"ReferenceDBManager.addRef (cognitive 20): ReferenceDBManager.addRef has cognitive complexity 20 (threshold 15). Drivers by points: if/else 13, boolean chains 6, ternaries 1 (nesting depth added 3). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/references/ReferenceDBManager.java"},"region":{"startLine":351}}}],"partialFingerprints":{"codehealthFindingId/v1":"82c77d08cca4a36ee000923c50225cde29800919a4b2c33a1e1402b4c1d80a00"}},{"ruleId":"D2","level":"warning","message":{"text":"ProgramRegisterContextDB.setLanguage (cognitive 20): ProgramRegisterContextDB.setLanguage has cognitive complexity 20 (threshold 15). Drivers by points: if/else 15, boolean chains 4, loops 1 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/register/ProgramRegisterContextDB.java"},"region":{"startLine":296}}}],"partialFingerprints":{"codehealthFindingId/v1":"0373e0b8a6d7a7d0090012e8118eef2b7df875506a1ab158d05241838159dbaa"}},{"ruleId":"D2","level":"warning","message":{"text":"DataTypeArchiveContentHandler.getDomainObject (cognitive 20): DataTypeArchiveContentHandler.getDomainObject has cognitive complexity 20 (threshold 15). Drivers by points: if/else 14, error handling 4, boolean chains 1, ternaries 1 (nesting depth added 5). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/DataTypeArchiveContentHandler.java"},"region":{"startLine":175}}}],"partialFingerprints":{"codehealthFindingId/v1":"6419b671ee03a84034ee4cb67b674d014db37e9c4683d758b738c20dd3b5f1ea"}},{"ruleId":"D2","level":"warning","message":{"text":"ProgramDB.setLanguage (cognitive 20): ProgramDB.setLanguage has cognitive complexity 20 (threshold 15). Drivers by points: if/else 17, boolean chains 2, error handling 1 (nesting depth added 5). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/ProgramDB.java"},"region":{"startLine":2047}}}],"partialFingerprints":{"codehealthFindingId/v1":"9312a38b02d21d27b713e43c8e8f75b1a8bc13595362b8bebf414c5778f95405"}},{"ruleId":"D2","level":"warning","message":{"text":"Disassembler.pseudoDisassembleBlock (cognitive 20): Disassembler.pseudoDisassembleBlock has cognitive complexity 20 (threshold 15). Drivers by points: if/else 15, boolean chains 4, error handling 1 (nesting depth added 5). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/disassemble/Disassembler.java"},"region":{"startLine":778}}}],"partialFingerprints":{"codehealthFindingId/v1":"41a0ee04705e9f193db94e63de143b8fe0866d83701ba9eeb60dec7148d06309"}},{"ruleId":"D2","level":"warning","message":{"text":"DisassemblerQueue.getNextBlockToBeDisassembled (cognitive 20): DisassemblerQueue.getNextBlockToBeDisassembled has cognitive complexity 20 (threshold 15). Drivers by points: if/else 15, boolean chains 4, loops 1 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/disassemble/DisassemblerQueue.java"},"region":{"startLine":129}}}],"partialFingerprints":{"codehealthFindingId/v1":"c84c8e1d03a448577a654347c5d219a836a7d3ca75b3290fd2b74eb6c6134a63"}},{"ruleId":"D2","level":"warning","message":{"text":"FollowFlow.followCode (cognitive 20): FollowFlow.followCode has cognitive complexity 20 (threshold 15). Drivers by points: if/else 14, loops 3, error handling 2, boolean chains 1 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/block/FollowFlow.java"},"region":{"startLine":328}}}],"partialFingerprints":{"codehealthFindingId/v1":"3ffb0deaaec13185d2fd68e5728d857c6823965ab6f41b81397f4f63461e66ca"}},{"ruleId":"D2","level":"warning","message":{"text":"FollowFlow.followData (cognitive 20): FollowFlow.followData has cognitive complexity 20 (threshold 15). Drivers by points: if/else 16, loops 3, boolean chains 1 (nesting depth added 12). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/block/FollowFlow.java"},"region":{"startLine":826}}}],"partialFingerprints":{"codehealthFindingId/v1":"13c0e05da28113dd009deb0d19132470e432e8338124704b3b911b0491457222"}},{"ruleId":"D2","level":"warning","message":{"text":"FollowFlow.getFlowsAndPointersToInstruction (cognitive 20): FollowFlow.getFlowsAndPointersToInstruction has cognitive complexity 20 (threshold 15). Drivers by points: if/else 16, boolean chains 3, loops 1 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/block/FollowFlow.java"},"region":{"startLine":775}}}],"partialFingerprints":{"codehealthFindingId/v1":"1a17ee84934baab2974b1c442e1275c40ea57f40c2f21a479cf3ccc26ff492fa"}},{"ruleId":"D2","level":"warning","message":{"text":"IsolatedEntrySubModel.getSubroutine (cognitive 20): IsolatedEntrySubModel.getSubroutine has cognitive complexity 20 (threshold 15). Drivers by points: if/else 14, loops 4, boolean chains 2 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/block/IsolatedEntrySubModel.java"},"region":{"startLine":77}}}],"partialFingerprints":{"codehealthFindingId/v1":"5ae5f1f8a195236cf837088b7d0ef9707c07ae1ff6e08aaa97ab3fc7cb726895"}},{"ruleId":"D2","level":"warning","message":{"text":"SingleEntSubIterator.hasNext (cognitive 20): SingleEntSubIterator.hasNext has cognitive complexity 20 (threshold 15). Drivers by points: if/else 18, loops 2 (nesting depth added 11). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/block/SingleEntSubIterator.java"},"region":{"startLine":103}}}],"partialFingerprints":{"codehealthFindingId/v1":"45adc43f91cb5aacd789425df95922e0b2ffb20d55f0929547b0f6db4909cae4"}},{"ruleId":"D2","level":"warning","message":{"text":"MultiSlotAssign.assignAddress (cognitive 20): MultiSlotAssign.assignAddress has cognitive complexity 20 (threshold 15). Drivers by points: if/else 16, boolean chains 2, loops 2 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/lang/protorules/MultiSlotAssign.java"},"region":{"startLine":192}}}],"partialFingerprints":{"codehealthFindingId/v1":"5c1a6d8992d2a6e026dfaeb33ed96cf4001117e46cfe104ea91289bce8704b32"}},{"ruleId":"D2","level":"warning","message":{"text":"SizeRestrictedFilter.restoreAttributesXml (cognitive 20): SizeRestrictedFilter.restoreAttributesXml has cognitive complexity 20 (threshold 15). Drivers by points: if/else 17, boolean chains 2, loops 1 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/lang/protorules/SizeRestrictedFilter.java"},"region":{"startLine":169}}}],"partialFingerprints":{"codehealthFindingId/v1":"0698258f2dbb07c093905b49e9ca4e3b812e99bb18926257a8aa4915ce7a8771"}},{"ruleId":"D2","level":"warning","message":{"text":"ContextSetting.encodeContextData (cognitive 20): ContextSetting.encodeContextData has cognitive complexity 20 (threshold 15). Drivers by points: if/else 13, ternaries 4, loops 3 (nesting depth added 11). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/lang/ContextSetting.java"},"region":{"startLine":171}}}],"partialFingerprints":{"codehealthFindingId/v1":"7c004a6ace94f2a3cecdbe4b187ae3044a53f48a24455e2fc37aba20cac06dc5"}},{"ruleId":"D2","level":"warning","message":{"text":"ParamListStandard.restoreXml (cognitive 20): ParamListStandard.restoreXml has cognitive complexity 20 (threshold 15). Drivers by points: if/else 16, error handling 2, loops 2 (nesting depth added 5). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/lang/ParamListStandard.java"},"region":{"startLine":334}}}],"partialFingerprints":{"codehealthFindingId/v1":"831bfff005b5522735819ccea4a96f2fab1fa059a7edb3d21639e773cb07fed0"}},{"ruleId":"D2","level":"warning","message":{"text":"EquateSymbol.convertName (cognitive 20): EquateSymbol.convertName has cognitive complexity 20 (threshold 15). Drivers by points: if/else 14, boolean chains 4, match/switch 2 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/pcode/EquateSymbol.java"},"region":{"startLine":195}}}],"partialFingerprints":{"codehealthFindingId/v1":"4865579beb14ec2c877b1d9b8962a6a147d56b57fcc7ad3d02d9669d20f82076"}},{"ruleId":"D2","level":"warning","message":{"text":"JumpTable.decode (cognitive 20): JumpTable.decode has cognitive complexity 20 (threshold 15). Drivers by points: if/else 16, loops 4 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/pcode/JumpTable.java"},"region":{"startLine":152}}}],"partialFingerprints":{"codehealthFindingId/v1":"447d94201ab00d73a9a1c2386232593fac7cd0f91c95cb552d867052902a8c8c"}},{"ruleId":"D2","level":"warning","message":{"text":"Scalar.toString (cognitive 20): Scalar.toString has cognitive complexity 20 (threshold 15). Drivers by points: if/else 14, match/switch 3, loops 2, boolean chains 1 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/scalar/Scalar.java"},"region":{"startLine":226}}}],"partialFingerprints":{"codehealthFindingId/v1":"0b18d656bb65e8808c5eab6f85d368131e968a4e43e4ac679c024043fc8d3c01"}},{"ruleId":"D2","level":"warning","message":{"text":"RefTypeFactory.getLoadStoreRefType (cognitive 20): RefTypeFactory.getLoadStoreRefType has cognitive complexity 20 (threshold 15). Drivers by points: if/else 19, loops 1 (nesting depth added 13). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/symbol/RefTypeFactory.java"},"region":{"startLine":593}}}],"partialFingerprints":{"codehealthFindingId/v1":"3e04ad15e68759ac7155ca85f899fc17b58a5b4165b126b4607e1a100e257d4d"}},{"ruleId":"D2","level":"warning","message":{"text":"LanguageTranslatorFactory.getLanguageVersionTranslator (cognitive 20): LanguageTranslatorFactory.getLanguageVersionTranslator has cognitive complexity 20 (threshold 15). Drivers by points: if/else 17, boolean chains 2, loops 1 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/util/LanguageTranslatorFactory.java"},"region":{"startLine":357}}}],"partialFingerprints":{"codehealthFindingId/v1":"0a8caba1b24db1a98b768e233dc2e1fdd011db20299e4e362d8b55c53ca0c634"}},{"ruleId":"D2","level":"warning","message":{"text":"OldLanguage.parseDescription (cognitive 20): OldLanguage.parseDescription has cognitive complexity 20 (threshold 15). Drivers by points: if/else 12, error handling 7, loops 1 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/util/OldLanguage.java"},"region":{"startLine":536}}}],"partialFingerprints":{"codehealthFindingId/v1":"37dac0ef4c99e5d35635113630b287a0bbf7c0a48d8f5e77f239fed584d28beb"}},{"ruleId":"D2","level":"warning","message":{"text":"SimpleDiffUtility.getCompatibleVarnode (cognitive 20): SimpleDiffUtility.getCompatibleVarnode has cognitive complexity 20 (threshold 15). Drivers by points: if/else 17, boolean chains 3 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/util/SimpleDiffUtility.java"},"region":{"startLine":68}}}],"partialFingerprints":{"codehealthFindingId/v1":"ebc7ded48069529e4351ae2d8d1788b482e8230026a581c5cbc7d3b99d20ef8e"}},{"ruleId":"D2","level":"warning","message":{"text":"VariableStorageConflicts.\u003Cinit\u003E (cognitive 20): VariableStorageConflicts.\u003Cinit\u003E has cognitive complexity 20 (threshold 15). Drivers by points: if/else 17, ternaries 2, loops 1 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/util/VariableStorageConflicts.java"},"region":{"startLine":52}}}],"partialFingerprints":{"codehealthFindingId/v1":"4e59e21a1241ff4f15a2693c89d3b2980c23bad2df17616b2e115cfc0cacbd68"}},{"ruleId":"D2","level":"warning","message":{"text":"EditPluginPathDialog.handleSelection (cognitive 20): EditPluginPathDialog.handleSelection has cognitive complexity 20 (threshold 15). Drivers by points: if/else 18, loops 2 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Project/src/main/java/ghidra/framework/main/EditPluginPathDialog.java"},"region":{"startLine":385}}}],"partialFingerprints":{"codehealthFindingId/v1":"94a001ba54cbc7285783308513871dcfacf4371fd914074ef50d2ee2fcb3da44"}},{"ruleId":"D2","level":"warning","message":{"text":"AbstractGuiTest.findComponentByName (cognitive 20): AbstractGuiTest.findComponentByName has cognitive complexity 20 (threshold 15). Drivers by points: if/else 14, boolean chains 3, loops 3 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Gui/src/main/java/generic/test/AbstractGuiTest.java"},"region":{"startLine":336}}}],"partialFingerprints":{"codehealthFindingId/v1":"cbac8f81586746bb476fb3b52fdfdaae07639fb2240e0f587997a0f7fcaa9687"}},{"ruleId":"D2","level":"warning","message":{"text":"HtmlLineSplitter.wrap (cognitive 20): HtmlLineSplitter.wrap has cognitive complexity 20 (threshold 15). Drivers by points: if/else 16, ternaries 3, loops 1 (nesting depth added 11). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Gui/src/main/java/ghidra/util/html/HtmlLineSplitter.java"},"region":{"startLine":114}}}],"partialFingerprints":{"codehealthFindingId/v1":"40e3c5de89be2aeee936cfe0dc52b21cf81f3af70b8f2ba6006ec4f08b0e6f97"}},{"ruleId":"D2","level":"warning","message":{"text":"PKIUtils.createKeyStore (cognitive 20): PKIUtils.createKeyStore has cognitive complexity 20 (threshold 15). Drivers by points: if/else 9, error handling 4, ternaries 3, boolean chains 2, loops 2 (nesting depth added 5). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Generic/src/main/java/ghidra/net/PKIUtils.java"},"region":{"startLine":184}}}],"partialFingerprints":{"codehealthFindingId/v1":"a12632738c5837bf743f145a8f49249c3cf5530f5ac72da693a19d3288da07aa"}},{"ruleId":"D2","level":"warning","message":{"text":"LocalFolderItem.delete (cognitive 20): LocalFolderItem.delete has cognitive complexity 20 (threshold 15). Drivers by points: if/else 20 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/FileSystem/src/main/java/ghidra/framework/store/local/LocalFolderItem.java"},"region":{"startLine":301}}}],"partialFingerprints":{"codehealthFindingId/v1":"166cab3abd1d739be43a540b4e1eb94cbd2cd014388516f1349f400580c51310"}},{"ruleId":"D2","level":"warning","message":{"text":"FileComparator.compare (cognitive 20): FileComparator.compare has cognitive complexity 20 (threshold 15). Drivers by points: if/else 19, boolean chains 1 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Docking/src/main/java/docking/widgets/filechooser/FileComparator.java"},"region":{"startLine":45}}}],"partialFingerprints":{"codehealthFindingId/v1":"c121cb6264d3c39a30df1851ddea31e4afef7c23cf9a7b8afbe5867bfea1bc8f"}},{"ruleId":"D2","level":"warning","message":{"text":"ElidingFilePathTextField.partsToString (cognitive 20): ElidingFilePathTextField.partsToString has cognitive complexity 20 (threshold 15). Drivers by points: if/else 13, ternaries 4, boolean chains 2, loops 1 (nesting depth added 11). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Docking/src/main/java/docking/widgets/textfield/ElidingFilePathTextField.java"},"region":{"startLine":138}}}],"partialFingerprints":{"codehealthFindingId/v1":"e04a3e2a85c1fe7513e5b73d1f433eb1334ae1a0d321a74e38a69405f91ddf31"}},{"ruleId":"D2","level":"warning","message":{"text":"ChainedBuffer.append (cognitive 20): ChainedBuffer.append has cognitive complexity 20 (threshold 15). Drivers by points: if/else 12, loops 7, boolean chains 1 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/DB/src/main/java/db/ChainedBuffer.java"},"region":{"startLine":668}}}],"partialFingerprints":{"codehealthFindingId/v1":"fbb5f43c433ddb8b2076c1151dd23e93371c81bd82b486e503f04100ef53e7d1"}},{"ruleId":"D2","level":"warning","message":{"text":"VTAbstractReferenceProgramCorrelator.accumulateFunctionReferences (cognitive 20): VTAbstractReferenceProgramCorrelator.accumulateFunctionReferences has cognitive complexity 20 (threshold 15). Drivers by points: if/else 15, loops 4, boolean chains 1 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/VersionTracking/src/main/java/ghidra/feature/vt/api/correlator/program/VTAbstractReferenceProgramCorrelator.java"},"region":{"startLine":291}}}],"partialFingerprints":{"codehealthFindingId/v1":"f88addf9af8b407a5f3c652ded8d62854e2fe270167b52dc7c0dd50bc2a637fd"}},{"ruleId":"D2","level":"warning","message":{"text":"VTRelatedMatchUtil.getRelatedMatches (cognitive 20): VTRelatedMatchUtil.getRelatedMatches has cognitive complexity 20 (threshold 15). Drivers by points: if/else 16, loops 3, boolean chains 1 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/VersionTracking/src/main/java/ghidra/feature/vt/api/util/VTRelatedMatchUtil.java"},"region":{"startLine":32}}}],"partialFingerprints":{"codehealthFindingId/v1":"1f76394b5b0686eff3dd1728510c89670788fe444b23336db511362a80b61658"}},{"ruleId":"D2","level":"warning","message":{"text":"VTSessionFileUtil.validateDestinationProgramFile (cognitive 20): VTSessionFileUtil.validateDestinationProgramFile has cognitive complexity 20 (threshold 15). Drivers by points: if/else 19, boolean chains 1 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/VersionTracking/src/main/java/ghidra/feature/vt/api/util/VTSessionFileUtil.java"},"region":{"startLine":88}}}],"partialFingerprints":{"codehealthFindingId/v1":"27aae19800f73618e081fd94cb93c1c7d1659441f01e826704376de5f617c0f9"}},{"ruleId":"D2","level":"warning","message":{"text":"MarkupSarifMgr.read (cognitive 20): MarkupSarifMgr.read has cognitive complexity 20 (threshold 15). Drivers by points: if/else 17, boolean chains 3 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/Sarif/src/main/java/sarif/managers/MarkupSarifMgr.java"},"region":{"startLine":81}}}],"partialFingerprints":{"codehealthFindingId/v1":"a72087a9462262bad8b9c69b06a5c7ab6206dc4f4a8f8dfa63b6e960174986ee"}},{"ruleId":"D2","level":"warning","message":{"text":"CppCompositeType.updateVft (cognitive 20): CppCompositeType.updateVft has cognitive complexity 20 (threshold 15). Drivers by points: if/else 17, boolean chains 2, loops 1 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/PDB/src/main/java/ghidra/app/util/pdb/pdbapplicator/CppCompositeType.java"},"region":{"startLine":2016}}}],"partialFingerprints":{"codehealthFindingId/v1":"55fcb6529e043015c56f0f981a8c1e287610da9bce01defe3f539efbf1a1d459"}},{"ruleId":"D2","level":"warning","message":{"text":"ObjcMessageAnalyzer.getIvarName (cognitive 20): ObjcMessageAnalyzer.getIvarName has cognitive complexity 20 (threshold 15). Drivers by points: if/else 17, loops 3 (nesting depth added 13). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/Objective-C/src/main/java/ghidra/app/plugin/core/analysis/ObjcMessageAnalyzer.java"},"region":{"startLine":874}}}],"partialFingerprints":{"codehealthFindingId/v1":"c05d900e9e110a6c870f336191357148d7a5ef709b413677e19d5abced02773e"}},{"ruleId":"D2","level":"warning","message":{"text":"GnuDemanglerParser.findNamespaceStart (cognitive 20): GnuDemanglerParser.findNamespaceStart has cognitive complexity 20 (threshold 15). Drivers by points: if/else 11, boolean chains 6, match/switch 2, loops 1 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/GnuDemangler/src/main/java/ghidra/app/util/demangler/gnu/GnuDemanglerParser.java"},"region":{"startLine":1304}}}],"partialFingerprints":{"codehealthFindingId/v1":"fa26854672769a9e7508cf30ff600374e58aaa6fac8534997b16ded731e6db79"}},{"ruleId":"D2","level":"warning","message":{"text":"FidProgramSeeker.getParents (cognitive 20): FidProgramSeeker.getParents has cognitive complexity 20 (threshold 15). Drivers by points: if/else 17, loops 3 (nesting depth added 12). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/FunctionID/src/main/java/ghidra/feature/fid/service/FidProgramSeeker.java"},"region":{"startLine":142}}}],"partialFingerprints":{"codehealthFindingId/v1":"ff6329f3fc495373e1719fa265867a376f8e1d56f1bf4f963f9204841e7983cd"}},{"ruleId":"D2","level":"warning","message":{"text":"FGViewUpdater.createNewGroupedEdges (cognitive 20): FGViewUpdater.createNewGroupedEdges has cognitive complexity 20 (threshold 15). Drivers by points: if/else 18, loops 2 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/FunctionGraph/src/main/java/ghidra/graph/viewer/FGViewUpdater.java"},"region":{"startLine":514}}}],"partialFingerprints":{"codehealthFindingId/v1":"0f039b85f06b9f359eb9044af4001fc8b8a24e1c68c3c651e7c62abe1a755794"}},{"ruleId":"D2","level":"warning","message":{"text":"AndroidProjectCreator.processListing (cognitive 20): AndroidProjectCreator.processListing has cognitive complexity 20 (threshold 15). Drivers by points: if/else 16, error handling 2, boolean chains 1, loops 1 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/FileFormats/src/main/java/ghidra/file/eclipse/AndroidProjectCreator.java"},"region":{"startLine":117}}}],"partialFingerprints":{"codehealthFindingId/v1":"344e8ed6e64e4a592128e069beee10f3d785d6730f3a867a4dc9b5c14e42ecd7"}},{"ruleId":"D2","level":"warning","message":{"text":"NewExt4Analyzer.processIBlock (cognitive 20): NewExt4Analyzer.processIBlock has cognitive complexity 20 (threshold 15). Drivers by points: if/else 12, loops 8 (nesting depth added 11). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/ext4/NewExt4Analyzer.java"},"region":{"startLine":338}}}],"partialFingerprints":{"codehealthFindingId/v1":"328d3ec32d488786fa126aa4c90c62c0064ec679e7134003a303d75e51ed37f9"}},{"ruleId":"D2","level":"warning","message":{"text":"iOS_KextStubFixupAnalyzer.analyze (cognitive 20): iOS_KextStubFixupAnalyzer.analyze has cognitive complexity 20 (threshold 15). Drivers by points: if/else 19, loops 1 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/ios/generic/iOS_KextStubFixupAnalyzer.java"},"region":{"startLine":78}}}],"partialFingerprints":{"codehealthFindingId/v1":"dba033b10a8dcfb48d1e68ef311b85ea60fd76de14b866e078f445aa586dc82e"}},{"ruleId":"D2","level":"warning","message":{"text":"CFStringAnalyzer.added (cognitive 20): CFStringAnalyzer.added has cognitive complexity 20 (threshold 15). Drivers by points: if/else 12, error handling 7, loops 1 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/FileFormats/src/main/java/ghidra/macosx/analyzers/CFStringAnalyzer.java"},"region":{"startLine":49}}}],"partialFingerprints":{"codehealthFindingId/v1":"c79a34a5e8e74b817b0ff88eaff9b94694d2458f3ba2643a11f97cfc3dd65c6d"}},{"ruleId":"D2","level":"warning","message":{"text":"MacosxLanguageHelper.getLanguageCompilerSpecPair (cognitive 20): MacosxLanguageHelper.getLanguageCompilerSpecPair has cognitive complexity 20 (threshold 15). Drivers by points: if/else 10, ternaries 7, boolean chains 3 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/FileFormats/src/main/java/ghidra/macosx/MacosxLanguageHelper.java"},"region":{"startLine":35}}}],"partialFingerprints":{"codehealthFindingId/v1":"df164884be9084083dfcbcffd122d72e6f78b04ab179c46a20090d92beb8db06"}},{"ruleId":"D2","level":"warning","message":{"text":"FormatStringAnalyzer.run (cognitive 20): FormatStringAnalyzer.run has cognitive complexity 20 (threshold 15). Drivers by points: if/else 11, loops 8, ternaries 1 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/DecompilerDependent/src/main/java/ghidra/app/plugin/core/string/variadic/FormatStringAnalyzer.java"},"region":{"startLine":102}}}],"partialFingerprints":{"codehealthFindingId/v1":"fcd4b8bac48a44e18f4acfcfc7810940c46fd485740b5c4bb2aab1845d80ce4b"}},{"ruleId":"D2","level":"warning","message":{"text":"DecompilerSwitchAnalysisCmd.labelLoadTable (cognitive 20): DecompilerSwitchAnalysisCmd.labelLoadTable has cognitive complexity 20 (threshold 15). Drivers by points: if/else 13, loops 4, boolean chains 3 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/Decompiler/src/main/java/ghidra/app/cmd/function/DecompilerSwitchAnalysisCmd.java"},"region":{"startLine":419}}}],"partialFingerprints":{"codehealthFindingId/v1":"df82431ea17d5e58b8065152b5949cb63eaa7c85e5f72a84b1bc25c15671be5c"}},{"ruleId":"D2","level":"warning","message":{"text":"DecompilerProgramListener.domainObjectChanged (cognitive 20): DecompilerProgramListener.domainObjectChanged has cognitive complexity 20 (threshold 15). Drivers by points: if/else 17, loops 3 (nesting depth added 14). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/Decompiler/src/main/java/ghidra/app/decompiler/component/DecompilerProgramListener.java"},"region":{"startLine":60}}}],"partialFingerprints":{"codehealthFindingId/v1":"8ac927f75a79a3c36c28c0916d76ac570d960b2f012f40874bfab7fd3fd69cbe"}},{"ruleId":"D2","level":"warning","message":{"text":"DecompileDebug.dumpDatabases (cognitive 20): DecompileDebug.dumpDatabases has cognitive complexity 20 (threshold 15). Drivers by points: if/else 14, loops 3, ternaries 3 (nesting depth added 11). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/Decompiler/src/main/java/ghidra/app/decompiler/DecompileDebug.java"},"region":{"startLine":545}}}],"partialFingerprints":{"codehealthFindingId/v1":"da3ca1166df59e9a9c742f821f46fb68e4055deae80e09e4237cd3cc2c4424ac"}},{"ruleId":"D2","level":"warning","message":{"text":"DecompilerCallConventionAnalyzer.findLocations (cognitive 20): DecompilerCallConventionAnalyzer.findLocations has cognitive complexity 20 (threshold 15). Drivers by points: if/else 17, boolean chains 2, loops 1 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/Decompiler/src/main/java/ghidra/app/plugin/core/analysis/DecompilerCallConventionAnalyzer.java"},"region":{"startLine":172}}}],"partialFingerprints":{"codehealthFindingId/v1":"1cd8ed675cc2d4fc11379910b0234fb4673835869894af3420c4fff24d3bdefa"}},{"ruleId":"D2","level":"warning","message":{"text":"PCodeDfgGraphTask.buildGraph (cognitive 20): PCodeDfgGraphTask.buildGraph has cognitive complexity 20 (threshold 15). Drivers by points: if/else 14, boolean chains 3, loops 3 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/Decompiler/src/main/java/ghidra/app/plugin/core/decompile/actions/PCodeDfgGraphTask.java"},"region":{"startLine":86}}}],"partialFingerprints":{"codehealthFindingId/v1":"086b283532116e5c26d6ec0bde43b66eb3f1a3ddf649470f6a00d7a90c20e943"}},{"ruleId":"D2","level":"warning","message":{"text":"DataGraph.eliminateCasts (cognitive 20): DataGraph.eliminateCasts has cognitive complexity 20 (threshold 15). Drivers by points: if/else 15, loops 4, boolean chains 1 (nesting depth added 11). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/CodeCompare/src/main/java/ghidra/features/codecompare/graphanalysis/DataGraph.java"},"region":{"startLine":218}}}],"partialFingerprints":{"codehealthFindingId/v1":"661cfc7707d779081b4c3f9f5b4d3eb5f72433e580a3804144cea34f30a49812"}},{"ruleId":"D2","level":"warning","message":{"text":"Pinning.collectEqualHash (cognitive 20): Pinning.collectEqualHash has cognitive complexity 20 (threshold 15). Drivers by points: if/else 15, boolean chains 3, loops 2 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/CodeCompare/src/main/java/ghidra/features/codecompare/graphanalysis/Pinning.java"},"region":{"startLine":437}}}],"partialFingerprints":{"codehealthFindingId/v1":"a7948e1d17e4290b5ef4517e23817b317be5fa993e65b7e48ed9a1749289b780"}},{"ruleId":"D2","level":"warning","message":{"text":"ExecutableRecord.diffForUpdate (cognitive 20): ExecutableRecord.diffForUpdate has cognitive complexity 20 (threshold 15). Drivers by points: if/else 14, boolean chains 6 (nesting depth added 1). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/BSim/src/main/java/ghidra/features/bsim/query/description/ExecutableRecord.java"},"region":{"startLine":851}}}],"partialFingerprints":{"codehealthFindingId/v1":"e6a16220b451cb036fc652197dd4f7aaa5e63c45545ae0e90de5a0e090a56f1c"}},{"ruleId":"D2","level":"warning","message":{"text":"BSimServerInfo.\u003Cinit\u003E (cognitive 20): BSimServerInfo.\u003Cinit\u003E has cognitive complexity 20 (threshold 15). Drivers by points: if/else 13, ternaries 5, boolean chains 2 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/BSim/src/main/java/ghidra/features/bsim/query/BSimServerInfo.java"},"region":{"startLine":163}}}],"partialFingerprints":{"codehealthFindingId/v1":"1342c2aba57c149d5909e912537f33c7cc6a62a40073385c460de176a3f7874f"}},{"ruleId":"D2","level":"warning","message":{"text":"GNUExternalDisassembler.initializeMap (cognitive 20): GNUExternalDisassembler.initializeMap has cognitive complexity 20 (threshold 15). Drivers by points: error handling 9, if/else 9, boolean chains 1, loops 1 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Extensions/SleighDevTools/src/main/java/ghidra/app/util/disassemble/GNUExternalDisassembler.java"},"region":{"startLine":772}}}],"partialFingerprints":{"codehealthFindingId/v1":"2a2eb3f912381ff2be00a0ee51c0773d8f29e349a5a5f81ac6775dc846cf7f94"}},{"ruleId":"D2","level":"warning","message":{"text":"PcodeNonRedundantPowersetOfInterval.EgliMilnerConnector (cognitive 20): PcodeNonRedundantPowersetOfInterval.EgliMilnerConnector has cognitive complexity 20 (threshold 15). Drivers by points: if/else 14, loops 6 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Extensions/Lisa/src/main/java/ghidra/lisa/pcode/analyses/PcodeNonRedundantPowersetOfInterval.java"},"region":{"startLine":68}}}],"partialFingerprints":{"codehealthFindingId/v1":"7e911f3d4d8a094bf736ca60919a75523695ed60419340ecbd48637c970c8e6a"}},{"ruleId":"D2","level":"warning","message":{"text":"DBTraceMemorySpace.getViewBytes (cognitive 20): DBTraceMemorySpace.getViewBytes has cognitive complexity 20 (threshold 15). Drivers by points: loops 10, if/else 9, error handling 1 (nesting depth added 9). To reduce it, break up the iteration: give each loop body a named function, and split a multi-phase loop into one function per phase so no single body carries the whole pipeline."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/memory/DBTraceMemorySpace.java"},"region":{"startLine":797}}}],"partialFingerprints":{"codehealthFindingId/v1":"31d49bf5d0b32788b24c24e3cd379b0958be378c8042a3c8867c745791edaae6"}},{"ruleId":"D2","level":"warning","message":{"text":"DebuggerBreakpointMarkerPlugin.computeDefaultKind (cognitive 20): DebuggerBreakpointMarkerPlugin.computeDefaultKind has cognitive complexity 20 (threshold 15). Drivers by points: if/else 17, loops 3 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/gui/breakpoint/DebuggerBreakpointMarkerPlugin.java"},"region":{"startLine":269}}}],"partialFingerprints":{"codehealthFindingId/v1":"51162de5302fdb3d1b3d6be772e6819d80e80f2332b974a518462d6f8f8e1472"}},{"ruleId":"D2","level":"warning","message":{"text":"TraceCallTreeProvider.checkForReturns (cognitive 20): TraceCallTreeProvider.checkForReturns has cognitive complexity 20 (threshold 15). Drivers by points: if/else 18, boolean chains 2 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/gui/tracecalltree/TraceCallTreeProvider.java"},"region":{"startLine":560}}}],"partialFingerprints":{"codehealthFindingId/v1":"07a8e1e9cca50405a74dc23badd0a3af5229570720f68fb7f6ed5878a969f339"}},{"ruleId":"D2","level":"warning","message":{"text":"DebuggerWatchesProvider.activatedApplyDataType (cognitive 20): DebuggerWatchesProvider.activatedApplyDataType has cognitive complexity 20 (threshold 15). Drivers by points: if/else 15, loops 3, error handling 2 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/gui/watch/DebuggerWatchesProvider.java"},"region":{"startLine":626}}}],"partialFingerprints":{"codehealthFindingId/v1":"7e1066fe4725c03a55bc8bc2c997886a3b7b623bca6ab9c81aeb4ec37e9502e9"}},{"ruleId":"D2","level":"warning","message":{"text":"JdiMethods.refresh_reference_types (cognitive 20): JdiMethods.refresh_reference_types has cognitive complexity 20 (threshold 15). Drivers by points: if/else 20 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/Debugger-jpda/src/main/java/ghidra/dbg/jdi/rmi/jpda/JdiMethods.java"},"region":{"startLine":391}}}],"partialFingerprints":{"codehealthFindingId/v1":"b142e96d281673aa85bc031f40783cb9b8cf55baf79c106a56d49deade10c4bc"}},{"ruleId":"D2","level":"warning","message":{"text":"CreateGhidraProjectWizardPage.validate (cognitive 19): CreateGhidraProjectWizardPage.validate has cognitive complexity 19 (threshold 15). Drivers by points: if/else 12, boolean chains 5, error handling 1, ternaries 1 (nesting depth added 1). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"GhidraBuild/EclipsePlugins/GhidraDev/GhidraDevPlugin/src/main/java/ghidradev/ghidraprojectcreator/wizards/pages/CreateGhidraProjectWizardPage.java"},"region":{"startLine":206}}}],"partialFingerprints":{"codehealthFindingId/v1":"29debc5f07864541f3488f482dcd7ccb5dbde38573fd8a7adeef442bc18be028"}},{"ruleId":"D2","level":"warning","message":{"text":"Pic12Analyzer.added (cognitive 19): Pic12Analyzer.added has cognitive complexity 19 (threshold 15). Drivers by points: if/else 14, boolean chains 4, loops 1 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Processors/PIC/src/main/java/ghidra/app/plugin/core/analysis/Pic12Analyzer.java"},"region":{"startLine":157}}}],"partialFingerprints":{"codehealthFindingId/v1":"b3d0d671f14cf73baab7eb034b9802bfc6328f20ea41f64630357a75f4b765a8"}},{"ruleId":"D2","level":"warning","message":{"text":"Pic17c7xxAnalyzer.blockAdded (cognitive 19): Pic17c7xxAnalyzer.blockAdded has cognitive complexity 19 (threshold 15). Drivers by points: if/else 15, boolean chains 3, loops 1 (nesting depth added 4). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Processors/PIC/src/main/java/ghidra/app/plugin/core/analysis/Pic17c7xxAnalyzer.java"},"region":{"startLine":409}}}],"partialFingerprints":{"codehealthFindingId/v1":"e6399a650f429de9d372603c2904a06bd4f4e3422f293c8eb21aba1259b45e05"}},{"ruleId":"D2","level":"warning","message":{"text":"Pic24DInitAnalyzer.added (cognitive 19): Pic24DInitAnalyzer.added has cognitive complexity 19 (threshold 15). Drivers by points: if/else 15, error handling 2, boolean chains 1, loops 1 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Processors/PIC/src/main/java/ghidra/app/plugin/core/analysis/Pic24DInitAnalyzer.java"},"region":{"startLine":62}}}],"partialFingerprints":{"codehealthFindingId/v1":"1511158bcd7395874cfab40612e83c7860647610fedfd9c45708b3605b7512fe"}},{"ruleId":"D2","level":"warning","message":{"text":"HexagonFp64.dfmpyhh (cognitive 19): HexagonFp64.dfmpyhh has cognitive complexity 19 (threshold 15). Drivers by points: if/else 6, boolean chains 5, loops 4, ternaries 4 (nesting depth added 2). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Processors/Hexagon/src/main/java/ghidra/program/emulation/HexagonFp64.java"},"region":{"startLine":101}}}],"partialFingerprints":{"codehealthFindingId/v1":"b9324bcb72b6a3f3d61ab36570778e540c5111ebcd371370b9f9c4aa36f04772"}},{"ruleId":"D2","level":"warning","message":{"text":"ConstantPoolDex.fillinMethod (cognitive 19): ConstantPoolDex.fillinMethod has cognitive complexity 19 (threshold 15). Drivers by points: if/else 14, loops 2, boolean chains 1, error handling 1, ternaries 1 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Processors/Dalvik/src/main/java/ghidra/dalvik/dex/inject/ConstantPoolDex.java"},"region":{"startLine":91}}}],"partialFingerprints":{"codehealthFindingId/v1":"95226349cbed2a42acb1060e2c4e4f61c47b14010455ab7f9b108f94e00dd4e6"}},{"ruleId":"D2","level":"warning","message":{"text":"GhidraLauncher.addExternalJarPaths (cognitive 19): GhidraLauncher.addExternalJarPaths has cognitive complexity 19 (threshold 15). Drivers by points: if/else 15, boolean chains 2, loops 2 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Utility/src/main/java/ghidra/GhidraLauncher.java"},"region":{"startLine":316}}}],"partialFingerprints":{"codehealthFindingId/v1":"e849dbb8838b6e4588cfc49984311ae08d20d99c9d99ac8d52aab26f56d89d88"}},{"ruleId":"D2","level":"warning","message":{"text":"ResultTracker.trySolverFunc (cognitive 19): ResultTracker.trySolverFunc has cognitive complexity 19 (threshold 15). Drivers by points: if/else 13, boolean chains 4, error handling 2 (nesting depth added 5). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/assembler/sleigh/expr/MultExpressionSolver.java"},"region":{"startLine":42}}}],"partialFingerprints":{"codehealthFindingId/v1":"023a29af76f8a88ac66b195c4393d5270c4d10d275814a3a29884a1c1afcbed1"}},{"ruleId":"D2","level":"warning","message":{"text":"PatternExpression.decodeExpression (cognitive 19): PatternExpression.decodeExpression has cognitive complexity 19 (threshold 15). Drivers by points: if/else 19. To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/processors/sleigh/expression/PatternExpression.java"},"region":{"startLine":38}}}],"partialFingerprints":{"codehealthFindingId/v1":"3bd936178ce7dd03ddc15a69112dddb3c04b70510755e6dd519f280cf4bc499c"}},{"ruleId":"D2","level":"warning","message":{"text":"SleighInstructionPrototype.cacheDefaultOperandRefTypes (cognitive 19): SleighInstructionPrototype.cacheDefaultOperandRefTypes has cognitive complexity 19 (threshold 15). Drivers by points: if/else 12, loops 4, boolean chains 2, error handling 1 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/processors/sleigh/SleighInstructionPrototype.java"},"region":{"startLine":1169}}}],"partialFingerprints":{"codehealthFindingId/v1":"74f8e121f5b54d02dc176aa241176579653325d79812d8b27cf0b635946a8cae"}},{"ruleId":"D2","level":"warning","message":{"text":"SleighLanguage.loadRegisters (cognitive 19): SleighLanguage.loadRegisters has cognitive complexity 19 (threshold 15). Drivers by points: if/else 18, loops 1 (nesting depth added 11). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/processors/sleigh/SleighLanguage.java"},"region":{"startLine":1009}}}],"partialFingerprints":{"codehealthFindingId/v1":"f9f1c435e0e376287acab4edaaaf255daa80cf268e9355fd02a15468fbcab451"}},{"ruleId":"D2","level":"warning","message":{"text":"PseudoDisassembler.checkNonReturning (cognitive 19): PseudoDisassembler.checkNonReturning has cognitive complexity 19 (threshold 15). Drivers by points: if/else 14, loops 3, boolean chains 2 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/util/PseudoDisassembler.java"},"region":{"startLine":907}}}],"partialFingerprints":{"codehealthFindingId/v1":"bb34d712ffc868721c5464e046847d64e70b66ec92759010ce2a9f3e57c0139c"}},{"ruleId":"D2","level":"warning","message":{"text":"ConsistencyChecker.testTruncations (cognitive 19): ConsistencyChecker.testTruncations has cognitive complexity 19 (threshold 15). Drivers by points: if/else 13, loops 6 (nesting depth added 12). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slgh_compile/ConsistencyChecker.java"},"region":{"startLine":1314}}}],"partialFingerprints":{"codehealthFindingId/v1":"4a9ebd40aae1445d3921f05769f8ba68453bcbab8a7c95685664214ffeebb244"}},{"ruleId":"D2","level":"warning","message":{"text":"PcodeCompile.assignBitRange (cognitive 19): PcodeCompile.assignBitRange has cognitive complexity 19 (threshold 15). Drivers by points: if/else 17, boolean chains 2 (nesting depth added 5). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slgh_compile/PcodeCompile.java"},"region":{"startLine":526}}}],"partialFingerprints":{"codehealthFindingId/v1":"c15c225b88749803ed870eede260704128a4a424181b1c3627e19efc97707ff0"}},{"ruleId":"D2","level":"warning","message":{"text":"PcodeCompile.isInternalFunction (cognitive 19): PcodeCompile.isInternalFunction has cognitive complexity 19 (threshold 15). Drivers by points: if/else 19. To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slgh_compile/PcodeCompile.java"},"region":{"startLine":1024}}}],"partialFingerprints":{"codehealthFindingId/v1":"00e901f3cd0b762cd6648b5b503c96bbf85e9aed3296d537050f7dc8768aff89"}},{"ruleId":"D2","level":"warning","message":{"text":"SleighCompile.attachVarnodes (cognitive 19): SleighCompile.attachVarnodes has cognitive complexity 19 (threshold 15). Drivers by points: if/else 15, loops 3, boolean chains 1 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slgh_compile/SleighCompile.java"},"region":{"startLine":1168}}}],"partialFingerprints":{"codehealthFindingId/v1":"527a5731a6316118851c2c1c995c21b09a52158b7c2348f0ecac231aeea04fc4"}},{"ruleId":"D2","level":"warning","message":{"text":"StructureDB.insertAtOffset (cognitive 19): StructureDB.insertAtOffset has cognitive complexity 19 (threshold 15). Drivers by points: if/else 14, error handling 3, boolean chains 2 (nesting depth added 4). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition, and where an else follows a branch that already returns, drop the trailing else and let the rest of the body continue at one level."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/StructureDB.java"},"region":{"startLine":1220}}}],"partialFingerprints":{"codehealthFindingId/v1":"733ae392653659e05cacdfe064c0881cd4592415de0db1f69458e2d9dd6ce055"}},{"ruleId":"D2","level":"warning","message":{"text":"FunctionManagerDB.createFunction (cognitive 19): FunctionManagerDB.createFunction has cognitive complexity 19 (threshold 15). Drivers by points: if/else 14, boolean chains 3, error handling 2 (nesting depth added 3). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/function/FunctionManagerDB.java"},"region":{"startLine":225}}}],"partialFingerprints":{"codehealthFindingId/v1":"dafc10c03b68394dda31dd516df65d4d248b1ce3bb7790d12cf2770e663fa81e"}},{"ruleId":"D2","level":"warning","message":{"text":"RefListV0.setSymbolID (cognitive 19): RefListV0.setSymbolID has cognitive complexity 19 (threshold 15). Drivers by points: if/else 14, ternaries 4, loops 1 (nesting depth added 11). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/references/RefListV0.java"},"region":{"startLine":405}}}],"partialFingerprints":{"codehealthFindingId/v1":"884534d51aa2998711f7e14934e56acb8d6744435c05a80330544a470fb04d6c"}},{"ruleId":"D2","level":"warning","message":{"text":"ProgramDB.checkOldProperties (cognitive 19): ProgramDB.checkOldProperties has cognitive complexity 19 (threshold 15). Drivers by points: if/else 17, loops 2 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/ProgramDB.java"},"region":{"startLine":1552}}}],"partialFingerprints":{"codehealthFindingId/v1":"783f2a7e081d2d1b6cb41b49a4fb90273f8b399f3f4946f1a6893c74e46830e3"}},{"ruleId":"D2","level":"warning","message":{"text":"ProgramUserDataDB.getPropertyMap (cognitive 19): ProgramUserDataDB.getPropertyMap has cognitive complexity 19 (threshold 15). Drivers by points: if/else 16, boolean chains 1, error handling 1, loops 1 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/ProgramUserDataDB.java"},"region":{"startLine":495}}}],"partialFingerprints":{"codehealthFindingId/v1":"246c751936e69de1510dcc4db441dc60f3c675c8db836268bbad3f3022014fc8"}},{"ruleId":"D2","level":"warning","message":{"text":"AddressSet.mergeSets (cognitive 19): AddressSet.mergeSets has cognitive complexity 19 (threshold 15). Drivers by points: ternaries 12, if/else 3, loops 3, boolean chains 1 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/address/AddressSet.java"},"region":{"startLine":1104}}}],"partialFingerprints":{"codehealthFindingId/v1":"5ea085a015c09671aacfac421ac5dc8803dc3c98e188d00692671f470c85d925"}},{"ruleId":"D2","level":"warning","message":{"text":"SimpleSourceReferenceIterator.getSources (cognitive 19): SimpleSourceReferenceIterator.getSources has cognitive complexity 19 (threshold 15). Drivers by points: if/else 13, boolean chains 3, loops 3 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/block/SimpleSourceReferenceIterator.java"},"region":{"startLine":98}}}],"partialFingerprints":{"codehealthFindingId/v1":"3e943cbbf65ac23d2ba9195bf8e10cf6f12defc8dbf38d076ba031ab1461163e"}},{"ruleId":"D2","level":"warning","message":{"text":"AbstractIntegerDataType.getSignedDataTypes (cognitive 19): AbstractIntegerDataType.getSignedDataTypes has cognitive complexity 19 (threshold 15). Drivers by points: if/else 15, boolean chains 4 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/AbstractIntegerDataType.java"},"region":{"startLine":544}}}],"partialFingerprints":{"codehealthFindingId/v1":"e392429e322a64bd859e78a4da1650d0a929e40805596c083cbc1b656bd85d2c"}},{"ruleId":"D2","level":"warning","message":{"text":"AbstractIntegerDataType.getUnsignedDataTypes (cognitive 19): AbstractIntegerDataType.getUnsignedDataTypes has cognitive complexity 19 (threshold 15). Drivers by points: if/else 15, boolean chains 4 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/AbstractIntegerDataType.java"},"region":{"startLine":616}}}],"partialFingerprints":{"codehealthFindingId/v1":"ef03a89b3c56ce749c10b42ad30ae0a6396933ce3dc28c64ffe5732ac048e85b"}},{"ruleId":"D2","level":"warning","message":{"text":"StructureDataType.insertAtOffset (cognitive 19): StructureDataType.insertAtOffset has cognitive complexity 19 (threshold 15). Drivers by points: if/else 14, error handling 3, boolean chains 2 (nesting depth added 4). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition, and where an else follows a branch that already returns, drop the trailing else and let the rest of the body continue at one level."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/StructureDataType.java"},"region":{"startLine":494}}}],"partialFingerprints":{"codehealthFindingId/v1":"4f8986819e2fcaacadda54a21d21d3d27c03da14e6ab70897183ce99be9ab40c"}},{"ruleId":"D2","level":"warning","message":{"text":"ClassUtils.processComponents (cognitive 19): ClassUtils.processComponents has cognitive complexity 19 (threshold 15). Drivers by points: if/else 16, boolean chains 2, loops 1 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/gclass/ClassUtils.java"},"region":{"startLine":464}}}],"partialFingerprints":{"codehealthFindingId/v1":"5a36c5e63864f1b2ae916ec7cbe4646f70425515e0952aa5ac5e903c3d4af9cf"}},{"ruleId":"D2","level":"warning","message":{"text":"PrimitiveExtractor.commonRefinement (cognitive 19): PrimitiveExtractor.commonRefinement has cognitive complexity 19 (threshold 15). Drivers by points: if/else 13, boolean chains 3, loops 3 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/lang/protorules/PrimitiveExtractor.java"},"region":{"startLine":95}}}],"partialFingerprints":{"codehealthFindingId/v1":"2a6be8564c89142953dda491900b221a31abe50a2adaec93ad813dc02334d4af"}},{"ruleId":"D2","level":"warning","message":{"text":"ParamEntry.intersects (cognitive 19): ParamEntry.intersects has cognitive complexity 19 (threshold 15). Drivers by points: if/else 13, boolean chains 4, loops 2 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/lang/ParamEntry.java"},"region":{"startLine":200}}}],"partialFingerprints":{"codehealthFindingId/v1":"585829b0410d600412ba3085c187180ea6ba31d9237837d88520178ac6576c7e"}},{"ruleId":"D2","level":"warning","message":{"text":"ParamListStandard.encode (cognitive 19): ParamListStandard.encode has cognitive complexity 19 (threshold 15). Drivers by points: if/else 13, boolean chains 2, loops 2, ternaries 2 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/lang/ParamListStandard.java"},"region":{"startLine":242}}}],"partialFingerprints":{"codehealthFindingId/v1":"36ca1c32c23a84d99159eeee07458aa23bc2fa1f411a736ae7d7f1473ae12b34"}},{"ruleId":"D2","level":"warning","message":{"text":"PcodeDataTypeManager.getMetatype (cognitive 19): PcodeDataTypeManager.getMetatype has cognitive complexity 19 (threshold 15). Drivers by points: if/else 14, ternaries 4, boolean chains 1 (nesting depth added 2). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/pcode/PcodeDataTypeManager.java"},"region":{"startLine":1299}}}],"partialFingerprints":{"codehealthFindingId/v1":"c18c7d7381985fecf7f1eb004124e08c4e6d5c365c494d01d69ea343f044aa45"}},{"ruleId":"D2","level":"warning","message":{"text":"CyclomaticComplexity.calculateCyclomaticComplexity (cognitive 19): CyclomaticComplexity.calculateCyclomaticComplexity has cognitive complexity 19 (threshold 15). Drivers by points: if/else 13, loops 3, boolean chains 2, ternaries 1 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/util/CyclomaticComplexity.java"},"region":{"startLine":38}}}],"partialFingerprints":{"codehealthFindingId/v1":"80fc1635e6304fd924a82e61e32d8f6e3ddfc5a941b87beda3a5b931f3cba366"}},{"ruleId":"D2","level":"warning","message":{"text":"LanguageTranslatorAdapter.translateContextValue (cognitive 19): LanguageTranslatorAdapter.translateContextValue has cognitive complexity 19 (threshold 15). Drivers by points: if/else 16, boolean chains 2, loops 1 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/util/LanguageTranslatorAdapter.java"},"region":{"startLine":350}}}],"partialFingerprints":{"codehealthFindingId/v1":"fe175a8fc66435d3f0d36903513368abafc063bc1082dc6aa64a9766fd29a641"}},{"ruleId":"D2","level":"warning","message":{"text":"DomainFileNode.getFormattedDisplayName (cognitive 19): DomainFileNode.getFormattedDisplayName has cognitive complexity 19 (threshold 15). Drivers by points: if/else 18, boolean chains 1 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Project/src/main/java/ghidra/framework/main/datatree/DomainFileNode.java"},"region":{"startLine":267}}}],"partialFingerprints":{"codehealthFindingId/v1":"66ad4ef5e2466344555cd6cebb211d95455e576d1d9bb6db3f7a9429d5c34a9f"}},{"ruleId":"D2","level":"warning","message":{"text":"FVTable.decrementAndAddSelection (cognitive 19): FVTable.decrementAndAddSelection has cognitive complexity 19 (threshold 15). Drivers by points: if/else 17, error handling 2 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Project/src/main/java/ghidra/framework/main/logviewer/ui/FVTable.java"},"region":{"startLine":378}}}],"partialFingerprints":{"codehealthFindingId/v1":"efb74261435bf3ca6897ad8f3ca1a038d2ce43e59724270f14c67199dcc2db13"}},{"ruleId":"D2","level":"warning","message":{"text":"FVTable.incrementAndAddSelection (cognitive 19): FVTable.incrementAndAddSelection has cognitive complexity 19 (threshold 15). Drivers by points: if/else 17, error handling 2 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Project/src/main/java/ghidra/framework/main/logviewer/ui/FVTable.java"},"region":{"startLine":242}}}],"partialFingerprints":{"codehealthFindingId/v1":"fdde8258343dfe37b1fbd43964014bbb00e762aefbfbfb40aad80b48703b8e98"}},{"ruleId":"D2","level":"warning","message":{"text":"FVTable.valueChanged (cognitive 19): FVTable.valueChanged has cognitive complexity 19 (threshold 15). Drivers by points: if/else 16, boolean chains 3 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Project/src/main/java/ghidra/framework/main/logviewer/ui/FVTable.java"},"region":{"startLine":518}}}],"partialFingerprints":{"codehealthFindingId/v1":"f670a83edf0dea1366b8f515b98572b48bc99a1b4d057aaacfac46c9301cdd95"}},{"ruleId":"D2","level":"warning","message":{"text":"PluginDetailsPanel.addLoadedActionsContent (cognitive 19): PluginDetailsPanel.addLoadedActionsContent has cognitive complexity 19 (threshold 15). Drivers by points: if/else 13, ternaries 5, loops 1 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Project/src/main/java/ghidra/framework/plugintool/dialog/PluginDetailsPanel.java"},"region":{"startLine":184}}}],"partialFingerprints":{"codehealthFindingId/v1":"010ef6cdca4b12f6fa2d95d539a23a649996baa83cb971a97fb91a9b7f8eac58"}},{"ruleId":"D2","level":"warning","message":{"text":"PluginDetailsPanel.setPluginDescription (cognitive 19): PluginDetailsPanel.setPluginDescription has cognitive complexity 19 (threshold 15). Drivers by points: if/else 13, loops 4, ternaries 2 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Project/src/main/java/ghidra/framework/plugintool/dialog/PluginDetailsPanel.java"},"region":{"startLine":82}}}],"partialFingerprints":{"codehealthFindingId/v1":"c252b564fe4d1e1217d2d6713fe543fb706f017e19149c7976588ba73c7a6957"}},{"ruleId":"D2","level":"warning","message":{"text":"TOCItem.isEquivalent (cognitive 19): TOCItem.isEquivalent has cognitive complexity 19 (threshold 15). Drivers by points: if/else 19 (nesting depth added 4). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Help/src/main/java/help/validator/model/TOCItem.java"},"region":{"startLine":219}}}],"partialFingerprints":{"codehealthFindingId/v1":"7e5a14c86dbc8faf5a1c3ca993824c460d109092006cf845108fb07f6b4e3fd5"}},{"ruleId":"D2","level":"warning","message":{"text":"HelpLocation.equals (cognitive 19): HelpLocation.equals has cognitive complexity 19 (threshold 15). Drivers by points: if/else 19 (nesting depth added 4). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Gui/src/main/java/ghidra/util/HelpLocation.java"},"region":{"startLine":241}}}],"partialFingerprints":{"codehealthFindingId/v1":"0b482595a13fc4350e454ffc44554993b62d36c74aa635f42129649c24312f54"}},{"ruleId":"D2","level":"warning","message":{"text":"GProperties.getObjectFromJson (cognitive 19): GProperties.getObjectFromJson has cognitive complexity 19 (threshold 15). Drivers by points: loops 16, error handling 2, match/switch 1 (nesting depth added 9). The drivers above price the dispatch low by construction \u2014 a dispatch is charged once however many cases it lists, while each branch inside an arm is charged in full \u2014 so most of this count is what the case bodies hold, and the arms are where it can be reduced. To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Generic/src/main/java/ghidra/framework/options/GProperties.java"},"region":{"startLine":317}}}],"partialFingerprints":{"codehealthFindingId/v1":"14ebcce76302c74da21f57b37ade0b554902a07891e63d3ae847532b017bc75d"}},{"ruleId":"D2","level":"warning","message":{"text":"LineWrapper.append (cognitive 19): LineWrapper.append has cognitive complexity 19 (threshold 15). Drivers by points: if/else 18, loops 1 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Generic/src/main/java/ghidra/util/StringUtilities.java"},"region":{"startLine":1129}}}],"partialFingerprints":{"codehealthFindingId/v1":"15ce062dbee95cbf4c7821c9793f18221b4cc6b56334c0504c1c9ba47f81a990"}},{"ruleId":"D2","level":"warning","message":{"text":"TestSuiteUtilities.findClassesInPath (cognitive 19): TestSuiteUtilities.findClassesInPath has cognitive complexity 19 (threshold 15). Drivers by points: if/else 14, error handling 3, boolean chains 1, loops 1 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Generic/src/main/java/ghidra/util/TestSuiteUtilities.java"},"region":{"startLine":157}}}],"partialFingerprints":{"codehealthFindingId/v1":"35e9adf0c8a47605f742209f9b21dde79d2d97a44858f9808333485ea5e46b99"}},{"ruleId":"D2","level":"warning","message":{"text":"ServerPasswordPrompt.run (cognitive 19): ServerPasswordPrompt.run has cognitive complexity 19 (threshold 15). Drivers by points: if/else 16, boolean chains 2, ternaries 1 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/FileSystem/src/main/java/ghidra/framework/client/DefaultClientAuthenticator.java"},"region":{"startLine":224}}}],"partialFingerprints":{"codehealthFindingId/v1":"834c48f98b018e265702be8cdfa8871f0569b45596efa376aedb451bd43ac095"}},{"ruleId":"D2","level":"warning","message":{"text":"GhidraObjectInputFilter.trackClassDeserialization (cognitive 19): GhidraObjectInputFilter.trackClassDeserialization has cognitive complexity 19 (threshold 15). Drivers by points: if/else 10, error handling 4, loops 4, boolean chains 1 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/FileSystem/src/main/java/ghidra/framework/remote/GhidraObjectInputFilter.java"},"region":{"startLine":286}}}],"partialFingerprints":{"codehealthFindingId/v1":"5402a92633ea0fd31d21b1353a518d03353d107190273eeb47c9bc513673cb36"}},{"ruleId":"D2","level":"warning","message":{"text":"LockFile.createLock (cognitive 19): LockFile.createLock has cognitive complexity 19 (threshold 15). Drivers by points: if/else 14, error handling 3, boolean chains 2 (nesting depth added 5). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/FileSystem/src/main/java/ghidra/framework/store/local/LockFile.java"},"region":{"startLine":364}}}],"partialFingerprints":{"codehealthFindingId/v1":"5052a47991a28bce7d5c0b6dec141dfedf05a3f053a034c953cc0d787fd148cd"}},{"ruleId":"D2","level":"warning","message":{"text":"ChainedBuffer.split (cognitive 19): ChainedBuffer.split has cognitive complexity 19 (threshold 15). Drivers by points: if/else 13, loops 5, boolean chains 1 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/DB/src/main/java/db/ChainedBuffer.java"},"region":{"startLine":600}}}],"partialFingerprints":{"codehealthFindingId/v1":"7cf94d2fb0c6f2b591675d5d52798f3b4c5ffc4542372033e4eb23ac6002cc51"}},{"ruleId":"D2","level":"warning","message":{"text":"LongKeyRecordNode.isConsistent (cognitive 19): LongKeyRecordNode.isConsistent has cognitive complexity 19 (threshold 15). Drivers by points: if/else 14, boolean chains 4, loops 1 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/DB/src/main/java/db/LongKeyRecordNode.java"},"region":{"startLine":84}}}],"partialFingerprints":{"codehealthFindingId/v1":"c2b120f28dbaef230f9ee1e109c9921b146676af5f75b218493793de726c1997"}},{"ruleId":"D2","level":"warning","message":{"text":"VarKeyRecordNode.isConsistent (cognitive 19): VarKeyRecordNode.isConsistent has cognitive complexity 19 (threshold 15). Drivers by points: if/else 14, boolean chains 4, loops 1 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/DB/src/main/java/db/VarKeyRecordNode.java"},"region":{"startLine":104}}}],"partialFingerprints":{"codehealthFindingId/v1":"4c5dd72db1c62b03d006479c605a7fb9ca2d7f0703be6eebde5dddaa8003fa5c"}},{"ruleId":"D2","level":"warning","message":{"text":"VTDualListingHighlightProvider.getListingDataTypeHighlights (cognitive 19): VTDualListingHighlightProvider.getListingDataTypeHighlights has cognitive complexity 19 (threshold 15). Drivers by points: if/else 10, ternaries 7, boolean chains 2 (nesting depth added 11). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/VersionTracking/src/main/java/ghidra/feature/vt/gui/duallisting/VTDualListingHighlightProvider.java"},"region":{"startLine":956}}}],"partialFingerprints":{"codehealthFindingId/v1":"885f3383a32e3d640b96e40e4abad9e47cbf0b35fd5b35eec1b0a3aa6374823c"}},{"ruleId":"D2","level":"warning","message":{"text":"AllTextFilter.passesFilter (cognitive 19): AllTextFilter.passesFilter has cognitive complexity 19 (threshold 15). Drivers by points: if/else 17, boolean chains 1, loops 1 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/VersionTracking/src/main/java/ghidra/feature/vt/gui/util/AllTextFilter.java"},"region":{"startLine":40}}}],"partialFingerprints":{"codehealthFindingId/v1":"2b5a1627de78e7b178849cd2a73bd71fd6583cc42c7cf53eb8824caacd78f089"}},{"ruleId":"D2","level":"warning","message":{"text":"PdbDataTypeParser.findDataType (cognitive 19): PdbDataTypeParser.findDataType has cognitive complexity 19 (threshold 15). Drivers by points: if/else 11, loops 5, boolean chains 3 (nesting depth added 3). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/PDB/src/main/java/ghidra/app/util/bin/format/pdb/PdbDataTypeParser.java"},"region":{"startLine":170}}}],"partialFingerprints":{"codehealthFindingId/v1":"a5dc32c0d0d4c9bc8cf508329ec7b860ea528f4b6f8130f332a16aeda6086a6f"}},{"ruleId":"D2","level":"warning","message":{"text":"ExtraFrameAndProcedureInformationMsSymbol.emit (cognitive 19): ExtraFrameAndProcedureInformationMsSymbol.emit has cognitive complexity 19 (threshold 15). Drivers by points: ternaries 19. To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/PDB/src/main/java/ghidra/app/util/bin/format/pdb2/pdbreader/symbol/ExtraFrameAndProcedureInformationMsSymbol.java"},"region":{"startLine":323}}}],"partialFingerprints":{"codehealthFindingId/v1":"a0b1c5c4ecfab2ef355305e61e0eeb76d2e0ea3efba33b0729d1939d88177f48"}},{"ruleId":"D2","level":"warning","message":{"text":"C11Lines.\u003Cinit\u003E (cognitive 19): C11Lines.\u003Cinit\u003E has cognitive complexity 19 (threshold 15). Drivers by points: loops 16, if/else 3 (nesting depth added 8). To reduce it, break up the iteration: give each loop body a named function, and split a multi-phase loop into one function per phase so no single body carries the whole pipeline."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/PDB/src/main/java/ghidra/app/util/bin/format/pdb2/pdbreader/C11Lines.java"},"region":{"startLine":169}}}],"partialFingerprints":{"codehealthFindingId/v1":"647fcdf697b1859729b70ba4c16e057061302ee92314935521b056a7da39ef41"}},{"ruleId":"D2","level":"warning","message":{"text":"PdbDebugInfo.compareSymbols (cognitive 19): PdbDebugInfo.compareSymbols has cognitive complexity 19 (threshold 15). Drivers by points: if/else 12, loops 7 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/PDB/src/main/java/ghidra/app/util/bin/format/pdb2/pdbreader/PdbDebugInfo.java"},"region":{"startLine":617}}}],"partialFingerprints":{"codehealthFindingId/v1":"e7d8db4965f0c598518fc5b13e8b6e86a9e002d2c2f5fb9894909b2ca9476d26"}},{"ruleId":"D2","level":"warning","message":{"text":"CppCompositeType.updateVft (cognitive 19): CppCompositeType.updateVft has cognitive complexity 19 (threshold 15). Drivers by points: if/else 16, boolean chains 2, loops 1 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/PDB/src/main/java/ghidra/app/util/pdb/pdbapplicator/CppCompositeType.java"},"region":{"startLine":1947}}}],"partialFingerprints":{"codehealthFindingId/v1":"56277f3df5265705f65041a1f87f17a1b0d3c9f7f12c4c53ecba38b3077b7ee4"}},{"ruleId":"D2","level":"warning","message":{"text":"RegisterRelativeSymbolApplier.createFunctionVariable (cognitive 19): RegisterRelativeSymbolApplier.createFunctionVariable has cognitive complexity 19 (threshold 15). Drivers by points: if/else 10, error handling 8, boolean chains 1 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/PDB/src/main/java/ghidra/app/util/pdb/pdbapplicator/RegisterRelativeSymbolApplier.java"},"region":{"startLine":48}}}],"partialFingerprints":{"codehealthFindingId/v1":"28f6328bfabf09456e8295cab2ab4c7b5f50854a095e84b63d9acdcd864ad4e9"}},{"ruleId":"D2","level":"warning","message":{"text":"ObjcMessageAnalyzer.getNameFromData (cognitive 19): ObjcMessageAnalyzer.getNameFromData has cognitive complexity 19 (threshold 15). Drivers by points: if/else 18, boolean chains 1 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/Objective-C/src/main/java/ghidra/app/plugin/core/analysis/ObjcMessageAnalyzer.java"},"region":{"startLine":788}}}],"partialFingerprints":{"codehealthFindingId/v1":"ddc73ba4c2bf54175fd8935ec46dc21bed2a877ab9ff2bb3e8cb132f42ab243b"}},{"ruleId":"D2","level":"warning","message":{"text":"ObjcMessageAnalyzer.getParamNameOrOffset (cognitive 19): ObjcMessageAnalyzer.getParamNameOrOffset has cognitive complexity 19 (threshold 15). Drivers by points: if/else 17, boolean chains 2 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/Objective-C/src/main/java/ghidra/app/plugin/core/analysis/ObjcMessageAnalyzer.java"},"region":{"startLine":688}}}],"partialFingerprints":{"codehealthFindingId/v1":"8eba3550ae2ae47623a5f2b46c301cc1a7c297218607a2834ac7f9888caf4540"}},{"ruleId":"D2","level":"warning","message":{"text":"MDCVMod.parseEFGHI (cognitive 19): MDCVMod.parseEFGHI has cognitive complexity 19 (threshold 15). Drivers by points: if/else 16, match/switch 2, loops 1 (nesting depth added 11). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/MicrosoftDmang/src/main/java/mdemangler/datatype/modifier/MDCVMod.java"},"region":{"startLine":377}}}],"partialFingerprints":{"codehealthFindingId/v1":"a87e66a8c1bc3789074a7e8a7c7362f2e3b77e18f038b3f680aeb7994ac15e80"}},{"ruleId":"D2","level":"warning","message":{"text":"MDSpecialName.parseInternal (cognitive 19): MDSpecialName.parseInternal has cognitive complexity 19 (threshold 15). Drivers by points: if/else 10, match/switch 9 (nesting depth added 11). The drivers above price the dispatch low by construction \u2014 a dispatch is charged once however many cases it lists, while each branch inside an arm is charged in full \u2014 so most of this count is what the case bodies hold, and the arms are where it can be reduced. To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/MicrosoftDmang/src/main/java/mdemangler/naming/MDSpecialName.java"},"region":{"startLine":156}}}],"partialFingerprints":{"codehealthFindingId/v1":"afcc54fc13f541a0b76d00f6b78a8a890fb5d98f9cbd1932a950ada5b9bae18e"}},{"ruleId":"D2","level":"warning","message":{"text":"CommandWatcher.run (cognitive 19): CommandWatcher.run has cognitive complexity 19 (threshold 15). Drivers by points: if/else 10, error handling 5, loops 3, boolean chains 1 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/GhidraServer/src/main/java/ghidra/server/CommandWatcher.java"},"region":{"startLine":54}}}],"partialFingerprints":{"codehealthFindingId/v1":"6008c7f3bc98159dcfd3668dcd26bdffbb6842ef8e467f35c15fe33c1182135a"}},{"ruleId":"D2","level":"warning","message":{"text":"FidProgramSeeker.scoreMatch (cognitive 19): FidProgramSeeker.scoreMatch has cognitive complexity 19 (threshold 15). Drivers by points: if/else 14, loops 3, boolean chains 2 (nesting depth added 5). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/FunctionID/src/main/java/ghidra/feature/fid/service/FidProgramSeeker.java"},"region":{"startLine":314}}}],"partialFingerprints":{"codehealthFindingId/v1":"c42e33366b8e3c927b2d712ea7e17597acda67e2d71f0085c9cd3c310c483124"}},{"ruleId":"D2","level":"warning","message":{"text":"FidServiceLibraryIngest.resolveNamedRelations (cognitive 19): FidServiceLibraryIngest.resolveNamedRelations has cognitive complexity 19 (threshold 15). Drivers by points: if/else 11, loops 7, boolean chains 1 (nesting depth added 12). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/FunctionID/src/main/java/ghidra/feature/fid/service/FidServiceLibraryIngest.java"},"region":{"startLine":491}}}],"partialFingerprints":{"codehealthFindingId/v1":"0036f80e7af37943cd8f89a0e0de78672d808652c8a2cf06594b1767645977de"}},{"ruleId":"D2","level":"warning","message":{"text":"DexHeaderFormatMarkup.disassembleMethod (cognitive 19): DexHeaderFormatMarkup.disassembleMethod has cognitive complexity 19 (threshold 15). Drivers by points: if/else 9, error handling 4, loops 3, ternaries 3 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/android/dex/analyzer/DexHeaderFormatMarkup.java"},"region":{"startLine":228}}}],"partialFingerprints":{"codehealthFindingId/v1":"876050069fbcb081baf7d721e3ca85011232bd63c41eb9fd0b02b133ea41a9cc"}},{"ruleId":"D2","level":"warning","message":{"text":"CartFileSystem.mount (cognitive 19): CartFileSystem.mount has cognitive complexity 19 (threshold 15). Drivers by points: error handling 7, if/else 5, ternaries 5, loops 2 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/cart/CartFileSystem.java"},"region":{"startLine":85}}}],"partialFingerprints":{"codehealthFindingId/v1":"367b041ccace6e9796b000528bb83e052d158c96e4e5ef5ec68ec202f6768f4f"}},{"ruleId":"D2","level":"warning","message":{"text":"iOS_FixupArmSymbolsAnalyzer.isBoot (cognitive 19): iOS_FixupArmSymbolsAnalyzer.isBoot has cognitive complexity 19 (threshold 15). Drivers by points: if/else 17, error handling 2 (nesting depth added 5). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/ios/generic/iOS_FixupArmSymbolsAnalyzer.java"},"region":{"startLine":67}}}],"partialFingerprints":{"codehealthFindingId/v1":"f1f6140348f4a20c81033e77161f4c91d72757074a1d3d42c0e72f53e8743ed3"}},{"ruleId":"D2","level":"warning","message":{"text":"Img4FileSystem.open (cognitive 19): Img4FileSystem.open has cognitive complexity 19 (threshold 15). Drivers by points: if/else 12, error handling 5, loops 2 (nesting depth added 11). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/ios/img4/Img4FileSystem.java"},"region":{"startLine":60}}}],"partialFingerprints":{"codehealthFindingId/v1":"2c78c5c26f8983b54bfa4f479154c2065b57b552d399e9f4954ed7f4d0f8c767"}},{"ruleId":"D2","level":"warning","message":{"text":"MachoPrelinkFSBFileHandler.createActions (cognitive 19): MachoPrelinkFSBFileHandler.createActions has cognitive complexity 19 (threshold 15). Drivers by points: if/else 13, boolean chains 3, loops 3 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/ios/prelink/MachoPrelinkFSBFileHandler.java"},"region":{"startLine":39}}}],"partialFingerprints":{"codehealthFindingId/v1":"aa6197ee4118d0600a039437917fdd57cc52370de6d3076e9d12c0a634cf932c"}},{"ruleId":"D2","level":"warning","message":{"text":"MachoPrelinkFileSystem.getListing (cognitive 19): MachoPrelinkFileSystem.getListing has cognitive complexity 19 (threshold 15). Drivers by points: if/else 11, loops 5, boolean chains 3 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/ios/prelink/MachoPrelinkFileSystem.java"},"region":{"startLine":120}}}],"partialFingerprints":{"codehealthFindingId/v1":"38c1bd8ad1d99b0795fb972021d7a1d97251c0bb5a3f8b5c0ec4f14e9a25d0e2"}},{"ruleId":"D2","level":"warning","message":{"text":"ClangHighlightController.gatherContentsOfParenthesis (cognitive 19): ClangHighlightController.gatherContentsOfParenthesis has cognitive complexity 19 (threshold 15). Drivers by points: if/else 16, loops 3 (nesting depth added 11). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/Decompiler/src/main/java/ghidra/app/decompiler/component/ClangHighlightController.java"},"region":{"startLine":537}}}],"partialFingerprints":{"codehealthFindingId/v1":"2c1705ab4613611b90fa5f213dfb8b0a3f908c71970e4058bdfecd143cc50890"}},{"ruleId":"D2","level":"warning","message":{"text":"DecompileCallback.isNameUsed (cognitive 19): DecompileCallback.isNameUsed has cognitive complexity 19 (threshold 15). Drivers by points: if/else 13, loops 5, boolean chains 1 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/Decompiler/src/main/java/ghidra/app/decompiler/DecompileCallback.java"},"region":{"startLine":490}}}],"partialFingerprints":{"codehealthFindingId/v1":"d1d552024ec59f0659d39cefc43c55ccf1189af0a7082189fcae32491761b217"}},{"ruleId":"D2","level":"warning","message":{"text":"DecompileCallback.pseudoDisassemble (cognitive 19): DecompileCallback.pseudoDisassemble has cognitive complexity 19 (threshold 15). Drivers by points: if/else 16, boolean chains 3 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/Decompiler/src/main/java/ghidra/app/decompiler/DecompileCallback.java"},"region":{"startLine":370}}}],"partialFingerprints":{"codehealthFindingId/v1":"065ca8bf4f0dd313918dd8223b7325a591c0824d17018070185168d67e612c55"}},{"ruleId":"D2","level":"warning","message":{"text":"DecompileDebug.dumpPointsetContext (cognitive 19): DecompileDebug.dumpPointsetContext has cognitive complexity 19 (threshold 15). Drivers by points: if/else 11, loops 8 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/Decompiler/src/main/java/ghidra/app/decompiler/DecompileDebug.java"},"region":{"startLine":409}}}],"partialFingerprints":{"codehealthFindingId/v1":"5625aba75370e79f261f461fab5cfb87024a3b61ee870dfc1b021bdf8972beff"}},{"ruleId":"D2","level":"warning","message":{"text":"DecompileResults.decodeStream (cognitive 19): DecompileResults.decodeStream has cognitive complexity 19 (threshold 15). Drivers by points: if/else 15, error handling 2, boolean chains 1, loops 1 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/Decompiler/src/main/java/ghidra/app/decompiler/DecompileResults.java"},"region":{"startLine":211}}}],"partialFingerprints":{"codehealthFindingId/v1":"31be47d2d59de900c8fca5d5dec147ae2198a60985af7b2355a646fa1c621cfd"}},{"ruleId":"D2","level":"warning","message":{"text":"TreeSearch.searchBackward (cognitive 19): TreeSearch.searchBackward has cognitive complexity 19 (threshold 15). Drivers by points: if/else 13, match/switch 4, boolean chains 1, loops 1 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/Decompiler/src/main/java/ghidra/app/plugin/core/decompile/actions/CreatePointerRelative.java"},"region":{"startLine":239}}}],"partialFingerprints":{"codehealthFindingId/v1":"6bb4c7c1cc71bbe8f4c656ea80a348dc9c9718756f930c8b50ad8d00ead6feca"}},{"ruleId":"D2","level":"warning","message":{"text":"SpecifyCPrototypeAction.verifyDynamicEditorModel (cognitive 19): SpecifyCPrototypeAction.verifyDynamicEditorModel has cognitive complexity 19 (threshold 15). Drivers by points: if/else 11, loops 7, boolean chains 1 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/Decompiler/src/main/java/ghidra/app/plugin/core/decompile/actions/SpecifyCPrototypeAction.java"},"region":{"startLine":50}}}],"partialFingerprints":{"codehealthFindingId/v1":"c5a631caaff96ec59d3e8ee67c409b22549b6557da383076840e605a8d9b224d"}},{"ruleId":"D2","level":"warning","message":{"text":"BSimFilterType.generateBsimFilters (cognitive 19): BSimFilterType.generateBsimFilters has cognitive complexity 19 (threshold 15). Drivers by points: if/else 9, boolean chains 5, loops 5 (nesting depth added 5). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/BSim/src/main/java/ghidra/features/bsim/gui/filters/BSimFilterType.java"},"region":{"startLine":324}}}],"partialFingerprints":{"codehealthFindingId/v1":"ef16d4843e4630296bb05a40daf373162aa8beabf06ae64fcc86238c5148519f"}},{"ruleId":"D2","level":"warning","message":{"text":"ElasticDatabase.fdbQueryVectorMatch (cognitive 19): ElasticDatabase.fdbQueryVectorMatch has cognitive complexity 19 (threshold 15). Drivers by points: if/else 13, loops 6 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/BSim/src/main/java/ghidra/features/bsim/query/elastic/ElasticDatabase.java"},"region":{"startLine":3268}}}],"partialFingerprints":{"codehealthFindingId/v1":"14467674b4711f0937cb493107ba3cd788bd648e38b30cd2d1636cb8c25c44a3"}},{"ruleId":"D2","level":"warning","message":{"text":"ElasticDatabase.insertFunctionRange (cognitive 19): ElasticDatabase.insertFunctionRange has cognitive complexity 19 (threshold 15). Drivers by points: if/else 14, loops 5 (nesting depth added 12). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/BSim/src/main/java/ghidra/features/bsim/query/elastic/ElasticDatabase.java"},"region":{"startLine":255}}}],"partialFingerprints":{"codehealthFindingId/v1":"2ffaa7036d8d2c82a29bb1a68d2fe3c2e5feeaf1a20920f720cca3874a707913"}},{"ruleId":"D2","level":"warning","message":{"text":"ElasticEffects.buildParentScript (cognitive 19): ElasticEffects.buildParentScript has cognitive complexity 19 (threshold 15). Drivers by points: if/else 12, loops 6, boolean chains 1 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/BSim/src/main/java/ghidra/features/bsim/query/elastic/ElasticEffects.java"},"region":{"startLine":121}}}],"partialFingerprints":{"codehealthFindingId/v1":"a17f0bce91938875a3503329e2d4990179726abee836d08af93105cec0c20521"}},{"ruleId":"D2","level":"warning","message":{"text":"ServerConfig.scanConfig (cognitive 19): ServerConfig.scanConfig has cognitive complexity 19 (threshold 15). Drivers by points: if/else 18, loops 1 (nesting depth added 12). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/BSim/src/main/java/ghidra/features/bsim/query/ServerConfig.java"},"region":{"startLine":684}}}],"partialFingerprints":{"codehealthFindingId/v1":"26924783cb46d864d4d7e4ea8e32c077c00a7ee47d155b89eab96b9b07266b2a"}},{"ruleId":"D2","level":"warning","message":{"text":"Z3InfixPrinter.printSimplificationsConcat (cognitive 19): Z3InfixPrinter.printSimplificationsConcat has cognitive complexity 19 (threshold 15). Drivers by points: if/else 14, loops 5 (nesting depth added 12). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Extensions/SymbolicSummaryZ3/src/main/java/ghidra/pcode/emu/symz3/lib/Z3InfixPrinter.java"},"region":{"startLine":56}}}],"partialFingerprints":{"codehealthFindingId/v1":"bbc70db23a39aa9823679214d0322bde517019e19acda6fe7ddb84f622ee0826"}},{"ruleId":"D2","level":"warning","message":{"text":"PcodePentagon.closure (cognitive 19): PcodePentagon.closure has cognitive complexity 19 (threshold 15). Drivers by points: if/else 15, loops 3, boolean chains 1 (nesting depth added 11). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Extensions/Lisa/src/main/java/ghidra/lisa/pcode/analyses/PcodePentagon.java"},"region":{"startLine":234}}}],"partialFingerprints":{"codehealthFindingId/v1":"3fbdb34647049fe1bda5f688a267c0b018366619f5d3afd7e5271abeee7ccc14"}},{"ruleId":"D2","level":"warning","message":{"text":"AutoOptionsListener.collectSettersByReceiver (cognitive 19): AutoOptionsListener.collectSettersByReceiver has cognitive complexity 19 (threshold 15). Drivers by points: error handling 8, if/else 8, loops 3 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/ProposedUtils/src/main/java/ghidra/framework/options/AutoOptionsListener.java"},"region":{"startLine":248}}}],"partialFingerprints":{"codehealthFindingId/v1":"ebdfc4b6bac071fbffb47eb27c586c0d5cd46026dcfd7d2a5c29bc7d37a6fb32"}},{"ruleId":"D2","level":"warning","message":{"text":"ValueLifespanSetter.valuesEqual (cognitive 19): ValueLifespanSetter.valuesEqual has cognitive complexity 19 (threshold 15). Drivers by points: if/else 10, boolean chains 9. To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/target/DBTraceObjectValue.java"},"region":{"startLine":66}}}],"partialFingerprints":{"codehealthFindingId/v1":"f621dd9d91e68bf36b070400fffa5e0e3fac58ea7d008b9f0c81568d2498dac2"}},{"ruleId":"D2","level":"warning","message":{"text":"DebuggerBreakpointMarkerPlugin.getSingleLocationFromContext (cognitive 19): DebuggerBreakpointMarkerPlugin.getSingleLocationFromContext has cognitive complexity 19 (threshold 15). Drivers by points: if/else 14, ternaries 3, boolean chains 2 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/gui/breakpoint/DebuggerBreakpointMarkerPlugin.java"},"region":{"startLine":100}}}],"partialFingerprints":{"codehealthFindingId/v1":"e4f2eb2323ee83e4f2cc54a0ef617ee5cfae2adee0f1d8bd9daa54a803ff9736"}},{"ruleId":"D2","level":"warning","message":{"text":"DebuggerEmulationServicePlugin.installBreakpoints (cognitive 19): DebuggerEmulationServicePlugin.installBreakpoints has cognitive complexity 19 (threshold 15). Drivers by points: if/else 11, error handling 4, loops 3, boolean chains 1 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/service/emulation/DebuggerEmulationServicePlugin.java"},"region":{"startLine":718}}}],"partialFingerprints":{"codehealthFindingId/v1":"34b87403c05c9f9572578e9bde171b8327a039aa9e79dac0d4022acb5fcb142f"}},{"ruleId":"D2","level":"warning","message":{"text":"DynamicStaticSynchronizationPlugin.doCheckCurrentModuleMissing (cognitive 19): DynamicStaticSynchronizationPlugin.doCheckCurrentModuleMissing has cognitive complexity 19 (threshold 15). Drivers by points: if/else 13, loops 4, boolean chains 2 (nesting depth added 3). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition, and where an else follows a branch that already returns, drop the trailing else and let the rest of the body continue at one level."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/service/modules/DynamicStaticSynchronizationPlugin.java"},"region":{"startLine":640}}}],"partialFingerprints":{"codehealthFindingId/v1":"4c02a6ce9956bcc45d1f7fe4a303e62e60fcc60bbc452d46fade8c0b992b8731"}},{"ruleId":"D2","level":"warning","message":{"text":"BlockModelScreenShots.createFormat (cognitive 19): BlockModelScreenShots.createFormat has cognitive complexity 19 (threshold 15). Drivers by points: if/else 10, loops 9 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Test/IntegrationTest/src/screen/java/help/screenshot/BlockModelScreenShots.java"},"region":{"startLine":161}}}],"partialFingerprints":{"codehealthFindingId/v1":"d7805909bf68809d608c074d87e39fb7380f650ce108a7fd29122172bc39a631"}},{"ruleId":"D2","level":"warning","message":{"text":"LaunchSupport.findJavaHome (cognitive 18): LaunchSupport.findJavaHome has cognitive complexity 18 (threshold 15). Drivers by points: if/else 18 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"GhidraBuild/LaunchSupport/src/main/java/LaunchSupport.java"},"region":{"startLine":181}}}],"partialFingerprints":{"codehealthFindingId/v1":"f20aa2278a2ccba1cb335c4350e64d40919a5f522a9888348fa828e38ffe4428"}},{"ruleId":"D2","level":"warning","message":{"text":"HtmlDocTree.getTree (cognitive 18): HtmlDocTree.getTree has cognitive complexity 18 (threshold 15). Drivers by points: if/else 13, boolean chains 2, match/switch 2, loops 1 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"GhidraBuild/BuildFiles/Doclets/src/main/java/ghidra/doclets/typestubs/HtmlDocTree.java"},"region":{"startLine":53}}}],"partialFingerprints":{"codehealthFindingId/v1":"6ac2fa0c9b717c774ebc0961cda8925182b5f8508e46c599dd5a45784349ed96"}},{"ruleId":"D2","level":"warning","message":{"text":"1.markupDualInstructions (cognitive 18): 1.markupDualInstructions has cognitive complexity 18 (threshold 15). Drivers by points: if/else 15, boolean chains 3 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Processors/PowerPC/src/main/java/ghidra/app/plugin/core/analysis/PowerPCAddressAnalyzer.java"},"region":{"startLine":201}}}],"partialFingerprints":{"codehealthFindingId/v1":"6d1846eec239ea30a4d47325942d8649316acf3494128a30582e1d547da01ebd"}},{"ruleId":"D2","level":"warning","message":{"text":"MipsPreAnalyzer.added (cognitive 18): MipsPreAnalyzer.added has cognitive complexity 18 (threshold 15). Drivers by points: if/else 17, loops 1 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Processors/MIPS/src/main/java/ghidra/app/plugin/core/analysis/MipsPreAnalyzer.java"},"region":{"startLine":63}}}],"partialFingerprints":{"codehealthFindingId/v1":"aa1303e3b3c1bfb82134bf9472d1b4b13bcf9f377ea6ed8b110d6f026fb021f1"}},{"ruleId":"D2","level":"warning","message":{"text":"HexagonPrologEpilogAnalyzer.isProlog (cognitive 18): HexagonPrologEpilogAnalyzer.isProlog has cognitive complexity 18 (threshold 15). Drivers by points: if/else 15, boolean chains 2, loops 1 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Processors/Hexagon/src/main/java/ghidra/app/plugin/core/analysis/HexagonPrologEpilogAnalyzer.java"},"region":{"startLine":152}}}],"partialFingerprints":{"codehealthFindingId/v1":"f4597c91a27742123537654c35c5f1a63e975f744c44aea8d5a13283f9b5ba9c"}},{"ruleId":"D2","level":"warning","message":{"text":"AbstractXmlPullParser.discardSubTree (cognitive 18): AbstractXmlPullParser.discardSubTree has cognitive complexity 18 (threshold 15). Drivers by points: if/else 9, loops 6, boolean chains 3 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Utility/src/main/java/ghidra/xml/AbstractXmlPullParser.java"},"region":{"startLine":145}}}],"partialFingerprints":{"codehealthFindingId/v1":"42d3cc0be9359d4e21b54da63c795d2f5efcfbd2875ef716c7b5897ce9e6e7e1"}},{"ruleId":"D2","level":"warning","message":{"text":"XmlElementImpl.toString (cognitive 18): XmlElementImpl.toString has cognitive complexity 18 (threshold 15). Drivers by points: if/else 14, loops 4 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Utility/src/main/java/ghidra/xml/XmlElementImpl.java"},"region":{"startLine":124}}}],"partialFingerprints":{"codehealthFindingId/v1":"b9f9276869c1a645e81bf1b3628a7e49a338db74b1056e1698ec7b0b4ce497cf"}},{"ruleId":"D2","level":"warning","message":{"text":"OrExpressionSolver.solveLeftCircularShift (cognitive 18): OrExpressionSolver.solveLeftCircularShift has cognitive complexity 18 (threshold 15). Drivers by points: if/else 12, boolean chains 3, error handling 2, loops 1 (nesting depth added 4). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/assembler/sleigh/expr/OrExpressionSolver.java"},"region":{"startLine":167}}}],"partialFingerprints":{"codehealthFindingId/v1":"daa7f62aec01bf06f255821d4d026f975a2e1d7ca236e3ed3f3d86bdc1111e90"}},{"ruleId":"D2","level":"warning","message":{"text":"BigFloat.add (cognitive 18): BigFloat.add has cognitive complexity 18 (threshold 15). Drivers by points: if/else 12, boolean chains 3, ternaries 3 (nesting depth added 4). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcode/floatformat/BigFloat.java"},"region":{"startLine":587}}}],"partialFingerprints":{"codehealthFindingId/v1":"2b594aeaf8770ed0815f436491a132036a5f6b6035b3cb118034e9ea939629d2"}},{"ruleId":"D2","level":"warning","message":{"text":"DisjointPattern.identical (cognitive 18): DisjointPattern.identical has cognitive complexity 18 (threshold 15). Drivers by points: if/else 16, boolean chains 2 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghpattern/DisjointPattern.java"},"region":{"startLine":83}}}],"partialFingerprints":{"codehealthFindingId/v1":"a600ab51e71e5153ca6edae67ab6735fd0b12aa51dd8c9160ef96c1984abc86f"}},{"ruleId":"D2","level":"warning","message":{"text":"CompositeDB.getPreferredComponentLength (cognitive 18): CompositeDB.getPreferredComponentLength has cognitive complexity 18 (threshold 15). Drivers by points: if/else 18 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/CompositeDB.java"},"region":{"startLine":185}}}],"partialFingerprints":{"codehealthFindingId/v1":"3c762016dbf08fa5c621d465bbd0777fb06cca97b5ed71d0ae3c023beac2a925"}},{"ruleId":"D2","level":"warning","message":{"text":"PointerDB.dataTypeReplaced (cognitive 18): PointerDB.dataTypeReplaced has cognitive complexity 18 (threshold 15). Drivers by points: if/else 10, error handling 5, ternaries 2, boolean chains 1 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/PointerDB.java"},"region":{"startLine":326}}}],"partialFingerprints":{"codehealthFindingId/v1":"b52bc1616691946def77e57c3fa87bb79a12d619ee92391fd1b9fc3d2c369f13"}},{"ruleId":"D2","level":"warning","message":{"text":"StructureDB.isEquivalent (cognitive 18): StructureDB.isEquivalent has cognitive complexity 18 (threshold 15). Drivers by points: if/else 13, boolean chains 3, loops 1, ternaries 1 (nesting depth added 2). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/StructureDB.java"},"region":{"startLine":1961}}}],"partialFingerprints":{"codehealthFindingId/v1":"549b1f98552c7e8a2ce3fe933f339f9f53cad3186ab622e1514cf35f7b3c2de7"}},{"ruleId":"D2","level":"warning","message":{"text":"AddressMapDB.encodeRelative (cognitive 18): AddressMapDB.encodeRelative has cognitive complexity 18 (threshold 15). Drivers by points: if/else 13, ternaries 3, boolean chains 1, match/switch 1 (nesting depth added 8). The drivers above price the dispatch low by construction \u2014 a dispatch is charged once however many cases it lists, while each branch inside an arm is charged in full \u2014 so most of this count is what the case bodies hold, and the arms are where it can be reduced. To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/map/AddressMapDB.java"},"region":{"startLine":642}}}],"partialFingerprints":{"codehealthFindingId/v1":"d2f3f145f542c7d062f20057023758da3271449cf8c16e9d717bf50ab533d37e"}},{"ruleId":"D2","level":"warning","message":{"text":"TreeManager.refreshTreeMap (cognitive 18): TreeManager.refreshTreeMap has cognitive complexity 18 (threshold 15). Drivers by points: if/else 12, error handling 3, loops 2, boolean chains 1 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/module/TreeManager.java"},"region":{"startLine":448}}}],"partialFingerprints":{"codehealthFindingId/v1":"041326bed5606ea0256036950ffa3a31f80bb5d1b25bee69db37fe73145729c2"}},{"ruleId":"D2","level":"warning","message":{"text":"RefListV0.setPrimary (cognitive 18): RefListV0.setPrimary has cognitive complexity 18 (threshold 15). Drivers by points: if/else 13, ternaries 4, loops 1 (nesting depth added 11). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/references/RefListV0.java"},"region":{"startLine":361}}}],"partialFingerprints":{"codehealthFindingId/v1":"a0df3bbf711984333d50dfbc7fea3dfc9c38a37f4fa41d499ec9410c3a810e78"}},{"ruleId":"D2","level":"warning","message":{"text":"SourceFileManagerDB.moveAddressRange (cognitive 18): SourceFileManagerDB.moveAddressRange has cognitive complexity 18 (threshold 15). Drivers by points: if/else 13, boolean chains 2, loops 2, error handling 1 (nesting depth added 5). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/sourcemap/SourceFileManagerDB.java"},"region":{"startLine":186}}}],"partialFingerprints":{"codehealthFindingId/v1":"b5ed35fca5b6108126017b4ebbe03d1512b1da77fa4e02bdb4d6f6008d93c2a5"}},{"ruleId":"D2","level":"warning","message":{"text":"ProgramDB.parseAddress (cognitive 18): ProgramDB.parseAddress has cognitive complexity 18 (threshold 15). Drivers by points: if/else 11, error handling 4, loops 2, boolean chains 1 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/ProgramDB.java"},"region":{"startLine":827}}}],"partialFingerprints":{"codehealthFindingId/v1":"1579e818d50a9e525f136a47414df7042b86baf2ba2669367df235a4590d4d39"}},{"ruleId":"D2","level":"warning","message":{"text":"AddressMapImpl.reconcile (cognitive 18): AddressMapImpl.reconcile has cognitive complexity 18 (threshold 15). Drivers by points: if/else 13, loops 3, boolean chains 2 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/address/AddressMapImpl.java"},"region":{"startLine":280}}}],"partialFingerprints":{"codehealthFindingId/v1":"36e6313194a50e2d04b7b5ef82ca91ff05220b8ef53dd3848724b5478c0c1e28"}},{"ruleId":"D2","level":"warning","message":{"text":"SimpleBlockModel.getFirstCodeBlockContaining (cognitive 18): SimpleBlockModel.getFirstCodeBlockContaining has cognitive complexity 18 (threshold 15). Drivers by points: if/else 11, error handling 4, loops 2, boolean chains 1 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/block/SimpleBlockModel.java"},"region":{"startLine":310}}}],"partialFingerprints":{"codehealthFindingId/v1":"2504798696633169cc0da07399a1cd245ff791d00287633c7c6afec05b58736d"}},{"ruleId":"D2","level":"warning","message":{"text":"AbstractIntegerDataType.getSignedDataType (cognitive 18): AbstractIntegerDataType.getSignedDataType has cognitive complexity 18 (threshold 15). Drivers by points: if/else 18 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/AbstractIntegerDataType.java"},"region":{"startLine":507}}}],"partialFingerprints":{"codehealthFindingId/v1":"4fff1d8613ec780a5bd4fbfcfbf03a1afec740873964a58fbdb5db59e092fac9"}},{"ruleId":"D2","level":"warning","message":{"text":"AbstractIntegerDataType.getUnsignedDataType (cognitive 18): AbstractIntegerDataType.getUnsignedDataType has cognitive complexity 18 (threshold 15). Drivers by points: if/else 18 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/AbstractIntegerDataType.java"},"region":{"startLine":579}}}],"partialFingerprints":{"codehealthFindingId/v1":"2d117142e1717854906442c63c0d63ad2728476d13c6ae05357ac7d71f72c112"}},{"ruleId":"D2","level":"warning","message":{"text":"CompositeDataTypeImpl.getPreferredComponentLength (cognitive 18): CompositeDataTypeImpl.getPreferredComponentLength has cognitive complexity 18 (threshold 15). Drivers by points: if/else 18 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/CompositeDataTypeImpl.java"},"region":{"startLine":113}}}],"partialFingerprints":{"codehealthFindingId/v1":"ac793c3243526f039f5ded97ddba8b45af85d00f875a7d2789391b1e7ba44260"}},{"ruleId":"D2","level":"warning","message":{"text":"DataOrganizationImpl.encode (cognitive 18): DataOrganizationImpl.encode has cognitive complexity 18 (threshold 15). Drivers by points: if/else 16, loops 2 (nesting depth added 1). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/DataOrganizationImpl.java"},"region":{"startLine":803}}}],"partialFingerprints":{"codehealthFindingId/v1":"e142c87928cfe3801ecd4191348e81918bd2d1c2e0d14d90062a3b41cc542173"}},{"ruleId":"D2","level":"warning","message":{"text":"DataTypeNameComparator.compare (cognitive 18): DataTypeNameComparator.compare has cognitive complexity 18 (threshold 15). Drivers by points: if/else 15, boolean chains 2, loops 1 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/DataTypeNameComparator.java"},"region":{"startLine":32}}}],"partialFingerprints":{"codehealthFindingId/v1":"43d1781d7125ad6ff7f639e3a0674a34f7393351fc5978f6483f19bed43c5795"}},{"ruleId":"D2","level":"warning","message":{"text":"ParameterPieces.mergeSequence (cognitive 18): ParameterPieces.mergeSequence has cognitive complexity 18 (threshold 15). Drivers by points: if/else 13, ternaries 3, loops 2 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/lang/ParameterPieces.java"},"region":{"startLine":123}}}],"partialFingerprints":{"codehealthFindingId/v1":"175bac7a39f5dea75bfaf7463f5003d5352a158a4b6537630c56946439f55fd2"}},{"ruleId":"D2","level":"warning","message":{"text":"VariableUtilities.checkVariableConflict (cognitive 18): VariableUtilities.checkVariableConflict has cognitive complexity 18 (threshold 15). Drivers by points: if/else 16, boolean chains 1, loops 1 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/listing/VariableUtilities.java"},"region":{"startLine":586}}}],"partialFingerprints":{"codehealthFindingId/v1":"9f028f5bf0fd34db6a1c3af05866cb527219db63cd4b7019db704e0294214b4a"}},{"ruleId":"D2","level":"warning","message":{"text":"FunctionPrototype.decodePrototype (cognitive 18): FunctionPrototype.decodePrototype has cognitive complexity 18 (threshold 15). Drivers by points: if/else 15, loops 2, ternaries 1 (nesting depth added 4). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/pcode/FunctionPrototype.java"},"region":{"startLine":418}}}],"partialFingerprints":{"codehealthFindingId/v1":"32e2d14f49336ec2781b37628a169622a07a6fcc0a44a0e3a5fc376b7ca5c0ee"}},{"ruleId":"D2","level":"warning","message":{"text":"OldLanguage.parseRegisters (cognitive 18): OldLanguage.parseRegisters has cognitive complexity 18 (threshold 15). Drivers by points: if/else 12, ternaries 3, boolean chains 2, loops 1 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/util/OldLanguage.java"},"region":{"startLine":373}}}],"partialFingerprints":{"codehealthFindingId/v1":"e8b8a0014a535107a6b53927e41b2aaadbaeea82e51c6da38fde218093491972"}},{"ruleId":"D2","level":"warning","message":{"text":"GhidraFolderData.createLinkFile (cognitive 18): GhidraFolderData.createLinkFile has cognitive complexity 18 (threshold 15). Drivers by points: if/else 15, boolean chains 2, error handling 1 (nesting depth added 4). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Project/src/main/java/ghidra/framework/data/GhidraFolderData.java"},"region":{"startLine":1423}}}],"partialFingerprints":{"codehealthFindingId/v1":"aea10eca01f3ab48e7629ba00c4fb0c4a41ce37db156ae75a0bd4e09083bfd21"}},{"ruleId":"D2","level":"warning","message":{"text":"LinkHandler.getAbsoluteLinkPath (cognitive 18): LinkHandler.getAbsoluteLinkPath has cognitive complexity 18 (threshold 15). Drivers by points: if/else 15, error handling 2, boolean chains 1 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Project/src/main/java/ghidra/framework/data/LinkHandler.java"},"region":{"startLine":324}}}],"partialFingerprints":{"codehealthFindingId/v1":"74ef54a9f39e43b511eb8ff6da56941bd91d6f591335edf055ad0239bea29891"}},{"ruleId":"D2","level":"warning","message":{"text":"ToolServicesImpl.defaultLaunch (cognitive 18): ToolServicesImpl.defaultLaunch has cognitive complexity 18 (threshold 15). Drivers by points: if/else 12, loops 5, boolean chains 1 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Project/src/main/java/ghidra/framework/project/tool/ToolServicesImpl.java"},"region":{"startLine":181}}}],"partialFingerprints":{"codehealthFindingId/v1":"49b83171501af437fa087942e2479a4ab0a21187276edfd14d5d5035289ddbcc"}},{"ruleId":"D2","level":"warning","message":{"text":"ThemePropertyFileReader.validate (cognitive 18): ThemePropertyFileReader.validate has cognitive complexity 18 (threshold 15). Drivers by points: if/else 15, loops 3 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Gui/src/main/java/generic/theme/ThemePropertyFileReader.java"},"region":{"startLine":126}}}],"partialFingerprints":{"codehealthFindingId/v1":"c76b6125fcd8a6dc2105808f3e110723f216c79089fe25f737a97bc2f18299ae"}},{"ruleId":"D2","level":"warning","message":{"text":"ColorUtils.deriveForeground (cognitive 18): ColorUtils.deriveForeground has cognitive complexity 18 (threshold 15). Drivers by points: if/else 16, boolean chains 1, loops 1 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Gui/src/main/java/ghidra/util/ColorUtils.java"},"region":{"startLine":59}}}],"partialFingerprints":{"codehealthFindingId/v1":"d560457bec1a6a4156cc47efce9dc1d068467e185e1d4be77e25365f3510a773"}},{"ruleId":"D2","level":"warning","message":{"text":"LSHCosineVector.installFeatures (cognitive 18): LSHCosineVector.installFeatures has cognitive complexity 18 (threshold 15). Drivers by points: if/else 13, loops 5 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Generic/src/main/java/generic/lsh/vector/LSHCosineVector.java"},"region":{"startLine":117}}}],"partialFingerprints":{"codehealthFindingId/v1":"5ab113838ecde332468411f26702bbc1ca4109fd5ef4d29dacd4294f8d886a22"}},{"ruleId":"D2","level":"warning","message":{"text":"TestSuiteUtilities.findClassesInJar (cognitive 18): TestSuiteUtilities.findClassesInJar has cognitive complexity 18 (threshold 15). Drivers by points: if/else 10, error handling 4, boolean chains 2, loops 1, ternaries 1 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Generic/src/main/java/ghidra/util/TestSuiteUtilities.java"},"region":{"startLine":221}}}],"partialFingerprints":{"codehealthFindingId/v1":"80d302f8976f6b5aa8359f6eeb6803fb007f5e2faddee949ca30ac3695ff4f0c"}},{"ruleId":"D2","level":"warning","message":{"text":"TestSuiteUtilities.findPkgsInJar (cognitive 18): TestSuiteUtilities.findPkgsInJar has cognitive complexity 18 (threshold 15). Drivers by points: if/else 14, boolean chains 1, error handling 1, loops 1, ternaries 1 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Generic/src/main/java/ghidra/util/TestSuiteUtilities.java"},"region":{"startLine":383}}}],"partialFingerprints":{"codehealthFindingId/v1":"d08e5d3d33bbda0b049aff13872b9914ad944a35c7b6b024bbd8df806d5a9378"}},{"ruleId":"D2","level":"warning","message":{"text":"1.getPasswordAuthentication (cognitive 18): 1.getPasswordAuthentication has cognitive complexity 18 (threshold 15). Drivers by points: if/else 17, boolean chains 1 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/FileSystem/src/main/java/ghidra/framework/client/DefaultClientAuthenticator.java"},"region":{"startLine":38}}}],"partialFingerprints":{"codehealthFindingId/v1":"ef26923ff44d7c988fca86a3062c62456f37114ee77b72985e1f65b041e5b4a2"}},{"ruleId":"D2","level":"warning","message":{"text":"SSHKeyManager.getSSHPrivateKey (cognitive 18): SSHKeyManager.getSSHPrivateKey has cognitive complexity 18 (threshold 15). Drivers by points: if/else 15, boolean chains 2, loops 1 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/FileSystem/src/main/java/ghidra/framework/remote/security/SSHKeyManager.java"},"region":{"startLine":95}}}],"partialFingerprints":{"codehealthFindingId/v1":"496b9e3e7c5f37da9448fcac17a4a0649e1fd61a5d220eff6ed87172be54273a"}},{"ruleId":"D2","level":"warning","message":{"text":"WaitForLockRunnable.run (cognitive 18): WaitForLockRunnable.run has cognitive complexity 18 (threshold 15). Drivers by points: if/else 14, error handling 4 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/FileSystem/src/main/java/ghidra/framework/store/local/LockFile.java"},"region":{"startLine":544}}}],"partialFingerprints":{"codehealthFindingId/v1":"f313b2a4dec9ccc56aff343990a0f8660b913966a6b442f0209e5613a00b55d5"}},{"ruleId":"D2","level":"warning","message":{"text":"FileSystem.normalizePath (cognitive 18): FileSystem.normalizePath has cognitive complexity 18 (threshold 15). Drivers by points: if/else 16, loops 2 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/FileSystem/src/main/java/ghidra/framework/store/FileSystem.java"},"region":{"startLine":346}}}],"partialFingerprints":{"codehealthFindingId/v1":"b6f3fb7f9ad78bece43f05390742733dbce2df1be92982ebbf634ec460393768"}},{"ruleId":"D2","level":"warning","message":{"text":"KeyBindingUtils.parseKeyStroke (cognitive 18): KeyBindingUtils.parseKeyStroke has cognitive complexity 18 (threshold 15). Drivers by points: if/else 15, loops 2, boolean chains 1 (nesting depth added 3). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Docking/src/main/java/docking/actions/KeyBindingUtils.java"},"region":{"startLine":761}}}],"partialFingerprints":{"codehealthFindingId/v1":"76c47d15b2d25af337ef3e06d84036827610267cdd1c5a5132f6805f50be9c3a"}},{"ruleId":"D2","level":"warning","message":{"text":"LayoutColorMapFactory.getLayoutColorMap (cognitive 18): LayoutColorMapFactory.getLayoutColorMap has cognitive complexity 18 (threshold 15). Drivers by points: if/else 10, boolean chains 8. To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Docking/src/main/java/docking/widgets/fieldpanel/internal/LayoutColorMapFactory.java"},"region":{"startLine":27}}}],"partialFingerprints":{"codehealthFindingId/v1":"72368db13aabc2f2ba94a10a9aa467e416a0ffa6df20a01f37d557da43c8e608"}},{"ruleId":"D2","level":"warning","message":{"text":"ElidingFilePathTextField.getPreviewString (cognitive 18): ElidingFilePathTextField.getPreviewString has cognitive complexity 18 (threshold 15). Drivers by points: if/else 10, loops 5, ternaries 3 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Docking/src/main/java/docking/widgets/textfield/ElidingFilePathTextField.java"},"region":{"startLine":94}}}],"partialFingerprints":{"codehealthFindingId/v1":"a986ffa395f8cf8de5ed44171f9159e51f83dfcbd35979528273b5368fa8eda5"}},{"ruleId":"D2","level":"warning","message":{"text":"RecoveryFile.saveBufferMap (cognitive 18): RecoveryFile.saveBufferMap has cognitive complexity 18 (threshold 15). Drivers by points: if/else 14, error handling 3, loops 1 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/DB/src/main/java/db/buffers/RecoveryFile.java"},"region":{"startLine":215}}}],"partialFingerprints":{"codehealthFindingId/v1":"850e4aeba4bb29121015fd2ca10c2a8d14b4a5354e2e0881d14ed85f7787727b"}},{"ruleId":"D2","level":"warning","message":{"text":"VersionFileHandler.\u003Cinit\u003E (cognitive 18): VersionFileHandler.\u003Cinit\u003E has cognitive complexity 18 (threshold 15). Drivers by points: if/else 12, loops 6 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/DB/src/main/java/db/buffers/VersionFileHandler.java"},"region":{"startLine":60}}}],"partialFingerprints":{"codehealthFindingId/v1":"6b1b7c83663f9036c1c857c717babe52dd77505955c29232bb1eae82d76ffc27"}},{"ruleId":"D2","level":"warning","message":{"text":"LongDurationLongKeyIterator.hasPrevious (cognitive 18): LongDurationLongKeyIterator.hasPrevious has cognitive complexity 18 (threshold 15). Drivers by points: if/else 17, boolean chains 1 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/DB/src/main/java/db/Table.java"},"region":{"startLine":2994}}}],"partialFingerprints":{"codehealthFindingId/v1":"79560a341b59208b5e011ab63505f0eb19a1b8e21e6cb918e803a15b4fe583bc"}},{"ruleId":"D2","level":"warning","message":{"text":"LongDurationFieldKeyIterator.hasPrevious (cognitive 18): LongDurationFieldKeyIterator.hasPrevious has cognitive complexity 18 (threshold 15). Drivers by points: if/else 16, boolean chains 2 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/DB/src/main/java/db/Table.java"},"region":{"startLine":3692}}}],"partialFingerprints":{"codehealthFindingId/v1":"e5217ef3d9259909f084ceda5ab27877b551ab20ac2a3b69325e74b63277f306"}},{"ruleId":"D2","level":"warning","message":{"text":"2.valueChanged (cognitive 18): 2.valueChanged has cognitive complexity 18 (threshold 15). Drivers by points: if/else 15, boolean chains 3 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/VersionTracking/src/main/java/ghidra/feature/vt/gui/provider/markuptable/VTMarkupItemsTableProvider.java"},"region":{"startLine":247}}}],"partialFingerprints":{"codehealthFindingId/v1":"9809cb74d0355b0f18979237f9ff96c968c40ce806a15644801a7ccaa2c11fc3"}},{"ruleId":"D2","level":"warning","message":{"text":"SarifReferenceWriter.genReferences (cognitive 18): SarifReferenceWriter.genReferences has cognitive complexity 18 (threshold 15). Drivers by points: if/else 15, loops 3 (nesting depth added 11). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/Sarif/src/main/java/sarif/export/ref/SarifReferenceWriter.java"},"region":{"startLine":56}}}],"partialFingerprints":{"codehealthFindingId/v1":"29d20850d2d9671d5f0476e4d922e453929280b5c6de73dd715eba97c1b805bf"}},{"ruleId":"D2","level":"warning","message":{"text":"FunctionsSarifMgr.setName (cognitive 18): FunctionsSarifMgr.setName has cognitive complexity 18 (threshold 15). Drivers by points: if/else 12, ternaries 3, boolean chains 2, error handling 1 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/Sarif/src/main/java/sarif/managers/FunctionsSarifMgr.java"},"region":{"startLine":250}}}],"partialFingerprints":{"codehealthFindingId/v1":"d662f885f440027c2cdc87e95d487500bd57731a91c42e5da98b2df233b34f6c"}},{"ruleId":"D2","level":"warning","message":{"text":"ProgramDiffPlugin.programLocationChanged (cognitive 18): ProgramDiffPlugin.programLocationChanged has cognitive complexity 18 (threshold 15). Drivers by points: if/else 15, boolean chains 3 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/ProgramDiff/src/main/java/ghidra/app/plugin/core/diff/ProgramDiffPlugin.java"},"region":{"startLine":175}}}],"partialFingerprints":{"codehealthFindingId/v1":"3d022654010047ad9a067beba3d6c7f5d18296d2dbe85309200276c0b0546e52"}},{"ruleId":"D2","level":"warning","message":{"text":"DebugData.dump (cognitive 18): DebugData.dump has cognitive complexity 18 (threshold 15). Drivers by points: loops 12, if/else 6 (nesting depth added 6). To reduce it, break up the iteration: give each loop body a named function, and split a multi-phase loop into one function per phase so no single body carries the whole pipeline."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/PDB/src/main/java/ghidra/app/util/bin/format/pdb2/pdbreader/DebugData.java"},"region":{"startLine":476}}}],"partialFingerprints":{"codehealthFindingId/v1":"26858e429c7f74e0425c160c5cc373eebffa8eea5797da9f536ecbd7a147c6ff"}},{"ruleId":"D2","level":"warning","message":{"text":"PdbAddressManager.reconcileMemoryBlocks (cognitive 18): PdbAddressManager.reconcileMemoryBlocks has cognitive complexity 18 (threshold 15). Drivers by points: if/else 11, boolean chains 4, loops 3 (nesting depth added 5). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/PDB/src/main/java/ghidra/app/util/pdb/pdbapplicator/PdbAddressManager.java"},"region":{"startLine":535}}}],"partialFingerprints":{"codehealthFindingId/v1":"1c36a7fe1cf57e13ddf9144dca2d96a9afdd20d410c06fd0186699776fa0f3ea"}},{"ruleId":"D2","level":"warning","message":{"text":"ObjcMessageAnalyzer.fixMsgSendSignatures (cognitive 18): ObjcMessageAnalyzer.fixMsgSendSignatures has cognitive complexity 18 (threshold 15). Drivers by points: if/else 9, boolean chains 2, error handling 2, match/switch 2, ternaries 2, loops 1 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/Objective-C/src/main/java/ghidra/app/plugin/core/analysis/ObjcMessageAnalyzer.java"},"region":{"startLine":221}}}],"partialFingerprints":{"codehealthFindingId/v1":"140b9514d19e8a9b8c281d4c56d110aeb4fe9e262bd97031617cb55af375d072"}},{"ruleId":"D2","level":"warning","message":{"text":"Objc2TypeMetadata.applyTo (cognitive 18): Objc2TypeMetadata.applyTo has cognitive complexity 18 (threshold 15). Drivers by points: error handling 12, loops 6 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/Objective-C/src/main/java/ghidra/app/util/bin/format/objc/objc2/Objc2TypeMetadata.java"},"region":{"startLine":279}}}],"partialFingerprints":{"codehealthFindingId/v1":"13802a01ca4d002908fa9c858d63a0d615645ec07a1cfb16e160baaa7e9c9a95"}},{"ruleId":"D2","level":"warning","message":{"text":"MDTypeInfoParser.parseSpecialHandlingFunction (cognitive 18): MDTypeInfoParser.parseSpecialHandlingFunction has cognitive complexity 18 (threshold 15). Drivers by points: ternaries 6, match/switch 5, if/else 3, loops 3, boolean chains 1 (nesting depth added 9). The drivers above price the dispatch low by construction \u2014 a dispatch is charged once however many cases it lists, while each branch inside an arm is charged in full \u2014 so most of this count is what the case bodies hold, and the arms are where it can be reduced. To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/MicrosoftDmang/src/main/java/mdemangler/typeinfo/MDTypeInfoParser.java"},"region":{"startLine":277}}}],"partialFingerprints":{"codehealthFindingId/v1":"efda608aec06356560967b942253498b98bc31a827e870f7056427113832275a"}},{"ruleId":"D2","level":"warning","message":{"text":"CreateEHCatchHandlerMapBackgroundCmd.createHandlerRefsAndSymbols (cognitive 18): CreateEHCatchHandlerMapBackgroundCmd.createHandlerRefsAndSymbols has cognitive complexity 18 (threshold 15). Drivers by points: if/else 12, error handling 5, loops 1 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/MicrosoftCodeAnalyzer/src/main/java/ghidra/app/cmd/data/exceptionhandling/CreateEHCatchHandlerMapBackgroundCmd.java"},"region":{"startLine":158}}}],"partialFingerprints":{"codehealthFindingId/v1":"0f3909b612569346748dbb07f5205f10ab3e0f33957238a58505d78c8bfe3c93"}},{"ruleId":"D2","level":"warning","message":{"text":"CreateEHUnwindMapBackgroundCmd.createActionRefsAndSymbols (cognitive 18): CreateEHUnwindMapBackgroundCmd.createActionRefsAndSymbols has cognitive complexity 18 (threshold 15). Drivers by points: if/else 12, error handling 5, loops 1 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/MicrosoftCodeAnalyzer/src/main/java/ghidra/app/cmd/data/exceptionhandling/CreateEHUnwindMapBackgroundCmd.java"},"region":{"startLine":86}}}],"partialFingerprints":{"codehealthFindingId/v1":"5e42e9ced5867cbb569994003ff5feecf5a0343a387e31d77c580ebe09640aa0"}},{"ruleId":"D2","level":"warning","message":{"text":"Repository.setUserList (cognitive 18): Repository.setUserList has cognitive complexity 18 (threshold 15). Drivers by points: if/else 12, boolean chains 3, error handling 2, loops 1 (nesting depth added 5). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/GhidraServer/src/main/java/ghidra/server/Repository.java"},"region":{"startLine":349}}}],"partialFingerprints":{"codehealthFindingId/v1":"478da54d80346f0d4834d7af6ddad20dd6cd838cfc39bbd7848aa386dd7f42ae"}},{"ruleId":"D2","level":"warning","message":{"text":"DexHeaderFormatMarkup.processClassAnnotations (cognitive 18): DexHeaderFormatMarkup.processClassAnnotations has cognitive complexity 18 (threshold 15). Drivers by points: if/else 9, loops 9 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/android/dex/analyzer/DexHeaderFormatMarkup.java"},"region":{"startLine":659}}}],"partialFingerprints":{"codehealthFindingId/v1":"a51044bee5654889692bb9f5dcb348a1fc6470bbbe8f22ab3ab7968ecd850cc0"}},{"ruleId":"D2","level":"warning","message":{"text":"ModifiedUTF8.decode (cognitive 18): ModifiedUTF8.decode has cognitive complexity 18 (threshold 15). Drivers by points: if/else 16, boolean chains 1, loops 1 (nesting depth added 9). This file\u0027s own header attributes it to another copyright holder, so it is code this repository carries rather than code it wrote: restructuring the body in place forks it from upstream and turns every future re-sync into a manual merge. The performable moves are to leave the body as close to its upstream form as possible and keep it behind a narrow interface of your own, and to re-sync it when upstream changes \u2014 or, if it has already diverged far enough that you maintain it here, adopt it deliberately and then split the body into named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/android/dex/format/ModifiedUTF8.java"},"region":{"startLine":29}}}],"partialFingerprints":{"codehealthFindingId/v1":"b9eb99738ad180f24b4d749ab26e031e6241dc2717c03e3f4e10ba817ac3d206"}},{"ruleId":"D2","level":"warning","message":{"text":"AbstractTaintState.queryIndex (cognitive 18): AbstractTaintState.queryIndex has cognitive complexity 18 (threshold 15). Drivers by points: if/else 13, boolean chains 2, error handling 2, match/switch 1 (nesting depth added 5). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/DecompilerDependent/src/main/java/ghidra/app/plugin/core/decompiler/taint/AbstractTaintState.java"},"region":{"startLine":240}}}],"partialFingerprints":{"codehealthFindingId/v1":"015ce650de6112ce108ab34a265e053e4e9d096ac7150ddd93fc886122f9c7cd"}},{"ruleId":"D2","level":"warning","message":{"text":"TaintProvider.matchOn (cognitive 18): TaintProvider.matchOn has cognitive complexity 18 (threshold 15). Drivers by points: if/else 16, boolean chains 2 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/DecompilerDependent/src/main/java/ghidra/app/plugin/core/decompiler/taint/TaintProvider.java"},"region":{"startLine":292}}}],"partialFingerprints":{"codehealthFindingId/v1":"a76ec8e5eb3e036ae4fd4444a30cdfef7dbc365dd61f9b780c9078401f1d51d1"}},{"ruleId":"D2","level":"warning","message":{"text":"DecompilerParallelConventionAnalysisCmd.analyzeFunction (cognitive 18): DecompilerParallelConventionAnalysisCmd.analyzeFunction has cognitive complexity 18 (threshold 15). Drivers by points: if/else 14, boolean chains 3, error handling 1 (nesting depth added 3). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/Decompiler/src/main/java/ghidra/app/cmd/function/DecompilerParallelConventionAnalysisCmd.java"},"region":{"startLine":129}}}],"partialFingerprints":{"codehealthFindingId/v1":"33663fbbf028d9fdaa3e8120098d4a4dfed09385a4de0f53b7a4329507fda25a"}},{"ruleId":"D2","level":"warning","message":{"text":"CppExporter.writeResults (cognitive 18): CppExporter.writeResults has cognitive complexity 18 (threshold 15). Drivers by points: if/else 14, loops 4 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/Decompiler/src/main/java/ghidra/app/util/exporter/CppExporter.java"},"region":{"startLine":215}}}],"partialFingerprints":{"codehealthFindingId/v1":"3de030a6d071f4fd64cddc410657491f4745687dbcc8ee30d9a2346c80dedd0e"}},{"ruleId":"D2","level":"warning","message":{"text":"InstructionSequence.toXml (cognitive 18): InstructionSequence.toXml has cognitive complexity 18 (threshold 15). Drivers by points: if/else 12, loops 6 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/BytePatterns/src/main/java/ghidra/bitpatterns/info/InstructionSequence.java"},"region":{"startLine":282}}}],"partialFingerprints":{"codehealthFindingId/v1":"4715efd34cab9bc0476eddd0ec0a4697436b94a398fb0cba2863a4c504a115dd"}},{"ruleId":"D2","level":"warning","message":{"text":"BsfvTokenHighlightMatcher.start (cognitive 18): BsfvTokenHighlightMatcher.start has cognitive complexity 18 (threshold 15). Drivers by points: if/else 12, loops 6 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/BSimFeatureVisualizer/src/main/java/ghidra/bsfv/BsfvTokenHighlightMatcher.java"},"region":{"startLine":112}}}],"partialFingerprints":{"codehealthFindingId/v1":"cf06f70000715c964ade2e5e5f0dcb6cee793ca53fb29490762f9af8775b495e"}},{"ruleId":"D2","level":"warning","message":{"text":"BSimQuery.restoreQuery (cognitive 18): BSimQuery.restoreQuery has cognitive complexity 18 (threshold 15). Drivers by points: if/else 18. To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/BSim/src/main/java/ghidra/features/bsim/query/protocol/BSimQuery.java"},"region":{"startLine":98}}}],"partialFingerprints":{"codehealthFindingId/v1":"a086529377f7e487d4a4cc13d00c25fce723b90164a7df8cf072e38fed751cd5"}},{"ruleId":"D2","level":"warning","message":{"text":"ExecutableResultWithDeDuping.generate (cognitive 18): ExecutableResultWithDeDuping.generate has cognitive complexity 18 (threshold 15). Drivers by points: if/else 10, loops 5, boolean chains 3 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/BSim/src/main/java/ghidra/features/bsim/query/protocol/ExecutableResultWithDeDuping.java"},"region":{"startLine":83}}}],"partialFingerprints":{"codehealthFindingId/v1":"7e8209976ebd659a558785e3a8c4c33ed147a2fbff612b7829cfc62bbdc2120f"}},{"ruleId":"D2","level":"warning","message":{"text":"SymZ3MemoryMap.load (cognitive 18): SymZ3MemoryMap.load has cognitive complexity 18 (threshold 15). Drivers by points: if/else 16, loops 2 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Extensions/SymbolicSummaryZ3/src/main/java/ghidra/pcode/emu/symz3/SymZ3MemoryMap.java"},"region":{"startLine":199}}}],"partialFingerprints":{"codehealthFindingId/v1":"749acb662e44f5376aac968daf2c44771ddf80ca674447867ee666be151d442a"}},{"ruleId":"D2","level":"warning","message":{"text":"PcodeInterval.evalPcodeBinaryExpression (cognitive 18): PcodeInterval.evalPcodeBinaryExpression has cognitive complexity 18 (threshold 15). Drivers by points: if/else 13, boolean chains 5. To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Extensions/Lisa/src/main/java/ghidra/lisa/pcode/analyses/PcodeInterval.java"},"region":{"startLine":289}}}],"partialFingerprints":{"codehealthFindingId/v1":"8160b1819555cfed1bd4f2394e391a54992b8b8c924cb3c1b67164992fceb7d1"}},{"ruleId":"D2","level":"warning","message":{"text":"PcodeCodeMemberVisitor.visitCodeMember (cognitive 18): PcodeCodeMemberVisitor.visitCodeMember has cognitive complexity 18 (threshold 15). Drivers by points: if/else 9, loops 8, boolean chains 1 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Extensions/Lisa/src/main/java/ghidra/lisa/pcode/PcodeCodeMemberVisitor.java"},"region":{"startLine":105}}}],"partialFingerprints":{"codehealthFindingId/v1":"fef742ba54dc93a3ede26f9c55563018ec014990cf288c94804d81858efabd3f"}},{"ruleId":"D2","level":"warning","message":{"text":"GhidraJythonInterpreter.injectScriptHierarchy (cognitive 18): GhidraJythonInterpreter.injectScriptHierarchy has cognitive complexity 18 (threshold 15). Drivers by points: if/else 7, loops 5, error handling 4, boolean chains 2 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Extensions/Jython/src/main/java/ghidra/jython/GhidraJythonInterpreter.java"},"region":{"startLine":336}}}],"partialFingerprints":{"codehealthFindingId/v1":"ca3f0ac38ed36c6cbe258eb1eb0de28b464dde52fab977c612873f19988f94fe"}},{"ruleId":"D2","level":"warning","message":{"text":"DependentServiceResolver.addClass (cognitive 18): DependentServiceResolver.addClass has cognitive complexity 18 (threshold 15). Drivers by points: if/else 13, loops 5 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/ProposedUtils/src/main/java/generic/depends/DependentServiceResolver.java"},"region":{"startLine":54}}}],"partialFingerprints":{"codehealthFindingId/v1":"1a39bd9cf05e6c396442cea28aaf54e33fc957f3bbeb1b8e069ffbcbc3a6ab08"}},{"ruleId":"D2","level":"warning","message":{"text":"DBTraceTimeManager.doFindNearest (cognitive 18): DBTraceTimeManager.doFindNearest has cognitive complexity 18 (threshold 15). Drivers by points: if/else 12, ternaries 3, boolean chains 2, loops 1 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/time/DBTraceTimeManager.java"},"region":{"startLine":216}}}],"partialFingerprints":{"codehealthFindingId/v1":"cf5a8ede7c45fae09b44d447359d5ed5e5785cc94de0d37bab6560aa6b041c73"}},{"ruleId":"D2","level":"warning","message":{"text":"DebuggerStaticMappingProvider.activatedAdd (cognitive 18): DebuggerStaticMappingProvider.activatedAdd has cognitive complexity 18 (threshold 15). Drivers by points: ternaries 7, boolean chains 5, if/else 5, error handling 1 (nesting depth added 1). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/gui/modules/DebuggerStaticMappingProvider.java"},"region":{"startLine":285}}}],"partialFingerprints":{"codehealthFindingId/v1":"5defd3acb7f239dde1c5454859ba856d8c25ac50615c04c3e2f658b4356a3aa6"}},{"ruleId":"D2","level":"warning","message":{"text":"SymPcodeExecutor.computeStdcallExtrapop (cognitive 18): SymPcodeExecutor.computeStdcallExtrapop has cognitive complexity 18 (threshold 15). Drivers by points: ternaries 7, if/else 5, loops 4, boolean chains 2 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/stack/SymPcodeExecutor.java"},"region":{"startLine":322}}}],"partialFingerprints":{"codehealthFindingId/v1":"672079d43c7df01cc8f4fa36ab2ecf85e14ba1955c8107fdd8bfbc85195cb6b4"}},{"ruleId":"D2","level":"warning","message":{"text":"ScriptAttributesParser.parseTty (cognitive 18): ScriptAttributesParser.parseTty has cognitive complexity 18 (threshold 15). Drivers by points: if/else 13, error handling 3, boolean chains 1, match/switch 1 (nesting depth added 10). The drivers above price the dispatch low by construction \u2014 a dispatch is charged once however many cases it lists, while each branch inside an arm is charged in full \u2014 so most of this count is what the case bodies hold, and the arms are where it can be reduced. To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/Debugger-rmi-trace/src/main/java/ghidra/app/plugin/core/debug/gui/tracermi/launcher/ScriptAttributesParser.java"},"region":{"startLine":753}}}],"partialFingerprints":{"codehealthFindingId/v1":"e00773d4f5c70951b231f0468913c805d0f7e4d3755896115c2e39aa44270bd3"}},{"ruleId":"D2","level":"warning","message":{"text":"IsfDataTypeWriter.processMap (cognitive 18): IsfDataTypeWriter.processMap has cognitive complexity 18 (threshold 15). Drivers by points: if/else 17, loops 1 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/Debugger-isf/src/main/java/ghidra/program/model/data/ISF/IsfDataTypeWriter.java"},"region":{"startLine":267}}}],"partialFingerprints":{"codehealthFindingId/v1":"3848273a6397e7ed1ee4f7c8015c3728ca124a710a2d761b4ed852ad56159225"}},{"ruleId":"D2","level":"warning","message":{"text":"VersionControlAction1Test.testOpenVersionWith (cognitive 18): VersionControlAction1Test.testOpenVersionWith has cognitive complexity 18 (threshold 15). Drivers by points: if/else 13, loops 5 (nesting depth added 11). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Test/IntegrationTest/src/test.slow/java/ghidra/framework/main/datatree/VersionControlAction1Test.java"},"region":{"startLine":425}}}],"partialFingerprints":{"codehealthFindingId/v1":"f3c0680d8e534188f2fcb30a14f013acdfb23f102cab8720ac91eda492b16c62"}},{"ruleId":"D2","level":"warning","message":{"text":"PythonTypeStubDoclet.getPlainDocString (cognitive 17): PythonTypeStubDoclet.getPlainDocString has cognitive complexity 17 (threshold 15). Drivers by points: if/else 14, match/switch 2, loops 1 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"GhidraBuild/BuildFiles/Doclets/src/main/java/ghidra/doclets/typestubs/PythonTypeStubDoclet.java"},"region":{"startLine":477}}}],"partialFingerprints":{"codehealthFindingId/v1":"9468895fa9c25a7a7054f8e431308571091f84efa4a17eb72b4df20215a18c48"}},{"ruleId":"D2","level":"warning","message":{"text":"1.evaluateContext (cognitive 17): 1.evaluateContext has cognitive complexity 17 (threshold 15). Drivers by points: if/else 15, boolean chains 2 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Processors/x86/src/main/java/ghidra/app/plugin/core/analysis/X86Analyzer.java"},"region":{"startLine":55}}}],"partialFingerprints":{"codehealthFindingId/v1":"8aa0fe387a84fec90bb2f180c3a5aacd2f1d1c235ada852868eea9645c23e87d"}},{"ruleId":"D2","level":"warning","message":{"text":"1.evaluateContext (cognitive 17): 1.evaluateContext has cognitive complexity 17 (threshold 15). Drivers by points: if/else 11, boolean chains 4, loops 2 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Processors/PowerPC/src/main/java/ghidra/app/plugin/core/analysis/PowerPCAddressAnalyzer.java"},"region":{"startLine":165}}}],"partialFingerprints":{"codehealthFindingId/v1":"6ead24fc88479c67ffa770da8df3e57f52c46fd58bf308890123429142f9f251"}},{"ruleId":"D2","level":"warning","message":{"text":"Pic12Analyzer.handleWRegModification (cognitive 17): Pic12Analyzer.handleWRegModification has cognitive complexity 17 (threshold 15). Drivers by points: if/else 15, boolean chains 2 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Processors/PIC/src/main/java/ghidra/app/plugin/core/analysis/Pic12Analyzer.java"},"region":{"startLine":461}}}],"partialFingerprints":{"codehealthFindingId/v1":"d4f06a9932b63142e065317a34d85ec4e1ef89242502c2c5972ae9e71fc46252"}},{"ruleId":"D2","level":"warning","message":{"text":"Pic12Analyzer.startNewBlock (cognitive 17): Pic12Analyzer.startNewBlock has cognitive complexity 17 (threshold 15). Drivers by points: if/else 13, boolean chains 3, loops 1 (nesting depth added 5). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Processors/PIC/src/main/java/ghidra/app/plugin/core/analysis/Pic12Analyzer.java"},"region":{"startLine":364}}}],"partialFingerprints":{"codehealthFindingId/v1":"3e190462a3fd72d3c5aa4c5f90a5b80516f36a5d5e9f30b9afe2dd70e727cdb0"}},{"ruleId":"D2","level":"warning","message":{"text":"MIPS_ElfExtension.fixupGot (cognitive 17): MIPS_ElfExtension.fixupGot has cognitive complexity 17 (threshold 15). Drivers by points: if/else 10, boolean chains 3, error handling 2, loops 2 (nesting depth added 4). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Processors/MIPS/src/main/java/ghidra/app/util/bin/format/elf/extend/MIPS_ElfExtension.java"},"region":{"startLine":777}}}],"partialFingerprints":{"codehealthFindingId/v1":"8b0dd5dba42da7768ea8c74df016c639af96d6cf8246c86f2aacde40af390127"}},{"ruleId":"D2","level":"warning","message":{"text":"MIPS_ElfExtension.processMipsHeaders (cognitive 17): MIPS_ElfExtension.processMipsHeaders has cognitive complexity 17 (threshold 15). Drivers by points: if/else 11, error handling 3, loops 2, boolean chains 1 (nesting depth added 5). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Processors/MIPS/src/main/java/ghidra/app/util/bin/format/elf/extend/MIPS_ElfExtension.java"},"region":{"startLine":523}}}],"partialFingerprints":{"codehealthFindingId/v1":"c85a105996434b73d3c52f02c2d8ec557302f1951166d31ee1d54db22ad9393d"}},{"ruleId":"D2","level":"warning","message":{"text":"HexagonPrologEpilogAnalyzer.setPrologEpilog (cognitive 17): HexagonPrologEpilogAnalyzer.setPrologEpilog has cognitive complexity 17 (threshold 15). Drivers by points: ternaries 10, error handling 4, if/else 3 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Processors/Hexagon/src/main/java/ghidra/app/plugin/core/analysis/HexagonPrologEpilogAnalyzer.java"},"region":{"startLine":100}}}],"partialFingerprints":{"codehealthFindingId/v1":"15edcd4f069eb0f9ac02bbad1e4e871a5a639b2f755f4f060963fe7510ec9344"}},{"ruleId":"D2","level":"warning","message":{"text":"ClassifyFloatOpBehavior.evaluate (cognitive 17): ClassifyFloatOpBehavior.evaluate has cognitive complexity 17 (threshold 15). Drivers by points: if/else 10, boolean chains 6, ternaries 1. To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Processors/Hexagon/src/main/java/ghidra/program/emulation/HexagonEmulateInstructionStateModifier.java"},"region":{"startLine":67}}}],"partialFingerprints":{"codehealthFindingId/v1":"76cefe35339d314c4bd544523cc26bd8f3b59d48d73cf041aa4f1ed4e0aa328e"}},{"ruleId":"D2","level":"warning","message":{"text":"MultExpressionSolver.solveLeftSide (cognitive 17): MultExpressionSolver.solveLeftSide has cognitive complexity 17 (threshold 15). Drivers by points: if/else 11, loops 6 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/assembler/sleigh/expr/MultExpressionSolver.java"},"region":{"startLine":116}}}],"partialFingerprints":{"codehealthFindingId/v1":"d870a40174dc32da53189d3a3bc5827797378779d4d5fb712888c65fd8c26086"}},{"ruleId":"D2","level":"warning","message":{"text":"AssemblyConstructorSemantic.solveContextChanges (cognitive 17): AssemblyConstructorSemantic.solveContextChanges has cognitive complexity 17 (threshold 15). Drivers by points: if/else 16, loops 1 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/assembler/sleigh/sem/AssemblyConstructorSemantic.java"},"region":{"startLine":301}}}],"partialFingerprints":{"codehealthFindingId/v1":"bbb809456b46bc0424acd2feeadad1dce8e96517a31908fcd2296a7fedc35a98"}},{"ruleId":"D2","level":"warning","message":{"text":"PseudoDisassembler.checkPseudoBody (cognitive 17): PseudoDisassembler.checkPseudoBody has cognitive complexity 17 (threshold 15). Drivers by points: if/else 13, boolean chains 3, loops 1 (nesting depth added 3). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/util/PseudoDisassembler.java"},"region":{"startLine":948}}}],"partialFingerprints":{"codehealthFindingId/v1":"6dbadbf12c7f243f7856b91a701df122aa83c77359d0ceed2cb20d4e2406d38f"}},{"ruleId":"D2","level":"warning","message":{"text":"BigFloat.compareTo (cognitive 17): BigFloat.compareTo has cognitive complexity 17 (threshold 15). Drivers by points: if/else 15, boolean chains 2 (nesting depth added 5). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcode/floatformat/BigFloat.java"},"region":{"startLine":993}}}],"partialFingerprints":{"codehealthFindingId/v1":"14a336b50bb1f77298ce31c67f842e7200ec071e5258300c2c4aaa565d011d7b"}},{"ruleId":"D2","level":"warning","message":{"text":"FloatFormat.getEncoding (cognitive 17): FloatFormat.getEncoding has cognitive complexity 17 (threshold 15). Drivers by points: if/else 14, ternaries 2, match/switch 1 (nesting depth added 5). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcode/floatformat/FloatFormat.java"},"region":{"startLine":551}}}],"partialFingerprints":{"codehealthFindingId/v1":"cee09073bcdabb478a2914cefb4e3c5519fe9d79630a53cb91c644953d3b47fe"}},{"ruleId":"D2","level":"warning","message":{"text":"ConsistencyChecker.optimizeGather2 (cognitive 17): ConsistencyChecker.optimizeGather2 has cognitive complexity 17 (threshold 15). Drivers by points: if/else 10, loops 6, boolean chains 1 (nesting depth added 6). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition, and where an else follows a branch that already returns, drop the trailing else and let the rest of the body continue at one level."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slgh_compile/ConsistencyChecker.java"},"region":{"startLine":1099}}}],"partialFingerprints":{"codehealthFindingId/v1":"da75d0f654fa1102fc3d3d7796415f1a896d994e1ce813b893026d27b447c702"}},{"ruleId":"D2","level":"warning","message":{"text":"ConsistencyChecker.setPostOrder (cognitive 17): ConsistencyChecker.setPostOrder has cognitive complexity 17 (threshold 15). Drivers by points: if/else 16, loops 1 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slgh_compile/ConsistencyChecker.java"},"region":{"startLine":808}}}],"partialFingerprints":{"codehealthFindingId/v1":"6813a454596c668cf1367bc643ca85f6418898ff466d10218673c0edb88bfc81"}},{"ruleId":"D2","level":"warning","message":{"text":"SleighCompileOptions.parse (cognitive 17): SleighCompileOptions.parse has cognitive complexity 17 (threshold 15). Drivers by points: if/else 14, ternaries 2, loops 1 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slgh_compile/SleighCompileOptions.java"},"region":{"startLine":86}}}],"partialFingerprints":{"codehealthFindingId/v1":"b11fd5c68af4c46fa8e94f75f81df7be73d371a79d7067772aa84617299d88c0"}},{"ruleId":"D2","level":"warning","message":{"text":"DataDB.hasBeenDeleted (cognitive 17): DataDB.hasBeenDeleted has cognitive complexity 17 (threshold 15). Drivers by points: if/else 12, ternaries 3, boolean chains 2 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/code/DataDB.java"},"region":{"startLine":107}}}],"partialFingerprints":{"codehealthFindingId/v1":"487d7527b4fd7316f111a7f0ee396217de23d84f93850bc5ebf42456f7388dce"}},{"ruleId":"D2","level":"warning","message":{"text":"DataTypeManagerDB.initializeAdapters (cognitive 17): DataTypeManagerDB.initializeAdapters has cognitive complexity 17 (threshold 15). Drivers by points: error handling 16, if/else 1. To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/DataTypeManagerDB.java"},"region":{"startLine":421}}}],"partialFingerprints":{"codehealthFindingId/v1":"6d72ba2c074b2b201ede17a69047c756f45d95e7259cd82cf0251ba56be3535f"}},{"ruleId":"D2","level":"warning","message":{"text":"DataTypeUtilities.isSameKindDataType (cognitive 17): DataTypeUtilities.isSameKindDataType has cognitive complexity 17 (threshold 15). Drivers by points: if/else 14, boolean chains 2, loops 1 (nesting depth added 4). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/DataTypeUtilities.java"},"region":{"startLine":514}}}],"partialFingerprints":{"codehealthFindingId/v1":"c0734257379071db1b5ad92e2da6b2c5a379a2dc0ee402227a390e582a76f678"}},{"ruleId":"D2","level":"warning","message":{"text":"StructureDB.dataTypeDeleted (cognitive 17): StructureDB.dataTypeDeleted has cognitive complexity 17 (threshold 15). Drivers by points: if/else 12, boolean chains 3, error handling 1, loops 1 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/StructureDB.java"},"region":{"startLine":1760}}}],"partialFingerprints":{"codehealthFindingId/v1":"828ffcbd9fc06d78a36bd15dc4f6675e6b4fe4c55db8265042ef6b5b1d2fcb55"}},{"ruleId":"D2","level":"warning","message":{"text":"StructureDB.insert (cognitive 17): StructureDB.insert has cognitive complexity 17 (threshold 15). Drivers by points: if/else 15, boolean chains 1, error handling 1 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/StructureDB.java"},"region":{"startLine":321}}}],"partialFingerprints":{"codehealthFindingId/v1":"a522d891b71042526e8e3b1b1f9da2227cda5ac45dcafab8852fd3140d1dbdbe"}},{"ruleId":"D2","level":"warning","message":{"text":"UnionDB.dataTypeDeleted (cognitive 17): UnionDB.dataTypeDeleted has cognitive complexity 17 (threshold 15). Drivers by points: if/else 12, boolean chains 3, error handling 1, loops 1 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/UnionDB.java"},"region":{"startLine":668}}}],"partialFingerprints":{"codehealthFindingId/v1":"4f233767f6a8339260415006cb5d946b7fe382a1ed9384d6c124bcb24ad43fc0"}},{"ruleId":"D2","level":"warning","message":{"text":"FunctionDB.getPrototypeString (cognitive 17): FunctionDB.getPrototypeString has cognitive complexity 17 (threshold 15). Drivers by points: if/else 10, boolean chains 3, ternaries 3, loops 1 (nesting depth added 4). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/function/FunctionDB.java"},"region":{"startLine":447}}}],"partialFingerprints":{"codehealthFindingId/v1":"ac51788965cff69bfb347c2614f2cb0c8a1c9fa39fac2448a80bee87101a48ce"}},{"ruleId":"D2","level":"warning","message":{"text":"AddressMapDB.encodeAbsolute (cognitive 17): AddressMapDB.encodeAbsolute has cognitive complexity 17 (threshold 15). Drivers by points: if/else 16, match/switch 1 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/map/AddressMapDB.java"},"region":{"startLine":346}}}],"partialFingerprints":{"codehealthFindingId/v1":"ae7e71ccfee9d18494bc792bc459ad6496028562aea5d306e803c7b6bee525a6"}},{"ruleId":"D2","level":"warning","message":{"text":"ProgramContentHandler.getDomainObject (cognitive 17): ProgramContentHandler.getDomainObject has cognitive complexity 17 (threshold 15). Drivers by points: if/else 12, error handling 3, boolean chains 1, ternaries 1 (nesting depth added 4). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/ProgramContentHandler.java"},"region":{"startLine":169}}}],"partialFingerprints":{"codehealthFindingId/v1":"a953d7692bb49be115bc59fdbfb0ed8ca0159550af6a1561634c48da7f76e064"}},{"ruleId":"D2","level":"warning","message":{"text":"Disassembler.processInstructionFlows (cognitive 17): Disassembler.processInstructionFlows has cognitive complexity 17 (threshold 15). Drivers by points: if/else 14, boolean chains 2, loops 1 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/disassemble/Disassembler.java"},"region":{"startLine":1273}}}],"partialFingerprints":{"codehealthFindingId/v1":"8a0f173f1eb561c217e01dcc61b3fecd3154e6adae9d150bf41d2ff45ee3a9d4"}},{"ruleId":"D2","level":"warning","message":{"text":"Mark.remove (cognitive 17): Mark.remove has cognitive complexity 17 (threshold 15). Drivers by points: if/else 11, loops 6 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/address/AddressObjectMap.java"},"region":{"startLine":490}}}],"partialFingerprints":{"codehealthFindingId/v1":"b65f6b3d1ffb27e613191eb91af2d671c20ab07da0b1d3f86a910bb53e892bba"}},{"ruleId":"D2","level":"warning","message":{"text":"MultEntSubIterator.hasNext (cognitive 17): MultEntSubIterator.hasNext has cognitive complexity 17 (threshold 15). Drivers by points: if/else 15, boolean chains 1, loops 1 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/block/MultEntSubIterator.java"},"region":{"startLine":83}}}],"partialFingerprints":{"codehealthFindingId/v1":"4d0bc456152cc9c2f2382dfdb436c83b89a20cb472ffd9e73c1bcd56722294d6"}},{"ruleId":"D2","level":"warning","message":{"text":"StructureDataType.dataTypeSizeChanged (cognitive 17): StructureDataType.dataTypeSizeChanged has cognitive complexity 17 (threshold 15). Drivers by points: if/else 16, loops 1 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/StructureDataType.java"},"region":{"startLine":1124}}}],"partialFingerprints":{"codehealthFindingId/v1":"8df35a477a2c3808eddb66f886a37bc20b2f52db72732f1d6fc113d324b00fdf"}},{"ruleId":"D2","level":"warning","message":{"text":"StructureDataType.insert (cognitive 17): StructureDataType.insert has cognitive complexity 17 (threshold 15). Drivers by points: if/else 15, boolean chains 1, error handling 1 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/StructureDataType.java"},"region":{"startLine":704}}}],"partialFingerprints":{"codehealthFindingId/v1":"53410d279209295abc99261516f796a25ca89806cc3e45e74a248864a4ef0f20"}},{"ruleId":"D2","level":"warning","message":{"text":"MultiSlotDualAssign.restoreXml (cognitive 17): MultiSlotDualAssign.restoreXml has cognitive complexity 17 (threshold 15). Drivers by points: if/else 14, boolean chains 1, error handling 1, loops 1 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/lang/protorules/MultiSlotDualAssign.java"},"region":{"startLine":328}}}],"partialFingerprints":{"codehealthFindingId/v1":"89dc07035584e3ac61210d86ce90aa31d9f5f97168afa3bfd10e06ea53cae32c"}},{"ruleId":"D2","level":"warning","message":{"text":"ParamEntry.resolveOverlap (cognitive 17): ParamEntry.resolveOverlap has cognitive complexity 17 (threshold 15). Drivers by points: if/else 12, loops 5 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/lang/ParamEntry.java"},"region":{"startLine":470}}}],"partialFingerprints":{"codehealthFindingId/v1":"9dd886dcc3e925d0312bbd7f316f5d6a139307d9e3ffd7e1c76915ce0597fb74"}},{"ruleId":"D2","level":"warning","message":{"text":"ParameterPieces.getVariableStorage (cognitive 17): ParameterPieces.getVariableStorage has cognitive complexity 17 (threshold 15). Drivers by points: if/else 12, error handling 3, boolean chains 2 (nesting depth added 3). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition, and where an else follows a branch that already returns, drop the trailing else and let the rest of the body continue at one level."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/lang/ParameterPieces.java"},"region":{"startLine":66}}}],"partialFingerprints":{"codehealthFindingId/v1":"5059d113e15cc36d02a64b2781c812e90e5ffe9ea6b77b8da8c3b0c542254188"}},{"ruleId":"D2","level":"warning","message":{"text":"PrototypeModel.encode (cognitive 17): PrototypeModel.encode has cognitive complexity 17 (threshold 15). Drivers by points: if/else 14, boolean chains 3. To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/lang/PrototypeModel.java"},"region":{"startLine":501}}}],"partialFingerprints":{"codehealthFindingId/v1":"3e33e0c7ba1f49a9e9ba08f7c3e878d9c2385c83cc240fa4d3a219a004bdd76e"}},{"ruleId":"D2","level":"warning","message":{"text":"ScoreProtoModel.doScore (cognitive 17): ScoreProtoModel.doScore has cognitive complexity 17 (threshold 15). Drivers by points: if/else 13, loops 4 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/lang/PrototypeModelMerged.java"},"region":{"startLine":184}}}],"partialFingerprints":{"codehealthFindingId/v1":"bafecbd37f5e62db46f9284cf6b2fea89cd5ddefa29cacf35b55053c86799008"}},{"ruleId":"D2","level":"warning","message":{"text":"VariableUtilities.checkVariableConflict (cognitive 17): VariableUtilities.checkVariableConflict has cognitive complexity 17 (threshold 15). Drivers by points: if/else 13, boolean chains 3, loops 1 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/listing/VariableUtilities.java"},"region":{"startLine":629}}}],"partialFingerprints":{"codehealthFindingId/v1":"7c86aaf157bab9d48cdb13388011defab7dd2c0afefba6a3c507a3f3dd1bb815"}},{"ruleId":"D2","level":"warning","message":{"text":"HighFunction.decode (cognitive 17): HighFunction.decode has cognitive complexity 17 (threshold 15). Drivers by points: if/else 16, loops 1 (nesting depth added 4). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/pcode/HighFunction.java"},"region":{"startLine":247}}}],"partialFingerprints":{"codehealthFindingId/v1":"3d4da73d7c58aebca516d9a610bc203ca029036b76fc90f4c673d0185e9b9e87"}},{"ruleId":"D2","level":"warning","message":{"text":"HighFunctionDBUtil.gatherMergeSet (cognitive 17): HighFunctionDBUtil.gatherMergeSet has cognitive complexity 17 (threshold 15). Drivers by points: if/else 13, boolean chains 2, loops 2 (nesting depth added 5). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/pcode/HighFunctionDBUtil.java"},"region":{"startLine":340}}}],"partialFingerprints":{"codehealthFindingId/v1":"b14018d59ae595c75957ed006505a7c5d5d4b320a5d2d8c95b23359efd5b74d8"}},{"ruleId":"D2","level":"warning","message":{"text":"DefaultLanguageService.getDefinedExternalToolNames (cognitive 17): DefaultLanguageService.getDefinedExternalToolNames has cognitive complexity 17 (threshold 15). Drivers by points: if/else 12, loops 3, boolean chains 2 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/util/DefaultLanguageService.java"},"region":{"startLine":257}}}],"partialFingerprints":{"codehealthFindingId/v1":"162c3cd64a095353ca74a9cdc0bf817b944dfc23af309c2ec75a0df0e3bf3e79"}},{"ruleId":"D2","level":"warning","message":{"text":"UnionAddressRangeIterator.seekNext (cognitive 17): UnionAddressRangeIterator.seekNext has cognitive complexity 17 (threshold 15). Drivers by points: if/else 14, boolean chains 2, loops 1 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/util/UnionAddressRangeIterator.java"},"region":{"startLine":79}}}],"partialFingerprints":{"codehealthFindingId/v1":"077010f76793aeba094993aa3ef626be27a31d6bc87f4f58a37799ff0f93714f"}},{"ruleId":"D2","level":"warning","message":{"text":"FolderLinkContentHandler.getLinkedFolder (cognitive 17): FolderLinkContentHandler.getLinkedFolder has cognitive complexity 17 (threshold 15). Drivers by points: if/else 13, error handling 3, boolean chains 1 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Project/src/main/java/ghidra/framework/data/FolderLinkContentHandler.java"},"region":{"startLine":80}}}],"partialFingerprints":{"codehealthFindingId/v1":"592a3c4d9600e5dbb6c9d0da12d68320820819b484b811dd8e52bd4be60f9115"}},{"ruleId":"D2","level":"warning","message":{"text":"GhidraFileData.checkout (cognitive 17): GhidraFileData.checkout has cognitive complexity 17 (threshold 15). Drivers by points: if/else 13, ternaries 2, boolean chains 1, error handling 1 (nesting depth added 1). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Project/src/main/java/ghidra/framework/data/GhidraFileData.java"},"region":{"startLine":1401}}}],"partialFingerprints":{"codehealthFindingId/v1":"c6ca03c2b01564c29510358f08fe33bdff4d50c861919aff94e38e5debf69002"}},{"ruleId":"D2","level":"warning","message":{"text":"GhidraFolderData.moveTo (cognitive 17): GhidraFolderData.moveTo has cognitive complexity 17 (threshold 15). Drivers by points: if/else 12, error handling 3, boolean chains 2 (nesting depth added 3). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Project/src/main/java/ghidra/framework/data/GhidraFolderData.java"},"region":{"startLine":1193}}}],"partialFingerprints":{"codehealthFindingId/v1":"95ac047d614587247e6f7305446ef5e84672425334a56894f0e3f00ad6a2b527"}},{"ruleId":"D2","level":"warning","message":{"text":"LinkedGhidraFolder.getLinkedProjectData (cognitive 17): LinkedGhidraFolder.getLinkedProjectData has cognitive complexity 17 (threshold 15). Drivers by points: if/else 15, boolean chains 2 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Project/src/main/java/ghidra/framework/data/LinkedGhidraFolder.java"},"region":{"startLine":147}}}],"partialFingerprints":{"codehealthFindingId/v1":"6fefef1a8f44c3cda364bc77304aabd19022841fe58c73ad8109c74c273cc660"}},{"ruleId":"D2","level":"warning","message":{"text":"SynchronizedTransactionManager.endTransaction (cognitive 17): SynchronizedTransactionManager.endTransaction has cognitive complexity 17 (threshold 15). Drivers by points: if/else 16, boolean chains 1 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Project/src/main/java/ghidra/framework/data/SynchronizedTransactionManager.java"},"region":{"startLine":182}}}],"partialFingerprints":{"codehealthFindingId/v1":"38870bfbdff47a998a56b02569369a6c7ced9bc8ad11921119ffc9ae893dbe1d"}},{"ruleId":"D2","level":"warning","message":{"text":"DomainFileInfo.computeName (cognitive 17): DomainFileInfo.computeName has cognitive complexity 17 (threshold 15). Drivers by points: if/else 17 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Project/src/main/java/ghidra/framework/main/datatable/DomainFileInfo.java"},"region":{"startLine":46}}}],"partialFingerprints":{"codehealthFindingId/v1":"d44d776bad310f920ec4b97a662018ead4f6c5efdbd67b07f17ee1d026c51c47"}},{"ruleId":"D2","level":"warning","message":{"text":"DomainFileNode.getFormattedLinkPath (cognitive 17): DomainFileNode.getFormattedLinkPath has cognitive complexity 17 (threshold 15). Drivers by points: if/else 13, error handling 4 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Project/src/main/java/ghidra/framework/main/datatree/DomainFileNode.java"},"region":{"startLine":303}}}],"partialFingerprints":{"codehealthFindingId/v1":"74047026dced3d12d5266d3f8aaa40eb1926dacffffcebe7ac160af1dd7a0b96"}},{"ruleId":"D2","level":"warning","message":{"text":"DeleteProjectFilesTask.deleteFile (cognitive 17): DeleteProjectFilesTask.deleteFile has cognitive complexity 17 (threshold 15). Drivers by points: if/else 15, boolean chains 1, error handling 1 (nesting depth added 5). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Project/src/main/java/ghidra/framework/main/projectdata/actions/DeleteProjectFilesTask.java"},"region":{"startLine":207}}}],"partialFingerprints":{"codehealthFindingId/v1":"92d06cf15060569f13296b93ad10aec7bd9781c24f5896c2660745971a6fb620"}},{"ruleId":"D2","level":"warning","message":{"text":"DefaultGhidraProtocolConnector.connect (cognitive 17): DefaultGhidraProtocolConnector.connect has cognitive complexity 17 (threshold 15). Drivers by points: if/else 16, error handling 1 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Project/src/main/java/ghidra/framework/protocol/ghidra/DefaultGhidraProtocolConnector.java"},"region":{"startLine":56}}}],"partialFingerprints":{"codehealthFindingId/v1":"21b78188f92230349e06e033361397252b840cba6740a6c9f77eccdf6ee4ce1a"}},{"ruleId":"D2","level":"warning","message":{"text":"GhidraURL.resolve (cognitive 17): GhidraURL.resolve has cognitive complexity 17 (threshold 15). Drivers by points: if/else 15, boolean chains 1, error handling 1 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Project/src/main/java/ghidra/framework/protocol/ghidra/GhidraURL.java"},"region":{"startLine":532}}}],"partialFingerprints":{"codehealthFindingId/v1":"5f54379c88370bd6a10fde4142c887dd4120e013a6e2597a70b46be5e2141014"}},{"ruleId":"D2","level":"warning","message":{"text":"UnusedHelpImageFileFinder.parseArguments (cognitive 17): UnusedHelpImageFileFinder.parseArguments has cognitive complexity 17 (threshold 15). Drivers by points: if/else 12, loops 5 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Help/src/main/java/help/validator/UnusedHelpImageFileFinder.java"},"region":{"startLine":204}}}],"partialFingerprints":{"codehealthFindingId/v1":"339665e324ec8f878abc78d46849a3d3bf91493ecf505d12d7a1c219a752c7b3"}},{"ruleId":"D2","level":"warning","message":{"text":"AbstractGuiTest.findComponent (cognitive 17): AbstractGuiTest.findComponent has cognitive complexity 17 (threshold 15). Drivers by points: if/else 13, loops 3, boolean chains 1 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Gui/src/main/java/generic/test/AbstractGuiTest.java"},"region":{"startLine":138}}}],"partialFingerprints":{"codehealthFindingId/v1":"f0cb80a244924e9e30cb50ac4289dde4e290770a5a86028997ca89b2afc7ef51"}},{"ruleId":"D2","level":"warning","message":{"text":"AbstractGuiTest.findComponents (cognitive 17): AbstractGuiTest.findComponents has cognitive complexity 17 (threshold 15). Drivers by points: if/else 13, loops 3, boolean chains 1 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Gui/src/main/java/generic/test/AbstractGuiTest.java"},"region":{"startLine":172}}}],"partialFingerprints":{"codehealthFindingId/v1":"9513b571670399421bf5bd480b77ac58e4479d35fbba8d69f50e9a205e659c26"}},{"ruleId":"D2","level":"warning","message":{"text":"VisualEdgeRenderer.drawSimpleEdge (cognitive 17): VisualEdgeRenderer.drawSimpleEdge has cognitive complexity 17 (threshold 15). Drivers by points: if/else 16, boolean chains 1. To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Graph/src/main/java/ghidra/graph/viewer/edge/VisualEdgeRenderer.java"},"region":{"startLine":216}}}],"partialFingerprints":{"codehealthFindingId/v1":"365fa624c44ee0d9af1b8cc512839df6587e670b87e6d044fa6f9f391e825317"}},{"ruleId":"D2","level":"warning","message":{"text":"JSONParser.parseString (cognitive 17): JSONParser.parseString has cognitive complexity 17 (threshold 15). Drivers by points: if/else 9, loops 5, match/switch 3 (nesting depth added 11). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Generic/src/main/java/generic/json/JSONParser.java"},"region":{"startLine":144}}}],"partialFingerprints":{"codehealthFindingId/v1":"bd805bbe61796390e1c574ac703dcd8c6df6a3a70b5c3e6e8230c23894fd4e77"}},{"ruleId":"D2","level":"warning","message":{"text":"Beanify.beanify (cognitive 17): Beanify.beanify has cognitive complexity 17 (threshold 15). Drivers by points: error handling 7, if/else 7, loops 2, boolean chains 1 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Generic/src/main/java/generic/util/Beanify.java"},"region":{"startLine":24}}}],"partialFingerprints":{"codehealthFindingId/v1":"2c675ac3be927a26f5e2da145cd67f461df5194ee2c184e4ea26ea5341e814e4"}},{"ruleId":"D2","level":"warning","message":{"text":"1.getPasswordAuthentication (cognitive 17): 1.getPasswordAuthentication has cognitive complexity 17 (threshold 15). Drivers by points: if/else 16, boolean chains 1 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/FileSystem/src/main/java/ghidra/framework/client/HeadlessClientAuthenticator.java"},"region":{"startLine":54}}}],"partialFingerprints":{"codehealthFindingId/v1":"f72fa8d8ae4ba12effe7d19c04482ff6bb886c386b6daa35b3e9116cc4e9aa98"}},{"ruleId":"D2","level":"warning","message":{"text":"IndexedLocalFileSystem.writeIndex (cognitive 17): IndexedLocalFileSystem.writeIndex has cognitive complexity 17 (threshold 15). Drivers by points: if/else 15, boolean chains 1, error handling 1 (nesting depth added 4). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/FileSystem/src/main/java/ghidra/framework/store/local/IndexedLocalFileSystem.java"},"region":{"startLine":280}}}],"partialFingerprints":{"codehealthFindingId/v1":"727d838aef3fc2f6c017cdb128268d8caa4c8544ab388fe1b879c726373880c7"}},{"ruleId":"D2","level":"warning","message":{"text":"IndexJournal.replayJournal (cognitive 17): IndexJournal.replayJournal has cognitive complexity 17 (threshold 15). Drivers by points: if/else 13, error handling 3, loops 1 (nesting depth added 3). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition, and where an else follows a branch that already returns, drop the trailing else and let the rest of the body continue at one level."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/FileSystem/src/main/java/ghidra/framework/store/local/IndexedLocalFileSystem.java"},"region":{"startLine":1479}}}],"partialFingerprints":{"codehealthFindingId/v1":"21fa0db3e289175fd1bf7415ca1c99ee07c9c65e1bc6cbbc018300ebf22f41a2"}},{"ruleId":"D2","level":"warning","message":{"text":"DockingWindowManager.toFront (cognitive 17): DockingWindowManager.toFront has cognitive complexity 17 (threshold 15). Drivers by points: if/else 17 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Docking/src/main/java/docking/DockingWindowManager.java"},"region":{"startLine":854}}}],"partialFingerprints":{"codehealthFindingId/v1":"23ed0862e5f4af90800d6347a7e6697f333a3bb210fbb26db8340f59bd3fe3f9"}},{"ruleId":"D2","level":"warning","message":{"text":"BufferMgr.dispose (cognitive 17): BufferMgr.dispose has cognitive complexity 17 (threshold 15). Drivers by points: loops 10, if/else 7 (nesting depth added 7). To reduce it, break up the iteration: give each loop body a named function, and split a multi-phase loop into one function per phase so no single body carries the whole pipeline."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/DB/src/main/java/db/buffers/BufferMgr.java"},"region":{"startLine":414}}}],"partialFingerprints":{"codehealthFindingId/v1":"36753adfd37ef873ef81265a0e3345d343a037e3bfaf538ced834b9599b01c3e"}},{"ruleId":"D2","level":"warning","message":{"text":"FixedKeyRecordNode.isConsistent (cognitive 17): FixedKeyRecordNode.isConsistent has cognitive complexity 17 (threshold 15). Drivers by points: if/else 11, boolean chains 5, loops 1 (nesting depth added 4). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/DB/src/main/java/db/FixedKeyRecordNode.java"},"region":{"startLine":81}}}],"partialFingerprints":{"codehealthFindingId/v1":"940fa7a699d1ba3428e75baa592cba136d7258ec232d5bae26abe4a57ad5bfb5"}},{"ruleId":"D2","level":"warning","message":{"text":"LongKeyInteriorNode.isConsistent (cognitive 17): LongKeyInteriorNode.isConsistent has cognitive complexity 17 (threshold 15). Drivers by points: if/else 12, error handling 4, loops 1 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/DB/src/main/java/db/LongKeyInteriorNode.java"},"region":{"startLine":101}}}],"partialFingerprints":{"codehealthFindingId/v1":"f9b34a0da9cdc9db7acdb22b24608776ecd2289a451653d13c9d27c28496b400"}},{"ruleId":"D2","level":"warning","message":{"text":"ShortDurationLongKeyIterator.hasNext (cognitive 17): ShortDurationLongKeyIterator.hasNext has cognitive complexity 17 (threshold 15). Drivers by points: if/else 16, boolean chains 1 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/DB/src/main/java/db/Table.java"},"region":{"startLine":3204}}}],"partialFingerprints":{"codehealthFindingId/v1":"4f0b3287785228763eeff12780c4c0e299c746cf37369ed0e502fd35d56bb842"}},{"ruleId":"D2","level":"warning","message":{"text":"ShortDurationLongKeyIterator.hasPrevious (cognitive 17): ShortDurationLongKeyIterator.hasPrevious has cognitive complexity 17 (threshold 15). Drivers by points: if/else 16, boolean chains 1 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/DB/src/main/java/db/Table.java"},"region":{"startLine":3259}}}],"partialFingerprints":{"codehealthFindingId/v1":"1ff2ed85a8a738a9b19dd23e00522491825a424c46958002dd88e4ca6de6f35a"}},{"ruleId":"D2","level":"warning","message":{"text":"FunctionSignatureStringable.replaceParameterComments (cognitive 17): FunctionSignatureStringable.replaceParameterComments has cognitive complexity 17 (threshold 15). Drivers by points: if/else 16, loops 1 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/VersionTracking/src/main/java/ghidra/feature/vt/api/stringable/FunctionSignatureStringable.java"},"region":{"startLine":1262}}}],"partialFingerprints":{"codehealthFindingId/v1":"a22501e44bb9cd943a2b23d1b53f7803556914b345a1e0dacc319f590765d18d"}},{"ruleId":"D2","level":"warning","message":{"text":"AutoVersionTrackingTask.doRun (cognitive 17): AutoVersionTrackingTask.doRun has cognitive complexity 17 (threshold 15). Drivers by points: if/else 14, boolean chains 3 (nesting depth added 3). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/VersionTracking/src/main/java/ghidra/feature/vt/gui/actions/AutoVersionTrackingTask.java"},"region":{"startLine":130}}}],"partialFingerprints":{"codehealthFindingId/v1":"3944425c56d8b0aabc5e0dcae208a4c076f422384ca6f40b1b6a264408ad6142"}},{"ruleId":"D2","level":"warning","message":{"text":"AutoVersionTrackingTask.isSameOperandType (cognitive 17): AutoVersionTrackingTask.isSameOperandType has cognitive complexity 17 (threshold 15). Drivers by points: if/else 16, boolean chains 1 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/VersionTracking/src/main/java/ghidra/feature/vt/gui/actions/AutoVersionTrackingTask.java"},"region":{"startLine":1164}}}],"partialFingerprints":{"codehealthFindingId/v1":"9063a11c24b27879fa8be282693ef2741db0fb10ee21ae8aeceff7867c8e5151"}},{"ruleId":"D2","level":"warning","message":{"text":"VTDualListingHighlightProvider.addFunctionSignatureHighlight (cognitive 17): VTDualListingHighlightProvider.addFunctionSignatureHighlight has cognitive complexity 17 (threshold 15). Drivers by points: if/else 16, boolean chains 1 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/VersionTracking/src/main/java/ghidra/feature/vt/gui/duallisting/VTDualListingHighlightProvider.java"},"region":{"startLine":620}}}],"partialFingerprints":{"codehealthFindingId/v1":"b154a3cbc3aa373ce4d592d2f1838154501624fd7e9af35e1c3e3edce81907e4"}},{"ruleId":"D2","level":"warning","message":{"text":"VTPlugin.acceptData (cognitive 17): VTPlugin.acceptData has cognitive complexity 17 (threshold 15). Drivers by points: if/else 12, boolean chains 3, loops 2 (nesting depth added 5). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/VersionTracking/src/main/java/ghidra/feature/vt/gui/plugin/VTPlugin.java"},"region":{"startLine":255}}}],"partialFingerprints":{"codehealthFindingId/v1":"cad883f1964be1fa5673fdac98d899e842da7f4dbe4804ba5d73f7022ac22172"}},{"ruleId":"D2","level":"warning","message":{"text":"VTMarkupItemsTableProvider.loadComparisonPanel (cognitive 17): VTMarkupItemsTableProvider.loadComparisonPanel has cognitive complexity 17 (threshold 15). Drivers by points: if/else 15, boolean chains 2 (nesting depth added 5). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/VersionTracking/src/main/java/ghidra/feature/vt/gui/provider/markuptable/VTMarkupItemsTableProvider.java"},"region":{"startLine":619}}}],"partialFingerprints":{"codehealthFindingId/v1":"b80ed73861ef19524593dd05cf409cbffefaf6b5753a6ceeb49486c91fdf740f"}},{"ruleId":"D2","level":"warning","message":{"text":"ImpliedMatchUtils.findImpliedMatch (cognitive 17): ImpliedMatchUtils.findImpliedMatch has cognitive complexity 17 (threshold 15). Drivers by points: if/else 16, boolean chains 1 (nesting depth added 5). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/VersionTracking/src/main/java/ghidra/feature/vt/gui/util/ImpliedMatchUtils.java"},"region":{"startLine":169}}}],"partialFingerprints":{"codehealthFindingId/v1":"32cbed361b280cab2935c7638b4c977f9bf1861bf744394bf799b656f9967d7a"}},{"ruleId":"D2","level":"warning","message":{"text":"TargetClassDescriptor.\u003Cinit\u003E (cognitive 17): TargetClassDescriptor.\u003Cinit\u003E has cognitive complexity 17 (threshold 15). Drivers by points: if/else 9, loops 4, boolean chains 3, match/switch 1 (nesting depth added 2). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/Swift/src/main/java/ghidra/app/util/bin/format/swift/types/TargetClassDescriptor.java"},"region":{"startLine":62}}}],"partialFingerprints":{"codehealthFindingId/v1":"8622168b17193fb2b71114507aa10f1095fd8f1efb780fa3857527443647b7df"}},{"ruleId":"D2","level":"warning","message":{"text":"CondensedString.convertGenericSpace (cognitive 17): CondensedString.convertGenericSpace has cognitive complexity 17 (threshold 15). Drivers by points: if/else 9, boolean chains 4, ternaries 3, loops 1 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/Rust/src/main/java/ghidra/app/plugin/core/analysis/rust/demangler/RustDemanglerParser.java"},"region":{"startLine":132}}}],"partialFingerprints":{"codehealthFindingId/v1":"087e0ae418d2934f06ce1020c3090c6ff043709f60d24868bdd070c4622e3fee"}},{"ruleId":"D2","level":"warning","message":{"text":"ProgramDiffPlugin.optionsChanged (cognitive 17): ProgramDiffPlugin.optionsChanged has cognitive complexity 17 (threshold 15). Drivers by points: if/else 17 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/ProgramDiff/src/main/java/ghidra/app/plugin/core/diff/ProgramDiffPlugin.java"},"region":{"startLine":392}}}],"partialFingerprints":{"codehealthFindingId/v1":"96a5b7c758cdef38fabc116a746d2a806c9414c24a8f1de66a278af1ffd5afed"}},{"ruleId":"D2","level":"warning","message":{"text":"ProgramDiffPlugin.processEvent (cognitive 17): ProgramDiffPlugin.processEvent has cognitive complexity 17 (threshold 15). Drivers by points: if/else 11, error handling 5, boolean chains 1 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/ProgramDiff/src/main/java/ghidra/app/plugin/core/diff/ProgramDiffPlugin.java"},"region":{"startLine":239}}}],"partialFingerprints":{"codehealthFindingId/v1":"721c77ca89f2be24717c4bbfbe6d1d0cd3a68f7d6a1884f8cfcfbd7d863b4252"}},{"ruleId":"D2","level":"warning","message":{"text":"MyFieldMouseListener.buttonPressed (cognitive 17): MyFieldMouseListener.buttonPressed has cognitive complexity 17 (threshold 15). Drivers by points: if/else 15, boolean chains 2 (nesting depth added 5). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/ProgramDiff/src/main/java/ghidra/app/plugin/core/diff/ProgramDiffPlugin.java"},"region":{"startLine":1842}}}],"partialFingerprints":{"codehealthFindingId/v1":"c4d69f85d6b6a32ce861e114b1d3f6b42bc65aed56b65119a7412854c53ae77f"}},{"ruleId":"D2","level":"warning","message":{"text":"ApplyLineNumbers.applyTo (cognitive 17): ApplyLineNumbers.applyTo has cognitive complexity 17 (threshold 15). Drivers by points: if/else 9, error handling 6, boolean chains 1, loops 1 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/PDB/src/main/java/ghidra/app/util/bin/format/pdb/ApplyLineNumbers.java"},"region":{"startLine":44}}}],"partialFingerprints":{"codehealthFindingId/v1":"302be38bd99e676cd522c08642c7b743a0ab8cb7107da297fdb059888911ba68"}},{"ruleId":"D2","level":"warning","message":{"text":"PdbParser.parse (cognitive 17): PdbParser.parse has cognitive complexity 17 (threshold 15). Drivers by points: if/else 14, error handling 2, boolean chains 1 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/PDB/src/main/java/ghidra/app/util/bin/format/pdb/PdbParser.java"},"region":{"startLine":165}}}],"partialFingerprints":{"codehealthFindingId/v1":"220bc6585addb9f9227e7735c17c074061a8a49d24b8bd0193ba30c34038a7b0"}},{"ruleId":"D2","level":"warning","message":{"text":"NameTable.deserializeNameTableStreams (cognitive 17): NameTable.deserializeNameTableStreams has cognitive complexity 17 (threshold 15). Drivers by points: if/else 6, loops 6, match/switch 4, boolean chains 1 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/PDB/src/main/java/ghidra/app/util/bin/format/pdb2/pdbreader/NameTable.java"},"region":{"startLine":191}}}],"partialFingerprints":{"codehealthFindingId/v1":"0250706eddb37f6545358946c5aa995e5c8f4aa0c85c46689af6e68ee5e23b02"}},{"ruleId":"D2","level":"warning","message":{"text":"RegisterName.getRegisterName (cognitive 17): RegisterName.getRegisterName has cognitive complexity 17 (threshold 15). Drivers by points: if/else 16, match/switch 1 (nesting depth added 8). The drivers above price the dispatch low by construction \u2014 a dispatch is charged once however many cases it lists, while each branch inside an arm is charged in full \u2014 so most of this count is what the case bodies hold, and the arms are where it can be reduced. To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/PDB/src/main/java/ghidra/app/util/bin/format/pdb2/pdbreader/RegisterName.java"},"region":{"startLine":877}}}],"partialFingerprints":{"codehealthFindingId/v1":"52ae7e27b7c331c6e9e893dd88ab22893d349bfb5d8739fe59bbd75ae19901a4"}},{"ruleId":"D2","level":"warning","message":{"text":"TypeProgramInterfaceHash.deserializeHashVals (cognitive 17): TypeProgramInterfaceHash.deserializeHashVals has cognitive complexity 17 (threshold 15). Drivers by points: if/else 10, loops 5, boolean chains 2 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/PDB/src/main/java/ghidra/app/util/bin/format/pdb2/pdbreader/TypeProgramInterface.java"},"region":{"startLine":408}}}],"partialFingerprints":{"codehealthFindingId/v1":"808162579e2880a94f1a9a845d49e86b5a7663d5f18a4b6c823b1bc245b2945f"}},{"ruleId":"D2","level":"warning","message":{"text":"ComplexTypeMapper.mapComplexTypesByPath (cognitive 17): ComplexTypeMapper.mapComplexTypesByPath has cognitive complexity 17 (threshold 15). Drivers by points: if/else 17 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/PDB/src/main/java/ghidra/app/util/pdb/pdbapplicator/ComplexTypeMapper.java"},"region":{"startLine":122}}}],"partialFingerprints":{"codehealthFindingId/v1":"f001edc777db459662e315b0f1381585f31b2dd8199100b2ecb53db3792720c8"}},{"ruleId":"D2","level":"warning","message":{"text":"Objc1TypeEncodings.createProperDataType (cognitive 17): Objc1TypeEncodings.createProperDataType has cognitive complexity 17 (threshold 15). Drivers by points: if/else 12, loops 4, match/switch 1 (nesting depth added 8). The drivers above price the dispatch low by construction \u2014 a dispatch is charged once however many cases it lists, while each branch inside an arm is charged in full \u2014 so most of this count is what the case bodies hold, and the arms are where it can be reduced. To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/Objective-C/src/main/java/ghidra/app/util/bin/format/objc/objc1/Objc1TypeEncodings.java"},"region":{"startLine":234}}}],"partialFingerprints":{"codehealthFindingId/v1":"dae09cf7832ac279400ffa4a7291ab57b54e3d223f98bda2e63642755966488d"}},{"ruleId":"D2","level":"warning","message":{"text":"MDManagedProperties.parseInternal (cognitive 17): MDManagedProperties.parseInternal has cognitive complexity 17 (threshold 15). Drivers by points: if/else 11, boolean chains 4, match/switch 2 (nesting depth added 5). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/MicrosoftDmang/src/main/java/mdemangler/datatype/modifier/MDManagedProperties.java"},"region":{"startLine":89}}}],"partialFingerprints":{"codehealthFindingId/v1":"eaab28d0a642d567366e30b9e9ffdf515d26b365ad47fca046f785a940bc3bc8"}},{"ruleId":"D2","level":"warning","message":{"text":"MDMangObjectParser.parse (cognitive 17): MDMangObjectParser.parse has cognitive complexity 17 (threshold 15). Drivers by points: if/else 10, boolean chains 4, error handling 3 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/MicrosoftDmang/src/main/java/mdemangler/object/MDMangObjectParser.java"},"region":{"startLine":53}}}],"partialFingerprints":{"codehealthFindingId/v1":"2721b2e4f14ffa2da0c1d4e4dfacd13fdd0cf393c790d05dd6e7cced5bb896c7"}},{"ruleId":"D2","level":"warning","message":{"text":"MDMangObjectParser.parseObjectReserved (cognitive 17): MDMangObjectParser.parseObjectReserved has cognitive complexity 17 (threshold 15). Drivers by points: if/else 17. To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/MicrosoftDmang/src/main/java/mdemangler/object/MDMangObjectParser.java"},"region":{"startLine":183}}}],"partialFingerprints":{"codehealthFindingId/v1":"83681e11ad32dc966a8b64bdd3da07585331b3061dac1e92e7be976a327a314b"}},{"ruleId":"D2","level":"warning","message":{"text":"MicrosoftDemanglerUtil.processDemangledFunctionPointer (cognitive 17): MicrosoftDemanglerUtil.processDemangledFunctionPointer has cognitive complexity 17 (threshold 15). Drivers by points: if/else 13, boolean chains 2, loops 2 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/MicrosoftDemangler/src/main/java/ghidra/app/util/demangler/microsoft/MicrosoftDemanglerUtil.java"},"region":{"startLine":507}}}],"partialFingerprints":{"codehealthFindingId/v1":"14108ea98a26cd030bc94124e6902e64e7d68d3b421b09c18ee02e1f32756ed3"}},{"ruleId":"D2","level":"warning","message":{"text":"CondensedString.convertTemplateAndParameterSpaces (cognitive 17): CondensedString.convertTemplateAndParameterSpaces has cognitive complexity 17 (threshold 15). Drivers by points: if/else 9, boolean chains 4, ternaries 3, loops 1 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/GnuDemangler/src/main/java/ghidra/app/util/demangler/gnu/GnuDemanglerParser.java"},"region":{"startLine":2347}}}],"partialFingerprints":{"codehealthFindingId/v1":"079b687c07461ab03e3137fbcf92c14f921b6a5b9aed612f1ff434456a790974"}},{"ruleId":"D2","level":"warning","message":{"text":"InetNameLookup.getCanonicalHostName (cognitive 17): InetNameLookup.getCanonicalHostName has cognitive complexity 17 (threshold 15). Drivers by points: if/else 14, loops 2, boolean chains 1 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/GhidraServer/src/main/java/ghidra/server/remote/InetNameLookup.java"},"region":{"startLine":60}}}],"partialFingerprints":{"codehealthFindingId/v1":"24c4d334a17a9eb7272c99e9833b363ce2ab57850009c002f3b77e8871af2a3a"}},{"ruleId":"D2","level":"warning","message":{"text":"BlockStreamServer.run (cognitive 17): BlockStreamServer.run has cognitive complexity 17 (threshold 15). Drivers by points: error handling 10, if/else 6, loops 1 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/GhidraServer/src/main/java/ghidra/server/stream/BlockStreamServer.java"},"region":{"startLine":236}}}],"partialFingerprints":{"codehealthFindingId/v1":"fd786dfd670d1a22bb10917f249655b596dded1c9d9f978cb4d6f7c68f2fab5b"}},{"ruleId":"D2","level":"warning","message":{"text":"RepositoryManager.listRepositories (cognitive 17): RepositoryManager.listRepositories has cognitive complexity 17 (threshold 15). Drivers by points: if/else 10, error handling 3, ternaries 2, boolean chains 1, loops 1 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/GhidraServer/src/main/java/ghidra/server/RepositoryManager.java"},"region":{"startLine":464}}}],"partialFingerprints":{"codehealthFindingId/v1":"480aa91151e3fe291e4c32918ce964b35b017c41b9d2b044ad57af146ddb5946"}},{"ruleId":"D2","level":"warning","message":{"text":"ApplyFidEntriesCommand.applyConflictLabels (cognitive 17): ApplyFidEntriesCommand.applyConflictLabels has cognitive complexity 17 (threshold 15). Drivers by points: if/else 11, loops 3, error handling 2, boolean chains 1 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/FunctionID/src/main/java/ghidra/feature/fid/cmd/ApplyFidEntriesCommand.java"},"region":{"startLine":385}}}],"partialFingerprints":{"codehealthFindingId/v1":"553d513c1553147334da5e56b50729526cefb7990e492e5fe09d269ef4ed291c"}},{"ruleId":"D2","level":"warning","message":{"text":"FidProgramSeeker.getChildren (cognitive 17): FidProgramSeeker.getChildren has cognitive complexity 17 (threshold 15). Drivers by points: if/else 12, loops 3, boolean chains 2 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/FunctionID/src/main/java/ghidra/feature/fid/service/FidProgramSeeker.java"},"region":{"startLine":81}}}],"partialFingerprints":{"codehealthFindingId/v1":"2e15281fe1bef4617f8d5dbf24b2694a98087bfcd532d1ae80de1b8b195d6ece"}},{"ruleId":"D2","level":"warning","message":{"text":"MachoExtractProgramBuilder.processNewExport (cognitive 17): MachoExtractProgramBuilder.processNewExport has cognitive complexity 17 (threshold 15). Drivers by points: if/else 15, boolean chains 1, loops 1 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/FileFormats/src/main/java/ghidra/app/util/opinion/MachoExtractProgramBuilder.java"},"region":{"startLine":96}}}],"partialFingerprints":{"codehealthFindingId/v1":"4a51a1e67461660560d35482a89c1aab6cb5d4b4511f14953d98aff92be0a93e"}},{"ruleId":"D2","level":"warning","message":{"text":"MachoPrelinkFileSystem.findNameOfKext (cognitive 17): MachoPrelinkFileSystem.findNameOfKext has cognitive complexity 17 (threshold 15). Drivers by points: if/else 12, loops 4, error handling 1 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/ios/prelink/MachoPrelinkFileSystem.java"},"region":{"startLine":433}}}],"partialFingerprints":{"codehealthFindingId/v1":"4ee852d433efa47054386c27b797bcdd6b353c91a770f3c5acf4fc801f83bb06"}},{"ruleId":"D2","level":"warning","message":{"text":"SevenZipFileSystem.getPasswordForFile (cognitive 17): SevenZipFileSystem.getPasswordForFile has cognitive complexity 17 (threshold 15). Drivers by points: if/else 7, loops 5, error handling 3, ternaries 2 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/sevenzip/SevenZipFileSystem.java"},"region":{"startLine":132}}}],"partialFingerprints":{"codehealthFindingId/v1":"91324a4526bf5f5753b6c2beb950c9751dc22264b3aaa0051b59677248cc00b3"}},{"ruleId":"D2","level":"warning","message":{"text":"OldJad.decompile (cognitive 17): OldJad.decompile has cognitive complexity 17 (threshold 15). Drivers by points: if/else 15, boolean chains 2 (nesting depth added 2). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/FileFormats/src/main/java/ghidra/file/jad/OldJad.java"},"region":{"startLine":49}}}],"partialFingerprints":{"codehealthFindingId/v1":"8bf95ce3d4aec044763be2f333609e9792e417e536612a3615224391168ca815"}},{"ruleId":"D2","level":"warning","message":{"text":"DecompilerSwitchAnalysisCmd.labelSwitch (cognitive 17): DecompilerSwitchAnalysisCmd.labelSwitch has cognitive complexity 17 (threshold 15). Drivers by points: if/else 8, loops 3, boolean chains 2, error handling 2, ternaries 2 (nesting depth added 5). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/Decompiler/src/main/java/ghidra/app/cmd/function/DecompilerSwitchAnalysisCmd.java"},"region":{"startLine":308}}}],"partialFingerprints":{"codehealthFindingId/v1":"4f15a0ecb613d64c2812597febaa6ca780e94e0d5aebba75e05f9d3c304424e0"}},{"ruleId":"D2","level":"warning","message":{"text":"DecompilerPanel.tryGoToVarnode (cognitive 17): DecompilerPanel.tryGoToVarnode has cognitive complexity 17 (threshold 15). Drivers by points: if/else 16, boolean chains 1 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/Decompiler/src/main/java/ghidra/app/decompiler/component/DecompilerPanel.java"},"region":{"startLine":879}}}],"partialFingerprints":{"codehealthFindingId/v1":"05a84695d0f4083ddffadc6e50165bbd0e0c37acd6d43c39d26ac01cbb92d4c8"}},{"ruleId":"D2","level":"warning","message":{"text":"DecompilerUtils.getForwardSlice (cognitive 17): DecompilerUtils.getForwardSlice has cognitive complexity 17 (threshold 15). Drivers by points: if/else 14, loops 3 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/Decompiler/src/main/java/ghidra/app/decompiler/component/DecompilerUtils.java"},"region":{"startLine":134}}}],"partialFingerprints":{"codehealthFindingId/v1":"12454b927a84c1842af92ae4b100e8f6cab75e777c7870d70fd8dc55d212a3cf"}},{"ruleId":"D2","level":"warning","message":{"text":"DecompilerUtils.getForwardSliceToPCodeOps (cognitive 17): DecompilerUtils.getForwardSliceToPCodeOps has cognitive complexity 17 (threshold 15). Drivers by points: if/else 14, loops 3 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/Decompiler/src/main/java/ghidra/app/decompiler/component/DecompilerUtils.java"},"region":{"startLine":202}}}],"partialFingerprints":{"codehealthFindingId/v1":"81630e05e6fe9ad26bcc12a81a00a5d8d946d542c754e8374f8a3089eb4eea72"}},{"ruleId":"D2","level":"warning","message":{"text":"DecompilerUtils.getNextBrace (cognitive 17): DecompilerUtils.getNextBrace has cognitive complexity 17 (threshold 15). Drivers by points: if/else 15, loops 1, ternaries 1 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/Decompiler/src/main/java/ghidra/app/decompiler/component/DecompilerUtils.java"},"region":{"startLine":662}}}],"partialFingerprints":{"codehealthFindingId/v1":"51d3a83eb6caa4a9f3fc18f12dc0265c6adce0962dfd26a9d43ebf882c20a402"}},{"ruleId":"D2","level":"warning","message":{"text":"SignatureResult.decode (cognitive 17): SignatureResult.decode has cognitive complexity 17 (threshold 15). Drivers by points: if/else 14, loops 3 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/Decompiler/src/main/java/ghidra/app/decompiler/signature/SignatureResult.java"},"region":{"startLine":51}}}],"partialFingerprints":{"codehealthFindingId/v1":"caa7f54979660a185ead39f05bdbb558e49b5ada27d3f398a4fc3bcc0094b7c6"}},{"ruleId":"D2","level":"warning","message":{"text":"DecompilePlugin.processEvent (cognitive 17): DecompilePlugin.processEvent has cognitive complexity 17 (threshold 15). Drivers by points: if/else 17 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/Decompiler/src/main/java/ghidra/app/plugin/core/decompile/DecompilePlugin.java"},"region":{"startLine":234}}}],"partialFingerprints":{"codehealthFindingId/v1":"9b29a7de6543e44e76a96940afd9e04d238ea8ec4b5d5b44f7282c7addf6d5dd"}},{"ruleId":"D2","level":"warning","message":{"text":"DataVertex.depthZeroHash (cognitive 17): DataVertex.depthZeroHash has cognitive complexity 17 (threshold 15). Drivers by points: if/else 9, ternaries 6, boolean chains 2 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/CodeCompare/src/main/java/ghidra/features/codecompare/graphanalysis/DataVertex.java"},"region":{"startLine":123}}}],"partialFingerprints":{"codehealthFindingId/v1":"6f65da01f93c3cadc523d0f798589dd17a223bd7a3b9ee7beefb95c28b6f5d8c"}},{"ruleId":"D2","level":"warning","message":{"text":"ByteViewerComponent.keyPressed (cognitive 17): ByteViewerComponent.keyPressed has cognitive complexity 17 (threshold 15). Drivers by points: if/else 12, error handling 3, boolean chains 2. To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/ByteViewer/src/main/java/ghidra/app/plugin/core/byteviewer/ByteViewerComponent.java"},"region":{"startLine":254}}}],"partialFingerprints":{"codehealthFindingId/v1":"5ef938ecac536acf7a606b87afca9feaf42913099c748b4918867ee751804581"}},{"ruleId":"D2","level":"warning","message":{"text":"ByteSequenceRowObject.getFilteredRowObjects (cognitive 17): ByteSequenceRowObject.getFilteredRowObjects has cognitive complexity 17 (threshold 15). Drivers by points: if/else 13, loops 3, boolean chains 1 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/BytePatterns/src/main/java/ghidra/bitpatterns/info/ByteSequenceRowObject.java"},"region":{"startLine":62}}}],"partialFingerprints":{"codehealthFindingId/v1":"34de2f11eaa9df925def90dc4cc8d0a7906b32643f7f230a8dfd527c48db3b5c"}},{"ruleId":"D2","level":"warning","message":{"text":"BsfvTableModel.decompile (cognitive 17): BsfvTableModel.decompile has cognitive complexity 17 (threshold 15). Drivers by points: if/else 13, loops 3, boolean chains 1 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/BSimFeatureVisualizer/src/main/java/ghidra/bsfv/BsfvTableModel.java"},"region":{"startLine":253}}}],"partialFingerprints":{"codehealthFindingId/v1":"bd474f5550c988125cf44ab82cd642bff229d29bffa8806b9ebce066ee1786a3"}},{"ruleId":"D2","level":"warning","message":{"text":"BSimServerInfo.\u003Cinit\u003E (cognitive 17): BSimServerInfo.\u003Cinit\u003E has cognitive complexity 17 (threshold 15). Drivers by points: if/else 12, boolean chains 5 (nesting depth added 4). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/BSim/src/main/java/ghidra/features/bsim/query/BSimServerInfo.java"},"region":{"startLine":79}}}],"partialFingerprints":{"codehealthFindingId/v1":"1ea153d8b8ea7ed6b527c352c1f4055ccb9d2e823ae8e6fe3d0afd43d69a0062"}},{"ruleId":"D2","level":"warning","message":{"text":"SignatureTask.decompile (cognitive 17): SignatureTask.decompile has cognitive complexity 17 (threshold 15). Drivers by points: if/else 13, boolean chains 4 (nesting depth added 1). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/BSim/src/main/java/ghidra/features/bsim/query/GenSignatures.java"},"region":{"startLine":676}}}],"partialFingerprints":{"codehealthFindingId/v1":"952bd9a4436ddbd806d0b3a77097c1441bc0774f631e87b2fae964f2d21bf78d"}},{"ruleId":"D2","level":"warning","message":{"text":"GNUExternalDisassembler.checkLanguage (cognitive 17): GNUExternalDisassembler.checkLanguage has cognitive complexity 17 (threshold 15). Drivers by points: if/else 17 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Extensions/SleighDevTools/src/main/java/ghidra/app/util/disassemble/GNUExternalDisassembler.java"},"region":{"startLine":308}}}],"partialFingerprints":{"codehealthFindingId/v1":"2fac737e0ccff4abae93381d216660e5251511153ea8c271d8ca5bc134ba9d04"}},{"ruleId":"D2","level":"warning","message":{"text":"ModelTrainingUtils.getFeatureVector (cognitive 17): ModelTrainingUtils.getFeatureVector has cognitive complexity 17 (threshold 15). Drivers by points: loops 6, ternaries 6, if/else 4, error handling 1 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Extensions/MachineLearning/src/main/java/ghidra/machinelearning/functionfinding/ModelTrainingUtils.java"},"region":{"startLine":57}}}],"partialFingerprints":{"codehealthFindingId/v1":"13d7204fcc27bd4fbd4dfe0dce87f90fe3c7ea4dafc88fe7733b7053909ef6d6"}},{"ruleId":"D2","level":"warning","message":{"text":"PcodeInterval.evalBooleanBinaryExpression (cognitive 17): PcodeInterval.evalBooleanBinaryExpression has cognitive complexity 17 (threshold 15). Drivers by points: ternaries 11, if/else 5, boolean chains 1 (nesting depth added 3). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Extensions/Lisa/src/main/java/ghidra/lisa/pcode/analyses/PcodeInterval.java"},"region":{"startLine":368}}}],"partialFingerprints":{"codehealthFindingId/v1":"4400c02f1ddafc4af34db85d13266ce04b795ea96c526855b836736f9ec82073"}},{"ruleId":"D2","level":"warning","message":{"text":"PairingIteratorMerger.findNext (cognitive 17): PairingIteratorMerger.findNext has cognitive complexity 17 (threshold 15). Drivers by points: if/else 16, loops 1 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/ProposedUtils/src/main/java/ghidra/util/PairingIteratorMerger.java"},"region":{"startLine":39}}}],"partialFingerprints":{"codehealthFindingId/v1":"b9a4a7ee50b81c33c41a594910d729bc3f943417c329db020849439a336baa5c"}},{"ruleId":"D2","level":"warning","message":{"text":"AbstractBaseDBTraceDefinedUnitsView.clear (cognitive 17): AbstractBaseDBTraceDefinedUnitsView.clear has cognitive complexity 17 (threshold 15). Drivers by points: if/else 14, loops 3 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/listing/AbstractBaseDBTraceDefinedUnitsView.java"},"region":{"startLine":309}}}],"partialFingerprints":{"codehealthFindingId/v1":"df590b3282fc6ec6e67504e76b025527e174022c7f44aaf9d4bffa8db9c07e73"}},{"ruleId":"D2","level":"warning","message":{"text":"VarAdder.addPointerVars (cognitive 17): VarAdder.addPointerVars has cognitive complexity 17 (threshold 15). Drivers by points: if/else 6, ternaries 6, loops 5 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/gui/emulation/DebuggerEmulateFunctionDialog.java"},"region":{"startLine":626}}}],"partialFingerprints":{"codehealthFindingId/v1":"9b790b353f087ce4daf5ef9abbac4cec8e00381bf8d591a9e13895ca7cbc91a4"}},{"ruleId":"D2","level":"warning","message":{"text":"DebuggerStaticMappingServicePlugin.checkAllTraceMappingsForProgram (cognitive 17): DebuggerStaticMappingServicePlugin.checkAllTraceMappingsForProgram has cognitive complexity 17 (threshold 15). Drivers by points: if/else 9, loops 6, boolean chains 2 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/service/modules/DebuggerStaticMappingServicePlugin.java"},"region":{"startLine":192}}}],"partialFingerprints":{"codehealthFindingId/v1":"9a8cb4bae370ff236800e4f43c7a5e65db59ab3d5141d0a45e7c5377cd79febb"}},{"ruleId":"D2","level":"warning","message":{"text":"DebuggerTraceManagerServicePlugin.activateAndNotify (cognitive 17): DebuggerTraceManagerServicePlugin.activateAndNotify has cognitive complexity 17 (threshold 15). Drivers by points: if/else 10, boolean chains 4, error handling 3 (nesting depth added 5). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/service/tracemgr/DebuggerTraceManagerServicePlugin.java"},"region":{"startLine":1154}}}],"partialFingerprints":{"codehealthFindingId/v1":"e616cec7ca9a93d9fe4c803601d2a2edd8cafcdecf97dc377ca3a3574c7b07fd"}},{"ruleId":"D2","level":"warning","message":{"text":"AngrTaintState.writeRule (cognitive 17): AngrTaintState.writeRule has cognitive complexity 17 (threshold 15). Drivers by points: if/else 17 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/taint/AngrTaintState.java"},"region":{"startLine":88}}}],"partialFingerprints":{"codehealthFindingId/v1":"075ced5f455e7f98c8946edd26c6df966f0d3457310d971b3c6ae783d690813c"}},{"ruleId":"D2","level":"warning","message":{"text":"RmiClient.argToObject (cognitive 17): RmiClient.argToObject has cognitive complexity 17 (threshold 15). Drivers by points: if/else 17. To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/Debugger-rmi-trace/src/main/java/ghidra/app/plugin/core/debug/client/tracermi/RmiClient.java"},"region":{"startLine":674}}}],"partialFingerprints":{"codehealthFindingId/v1":"f9f1f1554a9429c326e206d343faaf121e0659db294a45d74cba0825a7b776fc"}},{"ruleId":"D2","level":"warning","message":{"text":"RmiClient.argToType (cognitive 17): RmiClient.argToType has cognitive complexity 17 (threshold 15). Drivers by points: if/else 17. To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/Debugger-rmi-trace/src/main/java/ghidra/app/plugin/core/debug/client/tracermi/RmiClient.java"},"region":{"startLine":731}}}],"partialFingerprints":{"codehealthFindingId/v1":"06ab78b339347f2de86e28f1ee68077f133ef7629cc4233a8d32c7eab0122685"}},{"ruleId":"D2","level":"warning","message":{"text":"TraceRmiLauncherServicePlugin.tryProgramJvmClass (cognitive 17): TraceRmiLauncherServicePlugin.tryProgramJvmClass has cognitive complexity 17 (threshold 15). Drivers by points: if/else 12, boolean chains 4, error handling 1. To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/Debugger-rmi-trace/src/main/java/ghidra/app/plugin/core/debug/gui/tracermi/launcher/TraceRmiLauncherServicePlugin.java"},"region":{"startLine":158}}}],"partialFingerprints":{"codehealthFindingId/v1":"bdcc66d01a583579bf939023e442678fc5023674af2d0ce0451bc062e51f9b91"}},{"ruleId":"D2","level":"warning","message":{"text":"IsfDataTypeWriter.getIsfObject (cognitive 17): IsfDataTypeWriter.getIsfObject has cognitive complexity 17 (threshold 15). Drivers by points: if/else 14, ternaries 2, boolean chains 1 (nesting depth added 1). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/Debugger-isf/src/main/java/ghidra/program/model/data/ISF/IsfDataTypeWriter.java"},"region":{"startLine":371}}}],"partialFingerprints":{"codehealthFindingId/v1":"1630a2e25c6dc17def36541023ae9fa79d6aa9ea200766c972078d5cf9c49ba5"}},{"ruleId":"D2","level":"warning","message":{"text":"JavaFinder.findSupportedJavaHomeFromCurrentJavaHome (cognitive 16): JavaFinder.findSupportedJavaHomeFromCurrentJavaHome has cognitive complexity 16 (threshold 15). Drivers by points: if/else 8, boolean chains 3, error handling 3, loops 2 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"GhidraBuild/LaunchSupport/src/main/java/ghidra/launch/JavaFinder.java"},"region":{"startLine":143}}}],"partialFingerprints":{"codehealthFindingId/v1":"ea680821acb21e3541790c1749cee2929bf06400d30e8c82085ec72636514813"}},{"ruleId":"D2","level":"warning","message":{"text":"LaunchProperties.parseLaunchProperties (cognitive 16): LaunchProperties.parseLaunchProperties has cognitive complexity 16 (threshold 15). Drivers by points: if/else 13, loops 2, boolean chains 1 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"GhidraBuild/LaunchSupport/src/main/java/ghidra/launch/LaunchProperties.java"},"region":{"startLine":178}}}],"partialFingerprints":{"codehealthFindingId/v1":"e4d7fe3b2d30a38034bde0a46bef46dc00346b6d78b64005c0c142ca39b5bd5c"}},{"ruleId":"D2","level":"warning","message":{"text":"GhidraProjectUtils.getGhidraVm (cognitive 16): GhidraProjectUtils.getGhidraVm has cognitive complexity 16 (threshold 15). Drivers by points: if/else 10, loops 5, boolean chains 1 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"GhidraBuild/EclipsePlugins/GhidraDev/GhidraDevPlugin/src/main/java/ghidradev/ghidraprojectcreator/utils/GhidraProjectUtils.java"},"region":{"startLine":592}}}],"partialFingerprints":{"codehealthFindingId/v1":"919af7acc7922f01d274dcf8359faa8075b6e362ae4c7f00e9d3433e380598bf"}},{"ruleId":"D2","level":"warning","message":{"text":"JavaAnalyzer.setFunctionInfo (cognitive 16): JavaAnalyzer.setFunctionInfo has cognitive complexity 16 (threshold 15). Drivers by points: if/else 9, loops 5, ternaries 2 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Processors/JVM/src/main/java/ghidra/javaclass/analyzers/JavaAnalyzer.java"},"region":{"startLine":678}}}],"partialFingerprints":{"codehealthFindingId/v1":"0a761c79b19ba49adaf986893b39e537d29a0339428530ba244bd04963e8ba90"}},{"ruleId":"D2","level":"warning","message":{"text":"1.evaluateReference (cognitive 16): 1.evaluateReference has cognitive complexity 16 (threshold 15). Drivers by points: if/else 11, boolean chains 5 (nesting depth added 4). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Processors/ARM/src/main/java/ghidra/app/plugin/core/analysis/ArmAnalyzer.java"},"region":{"startLine":180}}}],"partialFingerprints":{"codehealthFindingId/v1":"2de262309cfadb4d89c279baa3624a5b0eae75ac2e48772c9dae8689c5da11f9"}},{"ruleId":"D2","level":"warning","message":{"text":"SIMD_FLOAT2FLOAT.op1e (cognitive 16): SIMD_FLOAT2FLOAT.op1e has cognitive complexity 16 (threshold 15). Drivers by points: if/else 16 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Processors/AARCH64/src/main/java/ghidra/program/emulation/AARCH64EmulateInstructionStateModifier.java"},"region":{"startLine":1438}}}],"partialFingerprints":{"codehealthFindingId/v1":"a3f0f311baa45581eacdc3edeb5b2b019633a6cb71e1d2d9021d3ab06df4ea76"}},{"ruleId":"D2","level":"warning","message":{"text":"SIMD_TRUNC.op1e (cognitive 16): SIMD_TRUNC.op1e has cognitive complexity 16 (threshold 15). Drivers by points: if/else 16 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Processors/AARCH64/src/main/java/ghidra/program/emulation/AARCH64EmulateInstructionStateModifier.java"},"region":{"startLine":1459}}}],"partialFingerprints":{"codehealthFindingId/v1":"8dcb1393280e68f7f0cb39914287c2e3e8791ef0bab18e7a7a419a43272cafea"}},{"ruleId":"D2","level":"warning","message":{"text":"a64_TBL.evaluate (cognitive 16): a64_TBL.evaluate has cognitive complexity 16 (threshold 15). Drivers by points: loops 7, if/else 5, boolean chains 4 (nesting depth added 2). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Processors/AARCH64/src/main/java/ghidra/program/emulation/AARCH64EmulateInstructionStateModifier.java"},"region":{"startLine":1619}}}],"partialFingerprints":{"codehealthFindingId/v1":"ceffbde77258789b73862cb2ba32916e9dad9f30ebd414fd9a4077b7fc5f3bc7"}},{"ruleId":"D2","level":"warning","message":{"text":"AssemblyFirstFollow.computeFirsts (cognitive 16): AssemblyFirstFollow.computeFirsts has cognitive complexity 16 (threshold 15). Drivers by points: if/else 10, loops 6 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/assembler/sleigh/parse/AssemblyFirstFollow.java"},"region":{"startLine":76}}}],"partialFingerprints":{"codehealthFindingId/v1":"667b39f05d09405a66f62e854d5002ea4b444ab39fa49f39b596f447a9d1818f"}},{"ruleId":"D2","level":"warning","message":{"text":"MemoryBlockDefinition.\u003Cinit\u003E (cognitive 16): MemoryBlockDefinition.\u003Cinit\u003E has cognitive complexity 16 (threshold 15). Drivers by points: if/else 13, boolean chains 1, error handling 1, ternaries 1 (nesting depth added 3). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition, and where an else follows a branch that already returns, drop the trailing else and let the rest of the body continue at one level."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/processors/generic/MemoryBlockDefinition.java"},"region":{"startLine":85}}}],"partialFingerprints":{"codehealthFindingId/v1":"3fbd28231f17ebcdab6a130aba7fe335a4d3dd9bf0429fc5c28b63906662b09e"}},{"ruleId":"D2","level":"warning","message":{"text":"DecisionNode.resolve (cognitive 16): DecisionNode.resolve has cognitive complexity 16 (threshold 15). Drivers by points: if/else 14, loops 2 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/processors/sleigh/DecisionNode.java"},"region":{"startLine":65}}}],"partialFingerprints":{"codehealthFindingId/v1":"cb1322ca276938373248c1f944ecdf418b87c00f21ad9d12ae620d3a10985008"}},{"ruleId":"D2","level":"warning","message":{"text":"SleighInstructionPrototype.getOperandRefType (cognitive 16): SleighInstructionPrototype.getOperandRefType has cognitive complexity 16 (threshold 15). Drivers by points: if/else 11, boolean chains 4, error handling 1 (nesting depth added 2). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition, and where an else follows a branch that already returns, drop the trailing else and let the rest of the body continue at one level."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/processors/sleigh/SleighInstructionPrototype.java"},"region":{"startLine":1114}}}],"partialFingerprints":{"codehealthFindingId/v1":"289cf6ceae05a9836b0e9075d9a7a29c73eae9d449e7d4322872005419216fd7"}},{"ruleId":"D2","level":"warning","message":{"text":"PcodeCompile.buildTruncatedVarnode (cognitive 16): PcodeCompile.buildTruncatedVarnode has cognitive complexity 16 (threshold 15). Drivers by points: if/else 15, boolean chains 1 (nesting depth added 4). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slgh_compile/PcodeCompile.java"},"region":{"startLine":454}}}],"partialFingerprints":{"codehealthFindingId/v1":"10c11c7c26a16d08afc0d6b25f61556424bf3e742278e47151e42b70c9efe6f6"}},{"ruleId":"D2","level":"warning","message":{"text":"SleighCompile.checkUniqueAllocation (cognitive 16): SleighCompile.checkUniqueAllocation has cognitive complexity 16 (threshold 15). Drivers by points: if/else 10, loops 6 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slgh_compile/SleighCompile.java"},"region":{"startLine":1669}}}],"partialFingerprints":{"codehealthFindingId/v1":"2023fe36ed403a03c44ef6d9cd398fba6f91d410c51d757c7df6354dbc4ace3d"}},{"ruleId":"D2","level":"warning","message":{"text":"DataTypeArchiveTransformer.validate (cognitive 16): DataTypeArchiveTransformer.validate has cognitive complexity 16 (threshold 15). Drivers by points: if/else 13, boolean chains 3. To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/DataTypeArchiveTransformer.java"},"region":{"startLine":113}}}],"partialFingerprints":{"codehealthFindingId/v1":"c7c53e10fda0531aab1cb3e11d235bb71b20f7949b6a0ee0580466a9beac7f22"}},{"ruleId":"D2","level":"warning","message":{"text":"DataTypeManagerDB.createDataType (cognitive 16): DataTypeManagerDB.createDataType has cognitive complexity 16 (threshold 15). Drivers by points: if/else 12, ternaries 3, error handling 1 (nesting depth added 2). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/DataTypeManagerDB.java"},"region":{"startLine":2886}}}],"partialFingerprints":{"codehealthFindingId/v1":"c8d90650a9669df9e5552414a56bc59ffb6de62320b12e3a2c86c002d07e065f"}},{"ruleId":"D2","level":"warning","message":{"text":"DataTypeManagerDB.dedupeConflicts (cognitive 16): DataTypeManagerDB.dedupeConflicts has cognitive complexity 16 (threshold 15). Drivers by points: if/else 7, error handling 4, loops 3, boolean chains 2 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/DataTypeManagerDB.java"},"region":{"startLine":4250}}}],"partialFingerprints":{"codehealthFindingId/v1":"a640a84ad91a0102d79db360339f45cf190f654bc989652fc863d1831128790b"}},{"ruleId":"D2","level":"warning","message":{"text":"DataTypeManagerDB.getBuiltInDataType (cognitive 16): DataTypeManagerDB.getBuiltInDataType has cognitive complexity 16 (threshold 15). Drivers by points: if/else 10, error handling 5, boolean chains 1 (nesting depth added 4). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/DataTypeManagerDB.java"},"region":{"startLine":2792}}}],"partialFingerprints":{"codehealthFindingId/v1":"fd1ec089a311b1df24923a745862f6d9892b5646942f2057e4c6dd1d6b062cba"}},{"ruleId":"D2","level":"warning","message":{"text":"UnionDB.repack (cognitive 16): UnionDB.repack has cognitive complexity 16 (threshold 15). Drivers by points: if/else 9, boolean chains 4, error handling 2, loops 1 (nesting depth added 3). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition, and where an else follows a branch that already returns, drop the trailing else and let the rest of the body continue at one level."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/UnionDB.java"},"region":{"startLine":612}}}],"partialFingerprints":{"codehealthFindingId/v1":"5fee0ff7b7a810290bc807ce33450c59511d4e3009e550f16a6ba0351b4d3838"}},{"ruleId":"D2","level":"warning","message":{"text":"ExternalManagerDB.upgradeOldExtRefAdapter (cognitive 16): ExternalManagerDB.upgradeOldExtRefAdapter has cognitive complexity 16 (threshold 15). Drivers by points: error handling 6, ternaries 4, if/else 3, loops 2, boolean chains 1 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/external/ExternalManagerDB.java"},"region":{"startLine":110}}}],"partialFingerprints":{"codehealthFindingId/v1":"f1ad1228d5d23ebe650d2e687e3fc9b2c5984e85a7e62f3e0aa466680f25c1cb"}},{"ruleId":"D2","level":"warning","message":{"text":"FunctionVariables.addLocalVariable (cognitive 16): FunctionVariables.addLocalVariable has cognitive complexity 16 (threshold 15). Drivers by points: if/else 10, boolean chains 3, ternaries 2, loops 1 (nesting depth added 3). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/function/FunctionVariables.java"},"region":{"startLine":297}}}],"partialFingerprints":{"codehealthFindingId/v1":"b8a29c375a359777c51af462684547e26f55244ef7fad7335459d176873221eb"}},{"ruleId":"D2","level":"warning","message":{"text":"AddressMapDB.checkAddressSpace (cognitive 16): AddressMapDB.checkAddressSpace has cognitive complexity 16 (threshold 15). Drivers by points: if/else 16 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/map/AddressMapDB.java"},"region":{"startLine":298}}}],"partialFingerprints":{"codehealthFindingId/v1":"57f12b0b595e8b11183ba112270dd81082f4a73b8257838209b2e9cc8d9912dd"}},{"ruleId":"D2","level":"warning","message":{"text":"BigRefListV0.removeRef (cognitive 16): BigRefListV0.removeRef has cognitive complexity 16 (threshold 15). Drivers by points: if/else 15, loops 1 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/references/BigRefListV0.java"},"region":{"startLine":343}}}],"partialFingerprints":{"codehealthFindingId/v1":"30118070ccdc545969bb576606d930b380cfee6e27644054dc2d365eaff68c96"}},{"ruleId":"D2","level":"warning","message":{"text":"DataTypeArchiveContentHandler.getReadOnlyObject (cognitive 16): DataTypeArchiveContentHandler.getReadOnlyObject has cognitive complexity 16 (threshold 15). Drivers by points: if/else 10, error handling 4, boolean chains 1, ternaries 1 (nesting depth added 4). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/DataTypeArchiveContentHandler.java"},"region":{"startLine":120}}}],"partialFingerprints":{"codehealthFindingId/v1":"4f41254d64185678d0fd86097914822cd675caf2365556e1df168baa1e77467f"}},{"ruleId":"D2","level":"warning","message":{"text":"ProgramDB.initializeProgramInfo (cognitive 16): ProgramDB.initializeProgramInfo has cognitive complexity 16 (threshold 15). Drivers by points: if/else 11, boolean chains 2, error handling 2, ternaries 1 (nesting depth added 3). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition, and where an else follows a branch that already returns, drop the trailing else and let the rest of the body continue at one level."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/ProgramDB.java"},"region":{"startLine":1447}}}],"partialFingerprints":{"codehealthFindingId/v1":"a2aeb9681fe4ccb79f34fb28d2714997ac08a69a65a926a26e8d84cb59149acc"}},{"ruleId":"D2","level":"warning","message":{"text":"DisassemblerContextImpl.flowToAddress (cognitive 16): DisassemblerContextImpl.flowToAddress has cognitive complexity 16 (threshold 15). Drivers by points: if/else 12, boolean chains 2, loops 2 (nesting depth added 4). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/disassemble/DisassemblerContextImpl.java"},"region":{"startLine":343}}}],"partialFingerprints":{"codehealthFindingId/v1":"82a7af95e609239eb3d3857ee44b2480d846c39d540e4cdfd9554537a3e5a221"}},{"ruleId":"D2","level":"warning","message":{"text":"AddressObjectMap.addRange (cognitive 16): AddressObjectMap.addRange has cognitive complexity 16 (threshold 15). Drivers by points: if/else 13, boolean chains 1, error handling 1, loops 1 (nesting depth added 4). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/address/AddressObjectMap.java"},"region":{"startLine":169}}}],"partialFingerprints":{"codehealthFindingId/v1":"082df2ca955a167fcce2bb6b405c43361022b17cd83883d94fe42d12adf3abc9"}},{"ruleId":"D2","level":"warning","message":{"text":"DefaultAddressFactory.getAllAddresses (cognitive 16): DefaultAddressFactory.getAllAddresses has cognitive complexity 16 (threshold 15). Drivers by points: if/else 11, error handling 3, boolean chains 1, loops 1 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/address/DefaultAddressFactory.java"},"region":{"startLine":186}}}],"partialFingerprints":{"codehealthFindingId/v1":"b6f2893a3c61f578971121c41642b2e8dc5cde5c91e5502ea1bf5d86ba8d27d0"}},{"ruleId":"D2","level":"warning","message":{"text":"SubroutineSourceReferenceIterator.getSources (cognitive 16): SubroutineSourceReferenceIterator.getSources has cognitive complexity 16 (threshold 15). Drivers by points: if/else 10, boolean chains 3, loops 3 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/block/SubroutineSourceReferenceIterator.java"},"region":{"startLine":91}}}],"partialFingerprints":{"codehealthFindingId/v1":"1ea557bf2fff72ea53e0a2a4865e395fbc89102ebfbc531798455f885e611e3d"}},{"ruleId":"D2","level":"warning","message":{"text":"HashStore.extendMatch (cognitive 16): HashStore.extendMatch has cognitive complexity 16 (threshold 15). Drivers by points: if/else 12, boolean chains 2, loops 2 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/correlate/HashStore.java"},"region":{"startLine":329}}}],"partialFingerprints":{"codehealthFindingId/v1":"30d94cd676a79ec52d7c902b0d5ddd8f13c14afb67eb7600e7b9cdfb7f9ee47f"}},{"ruleId":"D2","level":"warning","message":{"text":"AbstractFloatDataType.getFloatDataTypes (cognitive 16): AbstractFloatDataType.getFloatDataTypes has cognitive complexity 16 (threshold 15). Drivers by points: if/else 13, loops 3 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/AbstractFloatDataType.java"},"region":{"startLine":281}}}],"partialFingerprints":{"codehealthFindingId/v1":"d2565192138ea41cd275077f2ea14b0caead89d48f10c0590f96b1b4f61e0884"}},{"ruleId":"D2","level":"warning","message":{"text":"AbstractIntegerDataType.getCDeclaration (cognitive 16): AbstractIntegerDataType.getCDeclaration has cognitive complexity 16 (threshold 15). Drivers by points: ternaries 10, if/else 6 (nesting depth added 5). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/AbstractIntegerDataType.java"},"region":{"startLine":135}}}],"partialFingerprints":{"codehealthFindingId/v1":"157744702f45a94485a38cc0f77db7ca75f1885e1d6828a8494e9e84a5c13a1a"}},{"ruleId":"D2","level":"warning","message":{"text":"AlignedComponentPacker.packComponent (cognitive 16): AlignedComponentPacker.packComponent has cognitive complexity 16 (threshold 15). Drivers by points: if/else 13, boolean chains 3 (nesting depth added 5). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/AlignedComponentPacker.java"},"region":{"startLine":259}}}],"partialFingerprints":{"codehealthFindingId/v1":"a0d8b2eecbf2096cb1fd36d11c6c15ad549d4fdf429c0a622435ee119d03a6b2"}},{"ruleId":"D2","level":"warning","message":{"text":"DataTypeWriter.writeTypeDef (cognitive 16): DataTypeWriter.writeTypeDef has cognitive complexity 16 (threshold 15). Drivers by points: if/else 12, boolean chains 4 (nesting depth added 5). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/DataTypeWriter.java"},"region":{"startLine":605}}}],"partialFingerprints":{"codehealthFindingId/v1":"34c006f649aafc87f671ba5b154a92803767f4ebd8e22c12911004151a667cd0"}},{"ruleId":"D2","level":"warning","message":{"text":"MetaDataType.getMeta (cognitive 16): MetaDataType.getMeta has cognitive complexity 16 (threshold 15). Drivers by points: if/else 15, boolean chains 1 (nesting depth added 2). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/MetaDataType.java"},"region":{"startLine":31}}}],"partialFingerprints":{"codehealthFindingId/v1":"c9420e59c47998e07f83d1b7bd95d239a308f8b5fa3b5c740d9e6349b1099330"}},{"ruleId":"D2","level":"warning","message":{"text":"MultiSlotAssign.isEquivalent (cognitive 16): MultiSlotAssign.isEquivalent has cognitive complexity 16 (threshold 15). Drivers by points: if/else 12, boolean chains 3, loops 1 (nesting depth added 3). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/lang/protorules/MultiSlotAssign.java"},"region":{"startLine":115}}}],"partialFingerprints":{"codehealthFindingId/v1":"d839801e2a803d0f9f8afcdd1a622fc07c9141383c4b2b35a5e3ff634813a162"}},{"ruleId":"D2","level":"warning","message":{"text":"MultiSlotAssign.restoreXml (cognitive 16): MultiSlotAssign.restoreXml has cognitive complexity 16 (threshold 15). Drivers by points: if/else 14, error handling 1, loops 1 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/lang/protorules/MultiSlotAssign.java"},"region":{"startLine":274}}}],"partialFingerprints":{"codehealthFindingId/v1":"24e06c3dec80dfdd8c05beb54c4585bef22cb7ffc45bc02c2e84644deb357cb1"}},{"ruleId":"D2","level":"warning","message":{"text":"MultiSlotDualAssign.getTileClass (cognitive 16): MultiSlotDualAssign.getTileClass has cognitive complexity 16 (threshold 15). Drivers by points: if/else 15, loops 1 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/lang/protorules/MultiSlotDualAssign.java"},"region":{"startLine":108}}}],"partialFingerprints":{"codehealthFindingId/v1":"3e65ee7faec13acae250670de4a367f89d37337a50db5688cc5028518d22640f"}},{"ruleId":"D2","level":"warning","message":{"text":"BasicCompilerSpec.\u003Cinit\u003E (cognitive 16): BasicCompilerSpec.\u003Cinit\u003E has cognitive complexity 16 (threshold 15). Drivers by points: if/else 13, boolean chains 2, error handling 1 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/lang/BasicCompilerSpec.java"},"region":{"startLine":116}}}],"partialFingerprints":{"codehealthFindingId/v1":"093498d7b1960617f5a83829f88d0160c3249b47df6e508ef8ab1e43eba50bdd"}},{"ruleId":"D2","level":"warning","message":{"text":"InjectPayloadSleigh.restoreXml (cognitive 16): InjectPayloadSleigh.restoreXml has cognitive complexity 16 (threshold 15). Drivers by points: if/else 14, boolean chains 1, loops 1 (nesting depth added 4). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/lang/InjectPayloadSleigh.java"},"region":{"startLine":266}}}],"partialFingerprints":{"codehealthFindingId/v1":"36482ac4ec22cadd60a744f920f044e5ade3eea9b8fefa175f2d6d0c05c2b6c9"}},{"ruleId":"D2","level":"warning","message":{"text":"ParamListStandard.assignAddressFallback (cognitive 16): ParamListStandard.assignAddressFallback has cognitive complexity 16 (threshold 15). Drivers by points: if/else 11, loops 4, boolean chains 1 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/lang/ParamListStandard.java"},"region":{"startLine":87}}}],"partialFingerprints":{"codehealthFindingId/v1":"58de9594471dc77d973d8edaacdc07b3c89c59aea66c2f56389fb943cc06ac51"}},{"ruleId":"D2","level":"warning","message":{"text":"BlockGraph.transferObjectRef (cognitive 16): BlockGraph.transferObjectRef has cognitive complexity 16 (threshold 15). Drivers by points: if/else 13, loops 3 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/pcode/BlockGraph.java"},"region":{"startLine":115}}}],"partialFingerprints":{"codehealthFindingId/v1":"f421b5dadf970bbfa94b2cf55f0301b5afb6f1bd54e7bc0741648bbbb4e4f456"}},{"ruleId":"D2","level":"warning","message":{"text":"HighFunctionDBUtil.clearConflictingLocalVariables (cognitive 16): HighFunctionDBUtil.clearConflictingLocalVariables has cognitive complexity 16 (threshold 15). Drivers by points: if/else 12, loops 3, boolean chains 1 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/pcode/HighFunctionDBUtil.java"},"region":{"startLine":436}}}],"partialFingerprints":{"codehealthFindingId/v1":"99b8117e54ec7dd0d02909416db2543904a1f9d853b6513cdc9322228f1f249f"}},{"ruleId":"D2","level":"warning","message":{"text":"HighSymbol.decode (cognitive 16): HighSymbol.decode has cognitive complexity 16 (threshold 15). Drivers by points: if/else 8, boolean chains 3, error handling 2, ternaries 2, loops 1 (nesting depth added 4). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/pcode/HighSymbol.java"},"region":{"startLine":476}}}],"partialFingerprints":{"codehealthFindingId/v1":"bde0b8057182f03002e975fb38f4058d4b10a2febbe71ea2e040511a607fd9fa"}},{"ruleId":"D2","level":"warning","message":{"text":"PcodeDataTypeManager.encodeTypeDef (cognitive 16): PcodeDataTypeManager.encodeTypeDef has cognitive complexity 16 (threshold 15). Drivers by points: if/else 16 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/pcode/PcodeDataTypeManager.java"},"region":{"startLine":881}}}],"partialFingerprints":{"codehealthFindingId/v1":"b6de9d346b75b9a5508e5c56e88855e7b29d2ed12a9c8a0e7e3a9ac14a7fe739"}},{"ruleId":"D2","level":"warning","message":{"text":"SymbolUtilities.getDefaultLocalName (cognitive 16): SymbolUtilities.getDefaultLocalName has cognitive complexity 16 (threshold 15). Drivers by points: if/else 15, loops 1 (nesting depth added 5). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/symbol/SymbolUtilities.java"},"region":{"startLine":796}}}],"partialFingerprints":{"codehealthFindingId/v1":"c0f095ba8c53a6b3524f2245eaec4e1ac42278c366eaace7ba71bbfdf1d51b46"}},{"ruleId":"D2","level":"warning","message":{"text":"DefinedStringIterator.updateNextResultIfNeeded (cognitive 16): DefinedStringIterator.updateNextResultIfNeeded has cognitive complexity 16 (threshold 15). Drivers by points: if/else 8, ternaries 5, boolean chains 2, loops 1 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/util/DefinedStringIterator.java"},"region":{"startLine":119}}}],"partialFingerprints":{"codehealthFindingId/v1":"89c8991797a3e763fb071b63f87468002b891a8b24f65ee8176da79545d465dc"}},{"ruleId":"D2","level":"warning","message":{"text":"OldLanguageFactory.getSpacesElement (cognitive 16): OldLanguageFactory.getSpacesElement has cognitive complexity 16 (threshold 15). Drivers by points: if/else 12, match/switch 3, loops 1 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/util/OldLanguageFactory.java"},"region":{"startLine":318}}}],"partialFingerprints":{"codehealthFindingId/v1":"e7fb64309979ae9ea44d61da225d74e71fe7bf8c90dd55e14b379e58e4ad59e5"}},{"ruleId":"D2","level":"warning","message":{"text":"DefaultProjectData.reconcileUserDataFiles (cognitive 16): DefaultProjectData.reconcileUserDataFiles has cognitive complexity 16 (threshold 15). Drivers by points: if/else 11, boolean chains 2, error handling 2, loops 1 (nesting depth added 5). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Project/src/main/java/ghidra/framework/data/DefaultProjectData.java"},"region":{"startLine":1020}}}],"partialFingerprints":{"codehealthFindingId/v1":"212769f0cf559c873263d88a25a8f5e49559a7c033976d47ac3e21dab8561dc2"}},{"ruleId":"D2","level":"warning","message":{"text":"GhidraFolderData.folderChanged (cognitive 16): GhidraFolderData.folderChanged has cognitive complexity 16 (threshold 15). Drivers by points: if/else 13, error handling 2, boolean chains 1 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Project/src/main/java/ghidra/framework/data/GhidraFolderData.java"},"region":{"startLine":479}}}],"partialFingerprints":{"codehealthFindingId/v1":"f601cb886fa1483839ba2106cd67aea1dc509355902dfe75cd0e494a3d788325"}},{"ruleId":"D2","level":"warning","message":{"text":"LinkedGhidraFolder.getRealFolder (cognitive 16): LinkedGhidraFolder.getRealFolder has cognitive complexity 16 (threshold 15). Drivers by points: if/else 12, ternaries 3, boolean chains 1 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Project/src/main/java/ghidra/framework/data/LinkedGhidraFolder.java"},"region":{"startLine":183}}}],"partialFingerprints":{"codehealthFindingId/v1":"b9a468dc426b6f2067f036a79d76c826554e6984d757f401e1f3d83c04a84645"}},{"ruleId":"D2","level":"warning","message":{"text":"DomainFileNode.doRefresh (cognitive 16): DomainFileNode.doRefresh has cognitive complexity 16 (threshold 15). Drivers by points: if/else 14, boolean chains 2 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Project/src/main/java/ghidra/framework/main/datatree/DomainFileNode.java"},"region":{"startLine":218}}}],"partialFingerprints":{"codehealthFindingId/v1":"45eddf1e7a45a41db61432825adccb802bca99a887a4b705ebb9e4642006cd95"}},{"ruleId":"D2","level":"warning","message":{"text":"FindCheckoutsTableModel.findCheckouts (cognitive 16): FindCheckoutsTableModel.findCheckouts has cognitive complexity 16 (threshold 15). Drivers by points: if/else 8, error handling 6, loops 2 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Project/src/main/java/ghidra/framework/main/datatree/FindCheckoutsTableModel.java"},"region":{"startLine":93}}}],"partialFingerprints":{"codehealthFindingId/v1":"57028aada5da2c0a5081cc5f1643180db80cb3fde56d7a0c4537a45f1a736c07"}},{"ruleId":"D2","level":"warning","message":{"text":"ProjectDataPasteAction.canCopyNode (cognitive 16): ProjectDataPasteAction.canCopyNode has cognitive complexity 16 (threshold 15). Drivers by points: if/else 12, ternaries 3, error handling 1 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Project/src/main/java/ghidra/framework/main/projectdata/actions/ProjectDataPasteAction.java"},"region":{"startLine":184}}}],"partialFingerprints":{"codehealthFindingId/v1":"5ba19dd49e5d752c7813e86091f8c667236deb7f46c2fcff54aed80bbc51b74b"}},{"ruleId":"D2","level":"warning","message":{"text":"PluginManager.addPlugins (cognitive 16): PluginManager.addPlugins has cognitive complexity 16 (threshold 15). Drivers by points: if/else 6, loops 6, error handling 4 (nesting depth added 5). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Project/src/main/java/ghidra/framework/plugintool/PluginManager.java"},"region":{"startLine":184}}}],"partialFingerprints":{"codehealthFindingId/v1":"efebc72070d38f8af263224d763dec398cfb708dba7ac9d17ed91a8f9bb3906e"}},{"ruleId":"D2","level":"warning","message":{"text":"AbstractOptions.registerOption (cognitive 16): AbstractOptions.registerOption has cognitive complexity 16 (threshold 15). Drivers by points: if/else 15, boolean chains 1 (nesting depth added 3). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Gui/src/main/java/ghidra/framework/options/AbstractOptions.java"},"region":{"startLine":144}}}],"partialFingerprints":{"codehealthFindingId/v1":"108315102bdc1f1685f724cb5177773fabfbf28a51518c68b733702c6699e86d"}},{"ruleId":"D2","level":"warning","message":{"text":"Platform.getAdditionalLibraryPaths (cognitive 16): Platform.getAdditionalLibraryPaths has cognitive complexity 16 (threshold 15). Drivers by points: if/else 15, boolean chains 1 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Generic/src/main/java/ghidra/framework/Platform.java"},"region":{"startLine":225}}}],"partialFingerprints":{"codehealthFindingId/v1":"69c8a75184450e4a63363945535319a7f19078112e5f0ef00d719272a5744fa8"}},{"ruleId":"D2","level":"warning","message":{"text":"HttpUtil.getContent (cognitive 16): HttpUtil.getContent has cognitive complexity 16 (threshold 15). Drivers by points: if/else 14, loops 2 (nesting depth added 5). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Generic/src/main/java/ghidra/net/http/HttpUtil.java"},"region":{"startLine":36}}}],"partialFingerprints":{"codehealthFindingId/v1":"a6769fbbd170efe0a8da1f0a88b73ae6a53b59c70f1b5b82cd675daad6cfb6da"}},{"ruleId":"D2","level":"warning","message":{"text":"ClassSearcher.findClasses (cognitive 16): ClassSearcher.findClasses has cognitive complexity 16 (threshold 15). Drivers by points: if/else 11, loops 4, boolean chains 1 (nesting depth added 5). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Generic/src/main/java/ghidra/util/classfinder/ClassSearcher.java"},"region":{"startLine":445}}}],"partialFingerprints":{"codehealthFindingId/v1":"2849a3c4f5281d5ccc0cfba1ae4c58da27f5e984eedefc16c76ae70caab29eee"}},{"ruleId":"D2","level":"warning","message":{"text":"ValueMap.moveRange (cognitive 16): ValueMap.moveRange has cognitive complexity 16 (threshold 15). Drivers by points: if/else 12, loops 4 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Generic/src/main/java/ghidra/util/map/ValueMap.java"},"region":{"startLine":390}}}],"partialFingerprints":{"codehealthFindingId/v1":"1eabee8da4d4c06a16b99f010388ba978bbd44afcd152c2a34242b27085c7be1"}},{"ruleId":"D2","level":"warning","message":{"text":"XmlParserElement.equals (cognitive 16): XmlParserElement.equals has cognitive complexity 16 (threshold 15). Drivers by points: if/else 9, boolean chains 6, loops 1 (nesting depth added 3). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Generic/src/main/java/ghidra/util/xml/XmlParserElement.java"},"region":{"startLine":50}}}],"partialFingerprints":{"codehealthFindingId/v1":"5b762a074d3132e6463f78ec414d77a47ca3a90039fdf07826bd20b6bc1308b4"}},{"ruleId":"D2","level":"warning","message":{"text":"StringUtilities.mergeStrings (cognitive 16): StringUtilities.mergeStrings has cognitive complexity 16 (threshold 15). Drivers by points: if/else 11, boolean chains 5 (nesting depth added 5). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Generic/src/main/java/ghidra/util/StringUtilities.java"},"region":{"startLine":828}}}],"partialFingerprints":{"codehealthFindingId/v1":"1cd74d916832f852976595500b70faf7d38fd6f4b47161a081b76d60d2715208"}},{"ruleId":"D2","level":"warning","message":{"text":"HistoryManager.fixHistory (cognitive 16): HistoryManager.fixHistory has cognitive complexity 16 (threshold 15). Drivers by points: loops 7, boolean chains 5, if/else 4 (nesting depth added 3). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/FileSystem/src/main/java/ghidra/framework/store/local/HistoryManager.java"},"region":{"startLine":66}}}],"partialFingerprints":{"codehealthFindingId/v1":"e9bac6c222ea04097d7050c7a744e4dfa18416293c7047ad55b0cb4428d0ea31"}},{"ruleId":"D2","level":"warning","message":{"text":"IndexedLocalFileSystem.getFolder (cognitive 16): IndexedLocalFileSystem.getFolder has cognitive complexity 16 (threshold 15). Drivers by points: if/else 13, boolean chains 2, loops 1 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/FileSystem/src/main/java/ghidra/framework/store/local/IndexedLocalFileSystem.java"},"region":{"startLine":772}}}],"partialFingerprints":{"codehealthFindingId/v1":"f069ea2082cebb6dd92e5a6880832965cf68f57a42df118a7e5f41029573cf94"}},{"ruleId":"D2","level":"warning","message":{"text":"DropShadow.applyShadow (cognitive 16): DropShadow.applyShadow has cognitive complexity 16 (threshold 15). Drivers by points: loops 10, if/else 6 (nesting depth added 8). To reduce it, break up the iteration: give each loop body a named function, and split a multi-phase loop into one function per phase so no single body carries the whole pipeline."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Docking/src/main/java/docking/util/image/DropShadow.java"},"region":{"startLine":32}}}],"partialFingerprints":{"codehealthFindingId/v1":"b749e4890b8d8ae6ea3d4e9e6d619826f26c2a7191164eb9c34071b56982d4f2"}},{"ruleId":"D2","level":"warning","message":{"text":"FieldPanel.doScrollTo (cognitive 16): FieldPanel.doScrollTo has cognitive complexity 16 (threshold 15). Drivers by points: if/else 15, boolean chains 1 (nesting depth added 4). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Docking/src/main/java/docking/widgets/fieldpanel/FieldPanel.java"},"region":{"startLine":180}}}],"partialFingerprints":{"codehealthFindingId/v1":"95fdcad61bcae689e87ea4977e04dc10fda4958affb1559c1a5563c739806f7c"}},{"ruleId":"D2","level":"warning","message":{"text":"PathManager.getPathsFromPreferences (cognitive 16): PathManager.getPathsFromPreferences has cognitive complexity 16 (threshold 15). Drivers by points: if/else 9, boolean chains 3, loops 2, ternaries 2 (nesting depth added 3). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Docking/src/main/java/docking/widgets/pathmanager/PathManager.java"},"region":{"startLine":418}}}],"partialFingerprints":{"codehealthFindingId/v1":"c37b3ab1c8548c2ee06171b6e7eec3fb848de8aa3181ceb605bd2c4ac10e20e7"}},{"ruleId":"D2","level":"warning","message":{"text":"ChainedBuffer.shrink (cognitive 16): ChainedBuffer.shrink has cognitive complexity 16 (threshold 15). Drivers by points: if/else 9, loops 7 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/DB/src/main/java/db/ChainedBuffer.java"},"region":{"startLine":535}}}],"partialFingerprints":{"codehealthFindingId/v1":"d82bcbfde2d26c815ebcda05bf57f3383e01017f08d7e2a09c8134e32ea4cb59"}},{"ruleId":"D2","level":"warning","message":{"text":"FixedKeyInteriorNode.isConsistent (cognitive 16): FixedKeyInteriorNode.isConsistent has cognitive complexity 16 (threshold 15). Drivers by points: if/else 9, error handling 4, boolean chains 2, loops 1 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/DB/src/main/java/db/FixedKeyInteriorNode.java"},"region":{"startLine":105}}}],"partialFingerprints":{"codehealthFindingId/v1":"0d9a700c6323f23d63f4eb574c9b96e8f7cf1b94ded861cb0f051fa94438a8d4"}},{"ruleId":"D2","level":"warning","message":{"text":"LongDurationFieldKeyIterator.hasNext (cognitive 16): LongDurationFieldKeyIterator.hasNext has cognitive complexity 16 (threshold 15). Drivers by points: if/else 13, boolean chains 3 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/DB/src/main/java/db/Table.java"},"region":{"startLine":3642}}}],"partialFingerprints":{"codehealthFindingId/v1":"66d8507b5cf6ddf8e1464dcb7b8e3b9c47b3c2d9c657b8f3ad5675eea41d45c5"}},{"ruleId":"D2","level":"warning","message":{"text":"VarKeyInteriorNode.isConsistent (cognitive 16): VarKeyInteriorNode.isConsistent has cognitive complexity 16 (threshold 15). Drivers by points: if/else 9, error handling 4, boolean chains 2, loops 1 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/DB/src/main/java/db/VarKeyInteriorNode.java"},"region":{"startLine":93}}}],"partialFingerprints":{"codehealthFindingId/v1":"2031d1e044275f26b5c5ebffecec1ebfb50958ec476226db4ef3bbaf86393877"}},{"ruleId":"D2","level":"warning","message":{"text":"FunctionSignatureStringable.equals (cognitive 16): FunctionSignatureStringable.equals has cognitive complexity 16 (threshold 15). Drivers by points: if/else 14, boolean chains 1, loops 1 (nesting depth added 1). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/VersionTracking/src/main/java/ghidra/feature/vt/api/stringable/FunctionSignatureStringable.java"},"region":{"startLine":440}}}],"partialFingerprints":{"codehealthFindingId/v1":"fe30ae3f7fdac73be3afe14ad1d933313749f425ec68fdebd76d141a57d0b5de"}},{"ruleId":"D2","level":"warning","message":{"text":"VTDualListingHighlightProvider.createHighlights (cognitive 16): VTDualListingHighlightProvider.createHighlights has cognitive complexity 16 (threshold 15). Drivers by points: if/else 13, boolean chains 2, loops 1 (nesting depth added 1). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/VersionTracking/src/main/java/ghidra/feature/vt/gui/duallisting/VTDualListingHighlightProvider.java"},"region":{"startLine":132}}}],"partialFingerprints":{"codehealthFindingId/v1":"e52a09624e01af728ab620a2075c52f185cd6d8f7c010d4c0d0b986061778bf1"}},{"ruleId":"D2","level":"warning","message":{"text":"DataTypesSarifMgr.processStructMembers (cognitive 16): DataTypesSarifMgr.processStructMembers has cognitive complexity 16 (threshold 15). Drivers by points: if/else 15, boolean chains 1 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/Sarif/src/main/java/sarif/managers/DataTypesSarifMgr.java"},"region":{"startLine":442}}}],"partialFingerprints":{"codehealthFindingId/v1":"d8ec34c9022f32cc0c352f816015670de8d2020ce7625ea1aba3975db7cce5cd"}},{"ruleId":"D2","level":"warning","message":{"text":"ProgramTreeSarifMgr.processTree (cognitive 16): ProgramTreeSarifMgr.processTree has cognitive complexity 16 (threshold 15). Drivers by points: error handling 7, loops 6, if/else 3 (nesting depth added 4). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/Sarif/src/main/java/sarif/managers/ProgramTreeSarifMgr.java"},"region":{"startLine":70}}}],"partialFingerprints":{"codehealthFindingId/v1":"8cac7f1d4eb2a6ef7f8c56420a186f9e364839610fd4baffc04afabf9c5ed6ea"}},{"ruleId":"D2","level":"warning","message":{"text":"SarifResultsTableProvider.setSelection (cognitive 16): SarifResultsTableProvider.setSelection has cognitive complexity 16 (threshold 15). Drivers by points: if/else 11, loops 4, boolean chains 1 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/Sarif/src/main/java/sarif/view/SarifResultsTableProvider.java"},"region":{"startLine":147}}}],"partialFingerprints":{"codehealthFindingId/v1":"655ec9c84a198394b7a9d575e0d16264bc864945e2ff749ed2c7f633aa6ed12f"}},{"ruleId":"D2","level":"warning","message":{"text":"ApplyDataTypes.preProcessDataTypeList (cognitive 16): ApplyDataTypes.preProcessDataTypeList has cognitive complexity 16 (threshold 15). Drivers by points: if/else 13, boolean chains 1, loops 1, ternaries 1 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/PDB/src/main/java/ghidra/app/util/bin/format/pdb/ApplyDataTypes.java"},"region":{"startLine":146}}}],"partialFingerprints":{"codehealthFindingId/v1":"9199b3f94d999081c784d26a4d9461b6b5fcf926d07f31da6c9ce0e56bcb655e"}},{"ruleId":"D2","level":"warning","message":{"text":"ApplyFunctions.applyTo (cognitive 16): ApplyFunctions.applyTo has cognitive complexity 16 (threshold 15). Drivers by points: if/else 14, boolean chains 1, loops 1 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/PDB/src/main/java/ghidra/app/util/bin/format/pdb/ApplyFunctions.java"},"region":{"startLine":48}}}],"partialFingerprints":{"codehealthFindingId/v1":"8a1ec7ccbe6463037e030383b9a6a43f8dc16243250d151e8b8ab13d7cc21aa5"}},{"ruleId":"D2","level":"warning","message":{"text":"NameTable.dump (cognitive 16): NameTable.dump has cognitive complexity 16 (threshold 15). Drivers by points: if/else 12, loops 4 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/PDB/src/main/java/ghidra/app/util/bin/format/pdb2/pdbreader/NameTable.java"},"region":{"startLine":241}}}],"partialFingerprints":{"codehealthFindingId/v1":"2b8316b9e81ce230debf7e6fa68816dcc884b5208ab9df7e18ef42173d6e2ded"}},{"ruleId":"D2","level":"warning","message":{"text":"CppCompositeType.getVirtualBaseClassMembers (cognitive 16): CppCompositeType.getVirtualBaseClassMembers has cognitive complexity 16 (threshold 15). Drivers by points: if/else 13, loops 3 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/PDB/src/main/java/ghidra/app/util/pdb/pdbapplicator/CppCompositeType.java"},"region":{"startLine":1469}}}],"partialFingerprints":{"codehealthFindingId/v1":"dc28d7b4e1ca8398518f96bb5789d5575bab48afdd1a2c4c3093e97aad46079a"}},{"ruleId":"D2","level":"warning","message":{"text":"FunctionSymbolApplier.getConstructorName (cognitive 16): FunctionSymbolApplier.getConstructorName has cognitive complexity 16 (threshold 15). Drivers by points: if/else 15, boolean chains 1 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/PDB/src/main/java/ghidra/app/util/pdb/pdbapplicator/FunctionSymbolApplier.java"},"region":{"startLine":177}}}],"partialFingerprints":{"codehealthFindingId/v1":"8779efa3f5c83d909a2b13a4a2dd85d662a1269f7033dd82e15e00dc002d39cf"}},{"ruleId":"D2","level":"warning","message":{"text":"MDObjectCPP.parseInternal (cognitive 16): MDObjectCPP.parseInternal has cognitive complexity 16 (threshold 15). Drivers by points: if/else 14, boolean chains 2 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/MicrosoftDmang/src/main/java/mdemangler/object/MDObjectCPP.java"},"region":{"startLine":126}}}],"partialFingerprints":{"codehealthFindingId/v1":"f645bb63de8db03622cdb3b97573c367ac1ce62a9d6ece6974b0b3bfd7f64630"}},{"ruleId":"D2","level":"warning","message":{"text":"BlockStreamHandler.run (cognitive 16): BlockStreamHandler.run has cognitive complexity 16 (threshold 15). Drivers by points: if/else 8, error handling 5, boolean chains 3 (nesting depth added 3). To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/GhidraServer/src/main/java/ghidra/server/stream/BlockStreamServer.java"},"region":{"startLine":288}}}],"partialFingerprints":{"codehealthFindingId/v1":"cabdde794749e29fad38432b35cf24b78da525281f2e3cb6f8ea4c60901306fe"}},{"ruleId":"D2","level":"warning","message":{"text":"FidServiceLibraryIngest.handleNamedRelationSearch (cognitive 16): FidServiceLibraryIngest.handleNamedRelationSearch has cognitive complexity 16 (threshold 15). Drivers by points: if/else 9, loops 4, boolean chains 3 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/FunctionID/src/main/java/ghidra/feature/fid/service/FidServiceLibraryIngest.java"},"region":{"startLine":559}}}],"partialFingerprints":{"codehealthFindingId/v1":"fecb093bcc40689495f5be62a4c86ddc9fc0d9420131b40ff78434b5ff85a85b"}},{"ruleId":"D2","level":"warning","message":{"text":"MatchNameAnalysis.analyzeNames (cognitive 16): MatchNameAnalysis.analyzeNames has cognitive complexity 16 (threshold 15). Drivers by points: if/else 13, boolean chains 2, loops 1 (nesting depth added 5). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/FunctionID/src/main/java/ghidra/feature/fid/service/MatchNameAnalysis.java"},"region":{"startLine":150}}}],"partialFingerprints":{"codehealthFindingId/v1":"94054760114236e0147c977e06126aff4dfc7fd9fbb588ee4f8a9fb90a5fa343"}},{"ruleId":"D2","level":"warning","message":{"text":"DecompilerNestedLayout.positionEdgeArticulationsInLayoutSpace (cognitive 16): DecompilerNestedLayout.positionEdgeArticulationsInLayoutSpace has cognitive complexity 16 (threshold 15). Drivers by points: if/else 14, loops 1, ternaries 1 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/FunctionGraphDecompilerExtension/src/main/java/ghidra/app/plugin/core/functiongraph/graph/layout/DecompilerNestedLayout.java"},"region":{"startLine":225}}}],"partialFingerprints":{"codehealthFindingId/v1":"61c29688f65d9619a4a1d788a37286df6f8ee5c622566339211ff81fe3c24c35"}},{"ruleId":"D2","level":"warning","message":{"text":"FGVertexPickableBackgroundPaintTransformer.apply (cognitive 16): FGVertexPickableBackgroundPaintTransformer.apply has cognitive complexity 16 (threshold 15). Drivers by points: if/else 16 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/FunctionGraph/src/main/java/ghidra/app/plugin/core/functiongraph/graph/jung/transformer/FGVertexPickableBackgroundPaintTransformer.java"},"region":{"startLine":56}}}],"partialFingerprints":{"codehealthFindingId/v1":"33d28e59466cfbacf91a7421589fe6ea7bb3dfa453a0752337a7a024a9fa4f0a"}},{"ruleId":"D2","level":"warning","message":{"text":"FGProvider.domainObjectChanged (cognitive 16): FGProvider.domainObjectChanged has cognitive complexity 16 (threshold 15). Drivers by points: if/else 16 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/FunctionGraph/src/main/java/ghidra/app/plugin/core/functiongraph/FGProvider.java"},"region":{"startLine":639}}}],"partialFingerprints":{"codehealthFindingId/v1":"d7beb23f9fd7d174419f02a2128f610c5a366687f93ced8f9ca3c2cf8ad65360"}},{"ruleId":"D2","level":"warning","message":{"text":"FGProvider.getActionContext (cognitive 16): FGProvider.getActionContext has cognitive complexity 16 (threshold 15). Drivers by points: if/else 15, boolean chains 1 (nesting depth added 4). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/FunctionGraph/src/main/java/ghidra/app/plugin/core/functiongraph/FGProvider.java"},"region":{"startLine":329}}}],"partialFingerprints":{"codehealthFindingId/v1":"b44aedb6dd86e16014fd2360182cd06f6e801991224ac997546caa65dbed50ad"}},{"ruleId":"D2","level":"warning","message":{"text":"DexHeaderFormatMarkup.processCodeItem (cognitive 16): DexHeaderFormatMarkup.processCodeItem has cognitive complexity 16 (threshold 15). Drivers by points: if/else 10, error handling 3, ternaries 3 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/android/dex/analyzer/DexHeaderFormatMarkup.java"},"region":{"startLine":557}}}],"partialFingerprints":{"codehealthFindingId/v1":"16e15cbaddec0b335bfe421b694ee2d1576ced70bd667be8064428e519be58ab"}},{"ruleId":"D2","level":"warning","message":{"text":"OatDexFile_Pie.markup (cognitive 16): OatDexFile_Pie.markup has cognitive complexity 16 (threshold 15). Drivers by points: if/else 14, boolean chains 1, loops 1 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/android/oat/oatdexfile/OatDexFile_Pie.java"},"region":{"startLine":135}}}],"partialFingerprints":{"codehealthFindingId/v1":"eea1b74bb57e1092e348e4cd4e6375d2a105a213f3fdb012b978c70e60b7998d"}},{"ruleId":"D2","level":"warning","message":{"text":"OatDexFile_S_T.markup (cognitive 16): OatDexFile_S_T.markup has cognitive complexity 16 (threshold 15). Drivers by points: if/else 14, boolean chains 1, loops 1 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/android/oat/oatdexfile/OatDexFile_S_T.java"},"region":{"startLine":114}}}],"partialFingerprints":{"codehealthFindingId/v1":"a73bb31c9fda40ace9ef1683e8c3c2ab9696746b7b03871baa8c7ffca2e498cb"}},{"ruleId":"D2","level":"warning","message":{"text":"OatHeaderAnalyzer.markupClassOffsets (cognitive 16): OatHeaderAnalyzer.markupClassOffsets has cognitive complexity 16 (threshold 15). Drivers by points: error handling 8, if/else 6, boolean chains 1, loops 1 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/android/oat/OatHeaderAnalyzer.java"},"region":{"startLine":258}}}],"partialFingerprints":{"codehealthFindingId/v1":"838f7f0c7c8aaa348e67bb2eeb9978cad8b32085a594d9a6809fb8b54c84669e"}},{"ruleId":"D2","level":"warning","message":{"text":"Img3TagFactory.get (cognitive 16): Img3TagFactory.get has cognitive complexity 16 (threshold 15). Drivers by points: if/else 15, boolean chains 1. To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/ios/img3/tag/Img3TagFactory.java"},"region":{"startLine":27}}}],"partialFingerprints":{"codehealthFindingId/v1":"f28c717ecd1c7cf84ebcbf06d0ffa9b603b89a86cb3838e6c49e3d88052dce51"}},{"ruleId":"D2","level":"warning","message":{"text":"IHDRChunk.calculateBitsPerPalette (cognitive 16): IHDRChunk.calculateBitsPerPalette has cognitive complexity 16 (threshold 15). Drivers by points: if/else 10, boolean chains 5, match/switch 1 (nesting depth added 5). The drivers above price the dispatch low by construction \u2014 a dispatch is charged once however many cases it lists, while each branch inside an arm is charged in full \u2014 so most of this count is what the case bodies hold, and the arms are where it can be reduced. To reduce it, keep the dispatch but shrink the arms: move each non-trivial case body into its own named function (or onto the value being matched) so the dispatch reads one line per case, and group related cases into a sub-dispatch. Keep every case explicit, and make the behaviour for cases you do not list a deliberate choice rather than an accident."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/ios/png/IHDRChunk.java"},"region":{"startLine":96}}}],"partialFingerprints":{"codehealthFindingId/v1":"22ef2418bf8952fc180d9366c8e85e4b333efd70809e4939c09de3cae506f7d2"}},{"ruleId":"D2","level":"warning","message":{"text":"FormatStringParser.parseFormatString (cognitive 16): FormatStringParser.parseFormatString has cognitive complexity 16 (threshold 15). Drivers by points: if/else 11, loops 5 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/DecompilerDependent/src/main/java/ghidra/app/plugin/core/string/variadic/FormatStringParser.java"},"region":{"startLine":81}}}],"partialFingerprints":{"codehealthFindingId/v1":"eab393b3340619c67e907dc07879d6c4ba598b32347b84fade73b6e1ebf39c9c"}},{"ruleId":"D2","level":"warning","message":{"text":"DecompilerSwitchAnalysisCmd.hasAllReferences (cognitive 16): DecompilerSwitchAnalysisCmd.hasAllReferences has cognitive complexity 16 (threshold 15). Drivers by points: if/else 11, loops 3, boolean chains 1, ternaries 1 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/Decompiler/src/main/java/ghidra/app/cmd/function/DecompilerSwitchAnalysisCmd.java"},"region":{"startLine":240}}}],"partialFingerprints":{"codehealthFindingId/v1":"3d4b8151442f771eeceea04693b45d4af1829f9e662f04cee63a70a5e618d802"}},{"ruleId":"D2","level":"warning","message":{"text":"DecompilerUtils.findClosestAddressedToken (cognitive 16): DecompilerUtils.findClosestAddressedToken has cognitive complexity 16 (threshold 15). Drivers by points: if/else 11, loops 5 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/Decompiler/src/main/java/ghidra/app/decompiler/component/DecompilerUtils.java"},"region":{"startLine":476}}}],"partialFingerprints":{"codehealthFindingId/v1":"b288bb361626e4d4646f061d585cecfbaf492dbcf2b64a54f819fa30d8a2049b"}},{"ruleId":"D2","level":"warning","message":{"text":"DecompilerUtils.getMatchingBrace (cognitive 16): DecompilerUtils.getMatchingBrace has cognitive complexity 16 (threshold 15). Drivers by points: if/else 15, loops 1 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/Decompiler/src/main/java/ghidra/app/decompiler/component/DecompilerUtils.java"},"region":{"startLine":696}}}],"partialFingerprints":{"codehealthFindingId/v1":"8d9dd81e5ae2202c7e3aeb307d3a67520cf1332abfaeca075f69be836e35c88c"}},{"ruleId":"D2","level":"warning","message":{"text":"DecompileCallback.encodeFunction (cognitive 16): DecompileCallback.encodeFunction has cognitive complexity 16 (threshold 15). Drivers by points: if/else 15, boolean chains 1 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/Decompiler/src/main/java/ghidra/app/decompiler/DecompileCallback.java"},"region":{"startLine":892}}}],"partialFingerprints":{"codehealthFindingId/v1":"eca590f5d99df713298cf93a7e588e8cf11533552ebccb7cbea0370c2fc919e5"}},{"ruleId":"D2","level":"warning","message":{"text":"DecompileCallback.getExternalRef (cognitive 16): DecompileCallback.getExternalRef has cognitive complexity 16 (threshold 15). Drivers by points: if/else 15, boolean chains 1 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/Decompiler/src/main/java/ghidra/app/decompiler/DecompileCallback.java"},"region":{"startLine":683}}}],"partialFingerprints":{"codehealthFindingId/v1":"f35a6b45634466075245bde52f429bb99c5696bf0ec4194b4cf102118cd65742"}},{"ruleId":"D2","level":"warning","message":{"text":"FindFunctionCallback.process (cognitive 16): FindFunctionCallback.process has cognitive complexity 16 (threshold 15). Drivers by points: if/else 14, boolean chains 1, loops 1 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/Decompiler/src/main/java/ghidra/app/plugin/core/analysis/DecompilerSwitchAnalyzer.java"},"region":{"startLine":407}}}],"partialFingerprints":{"codehealthFindingId/v1":"34631303b663dde88083b1540d5916396365ce07a3434cbe8dc5170c141ae17d"}},{"ruleId":"D2","level":"warning","message":{"text":"ConvertConstantEquateTask.findScalarMatch (cognitive 16): ConvertConstantEquateTask.findScalarMatch has cognitive complexity 16 (threshold 15). Drivers by points: if/else 14, error handling 1, loops 1 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/Decompiler/src/main/java/ghidra/app/plugin/core/decompile/actions/ConvertConstantEquateTask.java"},"region":{"startLine":409}}}],"partialFingerprints":{"codehealthFindingId/v1":"54a15e5e20b0fa2522d8387953693f2499a8a7d24b919fda37790ab0781cf2ec"}},{"ruleId":"D2","level":"warning","message":{"text":"Pinning.isBlockPair (cognitive 16): Pinning.isBlockPair has cognitive complexity 16 (threshold 15). Drivers by points: if/else 13, boolean chains 2, loops 1 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/CodeCompare/src/main/java/ghidra/features/codecompare/graphanalysis/Pinning.java"},"region":{"startLine":368}}}],"partialFingerprints":{"codehealthFindingId/v1":"f692d17ae2ac9740f14f94f83a194b303262adfd96f4154b65b505b4e5961547"}},{"ruleId":"D2","level":"warning","message":{"text":"ClosedPatternRowObject.mineClosedPatterns (cognitive 16): ClosedPatternRowObject.mineClosedPatterns has cognitive complexity 16 (threshold 15). Drivers by points: if/else 7, loops 5, match/switch 4 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/BytePatterns/src/main/java/ghidra/bitpatterns/gui/ClosedPatternRowObject.java"},"region":{"startLine":113}}}],"partialFingerprints":{"codehealthFindingId/v1":"27d846b3980a4edd60be7316bacce1d8f07666e3e0ca98bbcdfac6c43d1fa3d7"}},{"ruleId":"D2","level":"warning","message":{"text":"ExportPatternFileActionListener.actionPerformed (cognitive 16): ExportPatternFileActionListener.actionPerformed has cognitive complexity 16 (threshold 15). Drivers by points: if/else 13, boolean chains 1, error handling 1, loops 1 (nesting depth added 3). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/BytePatterns/src/main/java/ghidra/bitpatterns/gui/ExportPatternFileActionListener.java"},"region":{"startLine":59}}}],"partialFingerprints":{"codehealthFindingId/v1":"59e6f1439e5c5e47321f848de11f07e62820a7851572998b9d566c37904c924e"}},{"ruleId":"D2","level":"warning","message":{"text":"ProjectedDatabase.getBackwardExtensionItems (cognitive 16): ProjectedDatabase.getBackwardExtensionItems has cognitive complexity 16 (threshold 15). Drivers by points: loops 9, if/else 7 (nesting depth added 6). To reduce it, break up the iteration: give each loop body a named function, and split a multi-phase loop into one function per phase so no single body carries the whole pipeline."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/BytePatterns/src/main/java/ghidra/closedpatternmining/ProjectedDatabase.java"},"region":{"startLine":217}}}],"partialFingerprints":{"codehealthFindingId/v1":"7f17f077a4a0298d9d4ff92dac895df7366352497a763024a3ee3ec71cfb2ff8"}},{"ruleId":"D2","level":"warning","message":{"text":"ProjectedDatabase.getLocallyFrequentItems (cognitive 16): ProjectedDatabase.getLocallyFrequentItems has cognitive complexity 16 (threshold 15). Drivers by points: if/else 12, loops 4 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/BytePatterns/src/main/java/ghidra/closedpatternmining/ProjectedDatabase.java"},"region":{"startLine":154}}}],"partialFingerprints":{"codehealthFindingId/v1":"c847661c46437a565d75c6aa160b60825c269183424f7b679e0bf7c6ff5440cf"}},{"ruleId":"D2","level":"warning","message":{"text":"BSimServerManager.disposeServer (cognitive 16): BSimServerManager.disposeServer has cognitive complexity 16 (threshold 15). Drivers by points: if/else 14, boolean chains 2 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/BSim/src/main/java/ghidra/features/bsim/gui/BSimServerManager.java"},"region":{"startLine":143}}}],"partialFingerprints":{"codehealthFindingId/v1":"85649499754f8e688159fe298556f6e021f6ac565e79ff6bb0a3184d22d94886"}},{"ruleId":"D2","level":"warning","message":{"text":"AbstractSQLFunctionDatabase.getOptionalTable (cognitive 16): AbstractSQLFunctionDatabase.getOptionalTable has cognitive complexity 16 (threshold 15). Drivers by points: if/else 13, loops 2, boolean chains 1 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/BSim/src/main/java/ghidra/features/bsim/query/client/AbstractSQLFunctionDatabase.java"},"region":{"startLine":766}}}],"partialFingerprints":{"codehealthFindingId/v1":"78ec3c67ba4692e3c7af5e0e4e1d979b32821a69e51d822fe719a318f2f8ac8f"}},{"ruleId":"D2","level":"warning","message":{"text":"ExecutableRecord.compareMetadata (cognitive 16): ExecutableRecord.compareMetadata has cognitive complexity 16 (threshold 15). Drivers by points: if/else 16 (nesting depth added 2). To reduce it, split the body: most of this score is breadth rather than depth \u2014 checks laid out side by side rather than stacked \u2014 so group the statements between the checks into named steps and move each step into its own function. Some of it IS depth: where a check sits inside another whose only job is to reach it, merge the two into one condition."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/BSim/src/main/java/ghidra/features/bsim/query/description/ExecutableRecord.java"},"region":{"startLine":728}}}],"partialFingerprints":{"codehealthFindingId/v1":"55b4798829acc82207c891410a0d25d9443e901dd7dc33e0c0cb70e290a006e7"}},{"ruleId":"D2","level":"warning","message":{"text":"ExecutableRecord.findInsertions (cognitive 16): ExecutableRecord.findInsertions has cognitive complexity 16 (threshold 15). Drivers by points: if/else 12, boolean chains 3, loops 1 (nesting depth added 4). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/BSim/src/main/java/ghidra/features/bsim/query/description/ExecutableRecord.java"},"region":{"startLine":804}}}],"partialFingerprints":{"codehealthFindingId/v1":"070e4f4c008dac2ba0583d2dc1b0807e70a94357c64107558bf9504231294528"}},{"ruleId":"D2","level":"warning","message":{"text":"BSimFilter.addAtom (cognitive 16): BSimFilter.addAtom has cognitive complexity 16 (threshold 15). Drivers by points: if/else 16 (nesting depth added 9). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/BSim/src/main/java/ghidra/features/bsim/query/protocol/BSimFilter.java"},"region":{"startLine":65}}}],"partialFingerprints":{"codehealthFindingId/v1":"665c9a2e0ef078b0a882ead0d80f40515169e44edfce277260703fa3d6456440"}},{"ruleId":"D2","level":"warning","message":{"text":"RandomForestTrainingTask.run (cognitive 16): RandomForestTrainingTask.run has cognitive complexity 16 (threshold 15). Drivers by points: if/else 10, loops 6 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Extensions/MachineLearning/src/main/java/ghidra/machinelearning/functionfinding/RandomForestTrainingTask.java"},"region":{"startLine":129}}}],"partialFingerprints":{"codehealthFindingId/v1":"1b480d5b30024b3c0953dd1a1990c0bb5b1615c820571c4e9285a2ad7fe25c84"}},{"ruleId":"D2","level":"warning","message":{"text":"PcodeInterval.evalBinaryExpression (cognitive 16): PcodeInterval.evalBinaryExpression has cognitive complexity 16 (threshold 15). Drivers by points: ternaries 10, if/else 4, boolean chains 1, error handling 1 (nesting depth added 5). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Extensions/Lisa/src/main/java/ghidra/lisa/pcode/analyses/PcodeInterval.java"},"region":{"startLine":242}}}],"partialFingerprints":{"codehealthFindingId/v1":"304552981a0b32c58cdd53fcab064cecb553ff719fdab09795953ab730c868f7"}},{"ruleId":"D2","level":"warning","message":{"text":"UnitContext.branch (cognitive 16): UnitContext.branch has cognitive complexity 16 (threshold 15). Drivers by points: if/else 11, boolean chains 3, loops 2 (nesting depth added 6). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Extensions/Lisa/src/main/java/ghidra/lisa/pcode/contexts/UnitContext.java"},"region":{"startLine":85}}}],"partialFingerprints":{"codehealthFindingId/v1":"5e529cf6a83da26080a5b220c49ccc1d1963a565fb12160ad739c217219923a3"}},{"ruleId":"D2","level":"warning","message":{"text":"AbstractRectangle2DQuery.testNode (cognitive 16): AbstractRectangle2DQuery.testNode has cognitive complexity 16 (threshold 15). Drivers by points: if/else 16. To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/ProposedUtils/src/main/java/ghidra/util/database/spatial/rect/AbstractRectangle2DQuery.java"},"region":{"startLine":137}}}],"partialFingerprints":{"codehealthFindingId/v1":"d52dfaab2d0e77207469893e8a9e5f16faa0fbb3580ed8ea303ce413734a6f83"}},{"ruleId":"D2","level":"warning","message":{"text":"DBTraceCodeSpace.clearPlatform (cognitive 16): DBTraceCodeSpace.clearPlatform has cognitive complexity 16 (threshold 15). Drivers by points: if/else 10, loops 6 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/listing/DBTraceCodeSpace.java"},"region":{"startLine":171}}}],"partialFingerprints":{"codehealthFindingId/v1":"2570e5e1ad6ab662e904fc9bdc667b5075ff4927c5a9661814826aec2ce07be2"}},{"ruleId":"D2","level":"warning","message":{"text":"DBTraceDefinedDataView.create (cognitive 16): DBTraceDefinedDataView.create has cognitive complexity 16 (threshold 15). Drivers by points: if/else 13, boolean chains 2, error handling 1. To reduce it, split the body: this score is breadth rather than depth \u2014 many checks laid out side by side rather than nested inside one another, so inverting conditions into early returns has nothing left to flatten. Group the statements between the checks into named steps and move each step into its own function, so the body reads as a short sequence of named stages."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/listing/DBTraceDefinedDataView.java"},"region":{"startLine":72}}}],"partialFingerprints":{"codehealthFindingId/v1":"714c30b2b8975d07a7e19c625eeccd829dc1728bb6932b020279a0c23399c4d9"}},{"ruleId":"D2","level":"warning","message":{"text":"DBTraceContentHandler.getDomainObject (cognitive 16): DBTraceContentHandler.getDomainObject has cognitive complexity 16 (threshold 15). Drivers by points: if/else 12, error handling 2, boolean chains 1, ternaries 1 (nesting depth added 4). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/DBTraceContentHandler.java"},"region":{"startLine":155}}}],"partialFingerprints":{"codehealthFindingId/v1":"3a8eeb74c95683a2db20de24d9d3c960d09af00a923469b9634916eb76543d30"}},{"ruleId":"D2","level":"warning","message":{"text":"TraceBreakpointKindSet.decode (cognitive 16): TraceBreakpointKindSet.decode has cognitive complexity 16 (threshold 15). Drivers by points: if/else 11, loops 4, boolean chains 1 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/model/breakpoint/TraceBreakpointKind.java"},"region":{"startLine":66}}}],"partialFingerprints":{"codehealthFindingId/v1":"3f77df87618d6ca2bbb631c060d4b0f1af0fb0a12e8ec9937f06d0c415423ec2"}},{"ruleId":"D2","level":"warning","message":{"text":"DebuggerBreakpointsProvider.deriveCurrentSleigh (cognitive 16): DebuggerBreakpointsProvider.deriveCurrentSleigh has cognitive complexity 16 (threshold 15). Drivers by points: if/else 9, loops 5, boolean chains 2 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/gui/breakpoint/DebuggerBreakpointsProvider.java"},"region":{"startLine":1388}}}],"partialFingerprints":{"codehealthFindingId/v1":"f2207bc3f2c25aee427be139dfd87d51a43ed2dd586b04ef44d529359346e53b"}},{"ruleId":"D2","level":"warning","message":{"text":"AngrTaintState.writeState (cognitive 16): AngrTaintState.writeState has cognitive complexity 16 (threshold 15). Drivers by points: if/else 13, loops 2, boolean chains 1 (nesting depth added 4). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/taint/AngrTaintState.java"},"region":{"startLine":143}}}],"partialFingerprints":{"codehealthFindingId/v1":"c7028dd2f1328bd59f6c4344b1e909ddf2dc1de13f2459c391769dfd697f6ed3"}},{"ruleId":"D2","level":"warning","message":{"text":"EmulatorTaintState.setTaint (cognitive 16): EmulatorTaintState.setTaint has cognitive complexity 16 (threshold 15). Drivers by points: if/else 14, ternaries 2 (nesting depth added 7). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/taint/EmulatorTaintState.java"},"region":{"startLine":108}}}],"partialFingerprints":{"codehealthFindingId/v1":"478fb323c51c4e06602b24abcc0fd60af35db37f8f8407e3ad7b92146c0a13e0"}},{"ruleId":"D2","level":"warning","message":{"text":"RmiReplyHandlerThread.run (cognitive 16): RmiReplyHandlerThread.run has cognitive complexity 16 (threshold 15). Drivers by points: if/else 8, error handling 5, match/switch 2, loops 1 (nesting depth added 8). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/Debugger-rmi-trace/src/main/java/ghidra/app/plugin/core/debug/client/tracermi/RmiReplyHandlerThread.java"},"region":{"startLine":35}}}],"partialFingerprints":{"codehealthFindingId/v1":"9ed8592da110cdf4a65416ec5aae1e969a10f86409ba16b38b83042943c7557d"}},{"ruleId":"D2","level":"warning","message":{"text":"TenetLoader.loadTrace (cognitive 16): TenetLoader.loadTrace has cognitive complexity 16 (threshold 15). Drivers by points: if/else 12, error handling 3, loops 1 (nesting depth added 5). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/Debugger-importers/src/main/java/ghidra/app/util/opinion/TenetLoader.java"},"region":{"startLine":321}}}],"partialFingerprints":{"codehealthFindingId/v1":"4dd288e50b64bc3b164d01da8450bcdb82bbab80ee14c3ad1f2f523f7c8661ed"}},{"ruleId":"D2","level":"warning","message":{"text":"DbgEngStackUnwindTest.findLocation (cognitive 16): DbgEngStackUnwindTest.findLocation has cognitive complexity 16 (threshold 15). Drivers by points: if/else 10, loops 6 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Test/DebuggerIntegrationTest/src/test.slow/java/agent/dbgeng/rmi/DbgEngStackUnwindTest.java"},"region":{"startLine":463}}}],"partialFingerprints":{"codehealthFindingId/v1":"cd7bc7c8eebd7d85d728db4af46fa98c005957ce67533ecd639b1e232d079e3a"}},{"ruleId":"D2","level":"warning","message":{"text":"LldbStackUnwindTest.findLocation (cognitive 16): LldbStackUnwindTest.findLocation has cognitive complexity 16 (threshold 15). Drivers by points: if/else 10, loops 6 (nesting depth added 10). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Test/DebuggerIntegrationTest/src/test.slow/java/agent/lldb/rmi/LldbStackUnwindTest.java"},"region":{"startLine":476}}}],"partialFingerprints":{"codehealthFindingId/v1":"a7d795110caca32c9c5e0e1574301512c814c26e9c018bd7ffed7b42399b0670"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: KdDebuggerData: TooManyMethods \u2014 325 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/dump/pagedump/KdDebuggerData.java"},"region":{"startLine":24}}}],"partialFingerprints":{"codehealthFindingId/v1":"3963a39c8c4ee02071d0c7eb3dbfe5191ede7e589efe43332a22e3ef4386f023"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: DataTypeManagerDB: TooManyMethods \u2014 236 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/DataTypeManagerDB.java"},"region":{"startLine":71}}}],"partialFingerprints":{"codehealthFindingId/v1":"2dd04e75280e1498b6c5320cca6ca66ac09b49dab19e70e4a706633615d6c29f"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: JdiCommands: TooManyMethods \u2014 180 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/Debugger-jpda/src/main/java/ghidra/dbg/jdi/rmi/jpda/JdiCommands.java"},"region":{"startLine":119}}}],"partialFingerprints":{"codehealthFindingId/v1":"8f608021fb4f835e0becd93c35117f81b40236474aceca30d90856b81116c079"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: DockingWindowManager: TooManyMethods \u2014 166 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Docking/src/main/java/docking/DockingWindowManager.java"},"region":{"startLine":63}}}],"partialFingerprints":{"codehealthFindingId/v1":"bfa84b20f1b4c17f45972ff813f68d59ef13aa7613a9bce3d0f3cd1c0750aa94"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: SymbolManager: TooManyMethods \u2014 163 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/symbol/SymbolManager.java"},"region":{"startLine":48}}}],"partialFingerprints":{"codehealthFindingId/v1":"20d66e54036718005cf7639b26df1b95d91f8de08b5be94249f6bd336cb0cdcf"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: data/DataTypeManagerDB.java: FileTooLong \u2014 2697 significant lines (blank, comment-only and punctuation-only lines excluded). To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/DataTypeManagerDB.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"3d3eed614edddfe8fa8a1e32685fe0397fa738f59d155b67a1d04604b695b6f3"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: GTree: TooManyMethods \u2014 154 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Docking/src/main/java/docking/widgets/tree/GTree.java"},"region":{"startLine":67}}}],"partialFingerprints":{"codehealthFindingId/v1":"7ec0415c944955b07df95451f657460bd4760aad18d2e382e4c6f55846e056a5"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: DBTraceProgramView: TooManyMethods \u2014 150 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/program/DBTraceProgramView.java"},"region":{"startLine":81}}}],"partialFingerprints":{"codehealthFindingId/v1":"c0adfaf740478050fa5b8f4c446d39a672644ed7911c9d477abd7af7c3a6e74e"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: PluginTool: TooManyMethods \u2014 145 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Project/src/main/java/ghidra/framework/plugintool/PluginTool.java"},"region":{"startLine":79}}}],"partialFingerprints":{"codehealthFindingId/v1":"381c52e386d9499b2f0095890b07aaffcc0be5495781908ac0bd07d8e8dd2efc"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: ProgramDB: TooManyMethods \u2014 138 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/ProgramDB.java"},"region":{"startLine":71}}}],"partialFingerprints":{"codehealthFindingId/v1":"b350401ba0d0586b8cf31f9235ac64ea3e6e593d9b847a88468ab4c22045afa2"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: MemoryMapDB: TooManyMethods \u2014 138 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/mem/MemoryMapDB.java"},"region":{"startLine":44}}}],"partialFingerprints":{"codehealthFindingId/v1":"4a6f3c5068c2950fd40fdf0c656c6740e527c7f298ef3bd583861f9ddc38b515"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: FieldPanel: TooManyMethods \u2014 137 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Docking/src/main/java/docking/widgets/fieldpanel/FieldPanel.java"},"region":{"startLine":48}}}],"partialFingerprints":{"codehealthFindingId/v1":"f9844f0e174b46dcc0f3571745326d6c5be0a4ce008e18178d2d094c321ddeae"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: DefaultPdbApplicator: TooManyMethods \u2014 136 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/PDB/src/main/java/ghidra/app/util/pdb/pdbapplicator/DefaultPdbApplicator.java"},"region":{"startLine":80}}}],"partialFingerprints":{"codehealthFindingId/v1":"71be0301727638b6ec7813a1c47fdb73873431b597e2e950aa518a1c595bb335"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: CodeManager: TooManyMethods \u2014 127 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/code/CodeManager.java"},"region":{"startLine":50}}}],"partialFingerprints":{"codehealthFindingId/v1":"2552f389d8420d0d8414a2a42b1ed9d25da67509f8d587d572ca3126133cd173"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: DialogComponentProvider: TooManyMethods \u2014 125 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Docking/src/main/java/docking/DialogComponentProvider.java"},"region":{"startLine":49}}}],"partialFingerprints":{"codehealthFindingId/v1":"5db7643e0bb6fb183119eb74714fa098005f3bb879cac143e5723a46d6579b5c"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: GhidraFileChooser: TooManyMethods \u2014 125 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Docking/src/main/java/docking/widgets/filechooser/GhidraFileChooser.java"},"region":{"startLine":83}}}],"partialFingerprints":{"codehealthFindingId/v1":"bc1cc58457a6cdfc15b445ca42a0c0392ca7b68e7559ce4e1a58419fa6540f02"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: JdiMethods: TooManyMethods \u2014 124 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/Debugger-jpda/src/main/java/ghidra/dbg/jdi/rmi/jpda/JdiMethods.java"},"region":{"startLine":34}}}],"partialFingerprints":{"codehealthFindingId/v1":"5071d403f09675fc8f74d0118101714f795bc3005201734f6564ae0ff2d21661"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: FGController: TooManyMethods \u2014 123 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/FunctionGraph/src/main/java/ghidra/app/plugin/core/functiongraph/mvc/FGController.java"},"region":{"startLine":65}}}],"partialFingerprints":{"codehealthFindingId/v1":"7528057c07d2163f24ef1053e60f754e91f8882ebdbc5337d071723b0bda0984"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: db/Table.java: FileTooLong \u2014 2026 significant lines (blank, comment-only and punctuation-only lines excluded), about 100% of them inside a single declaration: Table (32-4072). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/DB/src/main/java/db/Table.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"33d6c9b04ee709e04a933f2dfed66b62c571329add10135d0b3b01ad8a50fd29"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: symbol/SymbolManager.java: FileTooLong \u2014 2000 significant lines (blank, comment-only and punctuation-only lines excluded), about 99% of them inside a single declaration: SymbolManager (48-3510). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/symbol/SymbolManager.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"f3b4af62c620e80566700355891b88f9620c4c6e2de83c18dd033159b38da454"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: CppCompositeType: TooManyMethods \u2014 116 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/PDB/src/main/java/ghidra/app/util/pdb/pdbapplicator/CppCompositeType.java"},"region":{"startLine":39}}}],"partialFingerprints":{"codehealthFindingId/v1":"071cfb5621a5af52ef0192b816a07f5441782edd04101d6a5f6429642c8313c6"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: AbstractDBTraceProgramViewListing: TooManyMethods \u2014 115 methods. Most of these members implement listing.Listing (64 of 85 members), so moving them onto a smaller type would remove them from that contract rather than reduce it. To reduce it, split the contract instead: give each cohesive group of operations its own smaller interface and its own implementing type. Where the contract has to stay whole, move the work behind these members into collaborator types, so what is left here is a forward per member rather than a responsibility per member."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/program/AbstractDBTraceProgramViewListing.java"},"region":{"startLine":57}}}],"partialFingerprints":{"codehealthFindingId/v1":"0c1a63e768ad3f9cdf6fd093e1851bfad2c46df54288b89b071dde1c615610f3"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: DecompileOptions: TooManyMethods \u2014 111 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/Decompiler/src/main/java/ghidra/app/decompiler/DecompileOptions.java"},"region":{"startLine":48}}}],"partialFingerprints":{"codehealthFindingId/v1":"e274e9168da0bc91da5ee2f830b67782fe242b2600a500e1734fa9f889915021"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: FunctionDB: TooManyMethods \u2014 110 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/function/FunctionDB.java"},"region":{"startLine":49}}}],"partialFingerprints":{"codehealthFindingId/v1":"dd81ddc66e91334893a36299f510b3c0db81f62a0cc1ef8448a532ef07cd021b"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: DBTrace: TooManyMethods \u2014 109 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/DBTrace.java"},"region":{"startLine":76}}}],"partialFingerprints":{"codehealthFindingId/v1":"93ea2ee1b016ff0bc7d8a218d8747e580aeb2a8677f8847300474173f1964096"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: DecompilerPanel: TooManyMethods \u2014 106 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/Decompiler/src/main/java/ghidra/app/decompiler/component/DecompilerPanel.java"},"region":{"startLine":61}}}],"partialFingerprints":{"codehealthFindingId/v1":"d9c6fd2421e8610dd6ebbd4e58fc92bf7f32fa4355b8eb5335fb898d846e8f80"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: FGProvider: TooManyMethods \u2014 106 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/FunctionGraph/src/main/java/ghidra/app/plugin/core/functiongraph/FGProvider.java"},"region":{"startLine":62}}}],"partialFingerprints":{"codehealthFindingId/v1":"9c1521b7eb428e98affb13e0017a6ab1a008d52c001712925b4feee1a88be54c"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: code/CodeManager.java: FileTooLong \u2014 1743 significant lines (blank, comment-only and punctuation-only lines excluded), about 98% of them inside a single declaration: CodeManager (50-3393). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/code/CodeManager.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"f8abe6cb1de7c0ac2cd9ef3b795c045f89eb375509a52653a6d066643f0b499b"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: Ext4SuperBlock: TooManyMethods \u2014 104 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/ext4/Ext4SuperBlock.java"},"region":{"startLine":24}}}],"partialFingerprints":{"codehealthFindingId/v1":"d73e68db6984625aaeddec97cb6df10a73a5c19a22f4b788b0dba59e39a4d70c"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: DataStub: TooManyMethods \u2014 103 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/listing/DataStub.java"},"region":{"startLine":40}}}],"partialFingerprints":{"codehealthFindingId/v1":"e14f62c8fab89d7e695ad06d65fb6b9de831a86293dfef6064d5e8d40212ae2a"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: InstructionStub: TooManyMethods \u2014 100 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/listing/InstructionStub.java"},"region":{"startLine":37}}}],"partialFingerprints":{"codehealthFindingId/v1":"f629fecf7a72c0c98e45c8856a98f37cc18f2d465fff6498459cb450be908436"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: ProgramDiffPlugin: TooManyMethods \u2014 98 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/ProgramDiff/src/main/java/ghidra/app/plugin/core/diff/ProgramDiffPlugin.java"},"region":{"startLine":93}}}],"partialFingerprints":{"codehealthFindingId/v1":"7a72b6f35717e6cbb60e7754e2479b12932d312476a753c312fdb9b18d45d289"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: DebuggerTraceManagerServicePlugin: TooManyMethods \u2014 92 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/service/tracemgr/DebuggerTraceManagerServicePlugin.java"},"region":{"startLine":95}}}],"partialFingerprints":{"codehealthFindingId/v1":"90d4b253e5349a60c6f91f7080fb20cff286f4ae118c6703bbffb0a2e2f62be0"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: AbstractSQLFunctionDatabase: TooManyMethods \u2014 92 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/BSim/src/main/java/ghidra/features/bsim/query/client/AbstractSQLFunctionDatabase.java"},"region":{"startLine":46}}}],"partialFingerprints":{"codehealthFindingId/v1":"3e6c3415e3f1db88e95365e88560f8bcc707e6a51083320c79d14f0053f2987f"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: jpda/JdiCommands.java: FileTooLong \u2014 1526 significant lines (blank, comment-only and punctuation-only lines excluded), about 96% of them inside a single declaration: JdiCommands (119-2310). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/Debugger-jpda/src/main/java/ghidra/dbg/jdi/rmi/jpda/JdiCommands.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"0360ca711d360e072a81ad415e3f01ddfe0f7916282269b585f2fa593115e627"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: pdbapplicator/CppCompositeType.java: FileTooLong \u2014 1524 significant lines (blank, comment-only and punctuation-only lines excluded), about 99% of them inside a single declaration: CppCompositeType (39-2985). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/PDB/src/main/java/ghidra/app/util/pdb/pdbapplicator/CppCompositeType.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"8bd9b5a0b59e87d564027587ae8a0709322e10af8101bd07417220e32ad4afc2"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: SleighCompile: TooManyMethods \u2014 91 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slgh_compile/SleighCompile.java"},"region":{"startLine":52}}}],"partialFingerprints":{"codehealthFindingId/v1":"1214a318077e29010e4b8e40fb3c8ecccafd1babfd2bd08d68fd20be4e332469"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: GTable: TooManyMethods \u2014 90 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Docking/src/main/java/docking/widgets/table/GTable.java"},"region":{"startLine":78}}}],"partialFingerprints":{"codehealthFindingId/v1":"132e63b7497dff6bd1d5e9296ffeb3c72c3aea3a45502322d7ad192a25441808"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: pdbapplicator/PrimitiveTypeApplier.java: FileTooLong \u2014 1496 significant lines (blank, comment-only and punctuation-only lines excluded), about 100% of them inside a single declaration: PrimitiveTypeApplier (28-2119). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/PDB/src/main/java/ghidra/app/util/pdb/pdbapplicator/PrimitiveTypeApplier.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"8b8521eeccff7f75d71ed376cd5d350244a8ae179d184e142978cfa0509efe08"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: TraceRmiHandler: TooManyMethods \u2014 89 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/Debugger-rmi-trace/src/main/java/ghidra/app/plugin/core/debug/service/tracermi/TraceRmiHandler.java"},"region":{"startLine":72}}}],"partialFingerprints":{"codehealthFindingId/v1":"329d3a6c40dd0eb5b68a437386e3a708c8ab9aef89619da519369b41dcd2d10e"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: DBTraceObject: TooManyMethods \u2014 89 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/target/DBTraceObject.java"},"region":{"startLine":51}}}],"partialFingerprints":{"codehealthFindingId/v1":"2596bab3293ba627ccfc79212a56d023bb3261fe09b5c189d338eb1fe7917c7e"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: AbstractOptions: TooManyMethods \u2014 89 methods. Most of these members implement options.Options (61 of 83 members), so moving them onto a smaller type would remove them from that contract rather than reduce it. To reduce it, split the contract instead: give each cohesive group of operations its own smaller interface and its own implementing type. Where the contract has to stay whole, move the work behind these members into collaborator types, so what is left here is a forward per member rather than a responsibility per member."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Gui/src/main/java/ghidra/framework/options/AbstractOptions.java"},"region":{"startLine":36}}}],"partialFingerprints":{"codehealthFindingId/v1":"2734ab7e349bc9df2046402b01f2622c6d8d12c08bb2a8bfc47db906b1c99098"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: data/StructureDB.java: FileTooLong \u2014 1454 significant lines (blank, comment-only and punctuation-only lines excluded), about 99% of them inside a single declaration: StructureDB (37-2474). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/StructureDB.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"eb3a17a85189e0bcd7fe936c9c3e9eb3b1aa81547ef1d9f8597d1a37fb695330"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: DBTraceGuestPlatformMappedMemory: TooManyMethods \u2014 87 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/guest/DBTraceGuestPlatformMappedMemory.java"},"region":{"startLine":45}}}],"partialFingerprints":{"codehealthFindingId/v1":"8d316ea5593c53d8a4aaf87707a4e6d1b73d3bd73cf36fe386cbf5aadb70d257"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: GhidraFileData: TooManyMethods \u2014 87 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Project/src/main/java/ghidra/framework/data/GhidraFileData.java"},"region":{"startLine":57}}}],"partialFingerprints":{"codehealthFindingId/v1":"73925044ca5c414e63620835f9ab7a0cd3ead64a9586655dc4ba97df370d44a6"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: ListingDB: TooManyMethods \u2014 87 methods. Most of these members implement listing.Listing (66 of 68 members), so moving them onto a smaller type would remove them from that contract rather than reduce it. To reduce it, split the contract instead: give each cohesive group of operations its own smaller interface and its own implementing type. Where the contract has to stay whole, move the work behind these members into collaborator types, so what is left here is a forward per member rather than a responsibility per member."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/ListingDB.java"},"region":{"startLine":39}}}],"partialFingerprints":{"codehealthFindingId/v1":"01f837110290928d5fdbdc4281a01344a82fbe776d29e521762a65073e980ad5"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: database/ProgramDB.java: FileTooLong \u2014 1444 significant lines (blank, comment-only and punctuation-only lines excluded), about 97% of them inside a single declaration: ProgramDB (71-2505). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/ProgramDB.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"d2a5b66b10ec2cf645a510f1e5e89a881de0462e2edf15235d0f021b595aa7a3"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: FloatFormat: TooManyMethods \u2014 86 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcode/floatformat/FloatFormat.java"},"region":{"startLine":30}}}],"partialFingerprints":{"codehealthFindingId/v1":"7fa96c2abf1932d5c459e058edb13a0f9e87dbb5c88afde24c19bd1853f25db5"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: StubListing: TooManyMethods \u2014 86 methods. Most of these members implement listing.Listing (66 of 67 members), so moving them onto a smaller type would remove them from that contract rather than reduce it. To reduce it, split the contract instead: give each cohesive group of operations its own smaller interface and its own implementing type. Where the contract has to stay whole, move the work behind these members into collaborator types, so what is left here is a forward per member rather than a responsibility per member."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/listing/StubListing.java"},"region":{"startLine":39}}}],"partialFingerprints":{"codehealthFindingId/v1":"22e3879859575750783f6f2fa3a0cc70bcd92f0a26f6a140140f3d547be4ccef"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: data/GhidraFileData.java: FileTooLong \u2014 1410 significant lines (blank, comment-only and punctuation-only lines excluded), about 97% of them inside a single declaration: GhidraFileData (57-2734). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Project/src/main/java/ghidra/framework/data/GhidraFileData.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"6efe48ecabc21ba57f1093eb3e745efb16f333b4b5e79b8b5bded8408878c676"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: filechooser/GhidraFileChooser.java: FileTooLong \u2014 1409 significant lines (blank, comment-only and punctuation-only lines excluded), about 97% of them inside a single declaration: GhidraFileChooser (83-2578). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Docking/src/main/java/docking/widgets/filechooser/GhidraFileChooser.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"743eea299b7c9c0bda248756d8c344abec2013a000e9abc8f7c8e6dad556ea60"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: ReferenceDBManager: TooManyMethods \u2014 84 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/references/ReferenceDBManager.java"},"region":{"startLine":46}}}],"partialFingerprints":{"codehealthFindingId/v1":"6fe71dbf29e33700933a1d3b57f8922107c270403da3f46ebdd876d4f75c8b6d"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: fieldpanel/FieldPanel.java: FileTooLong \u2014 1382 significant lines (blank, comment-only and punctuation-only lines excluded), about 98% of them inside a single declaration: FieldPanel (48-2537). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Docking/src/main/java/docking/widgets/fieldpanel/FieldPanel.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"9a79d02989025ab769b5c9174f74f6980eaa969d46d0ec89328250df59a7fb48"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: DirectedGraph: TooManyMethods \u2014 82 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Generic/src/main/java/ghidra/util/graph/DirectedGraph.java"},"region":{"startLine":42}}}],"partialFingerprints":{"codehealthFindingId/v1":"f85151fcac2ffa9e8ae0a4d08c00664acecb4ee9adadb4466a08131feca57961"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: Table: TooManyMethods \u2014 81 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/DB/src/main/java/db/Table.java"},"region":{"startLine":32}}}],"partialFingerprints":{"codehealthFindingId/v1":"f5ea90237f0d770e4ba721a7c9d0261d29ece2bb6c44c65d7d8982059f1fea00"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: GraphDisplayOptions: TooManyMethods \u2014 81 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Graph/src/main/java/ghidra/service/graph/GraphDisplayOptions.java"},"region":{"startLine":40}}}],"partialFingerprints":{"codehealthFindingId/v1":"7cd92e6b8b09ec2a8efe2d7cfdf67cdbcc3c038a8d9c9a6e276a6d7a37b81c3c"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: SleighLanguage: TooManyMethods \u2014 81 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/processors/sleigh/SleighLanguage.java"},"region":{"startLine":58}}}],"partialFingerprints":{"codehealthFindingId/v1":"c6191784fa4191d730559eb1e38a027e2ea993564a172f6bbc89e4b1abad48ca"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: ComponentProvider: TooManyMethods \u2014 80 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Docking/src/main/java/docking/ComponentProvider.java"},"region":{"startLine":75}}}],"partialFingerprints":{"codehealthFindingId/v1":"a39717f4dcc4cfd63a98d83c17e7eb10ecdee7de552968853c07ba0e5ee53fd5"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: GProperties: TooManyMethods \u2014 80 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Generic/src/main/java/ghidra/framework/options/GProperties.java"},"region":{"startLine":73}}}],"partialFingerprints":{"codehealthFindingId/v1":"119a118dc87b44b24050a1a28c5d83a5537473fec50174388d556072087d5561"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: GhidraFile: TooManyMethods \u2014 80 methods. Most of these members implement model.DomainFile (61 of 78 members), so moving them onto a smaller type would remove them from that contract rather than reduce it. To reduce it, split the contract instead: give each cohesive group of operations its own smaller interface and its own implementing type. Where the contract has to stay whole, move the work behind these members into collaborator types, so what is left here is a forward per member rather than a responsibility per member."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Project/src/main/java/ghidra/framework/data/GhidraFile.java"},"region":{"startLine":33}}}],"partialFingerprints":{"codehealthFindingId/v1":"ecb7de07d835573d209b78493bfd07d4fe02b0599acad1ba4d91580d648b07ef"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: BufferMgr: TooManyMethods \u2014 79 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/DB/src/main/java/db/buffers/BufferMgr.java"},"region":{"startLine":36}}}],"partialFingerprints":{"codehealthFindingId/v1":"0f3e2a2e0e613a55f4305ba108da734ee5d8b212d83404a60c703153bb0adb99"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: mem/MemoryMapDB.java: FileTooLong \u2014 1302 significant lines (blank, comment-only and punctuation-only lines excluded), about 98% of them inside a single declaration: MemoryMapDB (44-2161). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/mem/MemoryMapDB.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"9ac12e0246c69ab82a2e58e83f912da302883a3a3e6b20e72750ab5a76d2af09"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: StubMemory: TooManyMethods \u2014 78 methods. Most of these members implement mem.Memory (38 of 53 members), so moving them onto a smaller type would remove them from that contract rather than reduce it. To reduce it, split the contract instead: give each cohesive group of operations its own smaller interface and its own implementing type. Where the contract has to stay whole, move the work behind these members into collaborator types, so what is left here is a forward per member rather than a responsibility per member."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/mem/StubMemory.java"},"region":{"startLine":34}}}],"partialFingerprints":{"codehealthFindingId/v1":"6875c2377350ac55f8405801483c519368d22a771ff7e45db9c61d20efff39b6"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: gui/DebuggerResources.java: FileTooLong \u2014 1281 significant lines (blank, comment-only and punctuation-only lines excluded), about 97% of them inside a single declaration: DebuggerResources (61-1829). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/gui/DebuggerResources.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"0335753ceb083a7db58fdd58d26d8481f0adfa04ada2d630a78c4942149508b1"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: slgh_compile/SleighCompile.java: FileTooLong \u2014 1276 significant lines (blank, comment-only and punctuation-only lines excluded), about 98% of them inside a single declaration: SleighCompile (52-1924). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slgh_compile/SleighCompile.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"e930b389f0d4b904fd06c6adb1df6a967af04b5cf6e9190607eca8d0e16c5d0c"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: EmptyVTSession: TooManyMethods \u2014 76 methods. Most of these members implement model.DomainObject (57 of 74 members), so moving them onto a smaller type would remove them from that contract rather than reduce it. To reduce it, split the contract instead: give each cohesive group of operations its own smaller interface and its own implementing type. Where the contract has to stay whole, move the work behind these members into collaborator types, so what is left here is a forward per member rather than a responsibility per member."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/VersionTracking/src/main/java/ghidra/feature/vt/api/util/EmptyVTSession.java"},"region":{"startLine":33}}}],"partialFingerprints":{"codehealthFindingId/v1":"990c1ac670372bfc9e47a33a04cdf51b4190e13abbbdabbafee24917d38021f5"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: SwitchGraphics2D: TooManyMethods \u2014 76 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Docking/src/main/java/docking/menu/DockingMenuItemUI.java"},"region":{"startLine":239}}}],"partialFingerprints":{"codehealthFindingId/v1":"17bfe55e3d6587754bf15444a3e2478a727fbd71f50f68d69324935b21c0a82b"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: DomainFileProxy: TooManyMethods \u2014 76 methods. Most of these members implement model.DomainFile (61 of 72 members), so moving them onto a smaller type would remove them from that contract rather than reduce it. To reduce it, split the contract instead: give each cohesive group of operations its own smaller interface and its own implementing type. Where the contract has to stay whole, move the work behind these members into collaborator types, so what is left here is a forward per member rather than a responsibility per member."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Project/src/main/java/ghidra/framework/data/DomainFileProxy.java"},"region":{"startLine":44}}}],"partialFingerprints":{"codehealthFindingId/v1":"e283df74e7da1ec61b138cfd8454c1f93966c62cdadbb54ede2b1efb5a163abc"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: TraceRmiTarget: TooManyMethods \u2014 75 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/Debugger-rmi-trace/src/main/java/ghidra/app/plugin/core/debug/service/tracermi/TraceRmiTarget.java"},"region":{"startLine":70}}}],"partialFingerprints":{"codehealthFindingId/v1":"a4f5bf098cfed47c3d3bc29ba22931ff4e19ded5f4403449c0a531ae77221a2b"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: DefaultGraphDisplay: TooManyMethods \u2014 75 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/GraphServices/src/main/java/ghidra/graph/visualization/DefaultGraphDisplay.java"},"region":{"startLine":72}}}],"partialFingerprints":{"codehealthFindingId/v1":"d83ef7f7d37da8d064794d49708eb2dd84298a00c326fbe378a7fce826ec610d"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: TextLayoutGraphics: TooManyMethods \u2014 75 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Generic/src/main/java/generic/text/TextLayoutGraphics.java"},"region":{"startLine":33}}}],"partialFingerprints":{"codehealthFindingId/v1":"e7f67a530cc5cbb501b4ac386fa01d0b9bfd250027edf73d72eeb3c8063d0539"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: DefaultProjectData: TooManyMethods \u2014 75 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Project/src/main/java/ghidra/framework/data/DefaultProjectData.java"},"region":{"startLine":43}}}],"partialFingerprints":{"codehealthFindingId/v1":"0f48d67e61e1cf487150b9a11e928601061a54dd258605e2b52104146fde8e9a"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: StructureDB: TooManyMethods \u2014 75 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/StructureDB.java"},"region":{"startLine":37}}}],"partialFingerprints":{"codehealthFindingId/v1":"180de7b6eb25f8738d188fd6316aa49c7544186f47d38cd93948d2a4a8a02108"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: client/AbstractSQLFunctionDatabase.java: FileTooLong \u2014 1247 significant lines (blank, comment-only and punctuation-only lines excluded), about 99% of them inside a single declaration: AbstractSQLFunctionDatabase (46-2407). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/BSim/src/main/java/ghidra/features/bsim/query/client/AbstractSQLFunctionDatabase.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"e195af7380656b3346afcab4fac118fa306a9917a9c57f3282077abc776ec610"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: DebuggerModulesProvider: TooManyMethods \u2014 74 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/gui/modules/DebuggerModulesProvider.java"},"region":{"startLine":74}}}],"partialFingerprints":{"codehealthFindingId/v1":"bfd7b70c472fba1e26486409d8a03805c7070be47ff9a4eddadfcc17fb8cb8fa"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: gnu/GnuDemanglerParser.java: FileTooLong \u2014 1222 significant lines (blank, comment-only and punctuation-only lines excluded). To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/GnuDemangler/src/main/java/ghidra/app/util/demangler/gnu/GnuDemanglerParser.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"e6521fc1bc65c6542e1dfbfb17902935d6d2014077118f0bec3fd73a3b1267ea"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: references/ReferenceDBManager.java: FileTooLong \u2014 1204 significant lines (blank, comment-only and punctuation-only lines excluded), about 98% of them inside a single declaration: ReferenceDBManager (46-2032). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/references/ReferenceDBManager.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"7e5a1c75db14f9923b30906c58a2d6fb514a2f753d7b2f16788646341e69005e"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: tracermi/TraceRmiTarget.java: FileTooLong \u2014 1201 significant lines (blank, comment-only and punctuation-only lines excluded), about 96% of them inside a single declaration: TraceRmiTarget (70-1739). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/Debugger-rmi-trace/src/main/java/ghidra/app/plugin/core/debug/service/tracermi/TraceRmiTarget.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"d82954aee42c96f3572bba61d120eaa84c73633da720a78adda495a8c59a862e"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: DecompilerProvider: TooManyMethods \u2014 72 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/Decompiler/src/main/java/ghidra/app/plugin/core/decompile/DecompilerProvider.java"},"region":{"startLine":62}}}],"partialFingerprints":{"codehealthFindingId/v1":"58c81db6638b221114bd5d206db5a3201a457f87faef3e543ad94b52d88a872c"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: DBHandle: TooManyMethods \u2014 72 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/DB/src/main/java/db/DBHandle.java"},"region":{"startLine":34}}}],"partialFingerprints":{"codehealthFindingId/v1":"189ea1ab8b90ed9337c3607717f12f129b619f19f0e02375ac817d679d2ab7b6"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: ThreadedTableModel: TooManyMethods \u2014 72 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Docking/src/main/java/docking/widgets/table/threaded/ThreadedTableModel.java"},"region":{"startLine":53}}}],"partialFingerprints":{"codehealthFindingId/v1":"699efb36f2cebf5a431907d13c15c35b9c7b976b6f2ada9b8853fc2c280b434e"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: diff/ProgramDiffPlugin.java: FileTooLong \u2014 1186 significant lines (blank, comment-only and punctuation-only lines excluded), about 95% of them inside a single declaration: ProgramDiffPlugin (93-1906). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/ProgramDiff/src/main/java/ghidra/app/plugin/core/diff/ProgramDiffPlugin.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"f4ee7ba1d652ce416c40f0b02c08097bacdd5148124c168b952039d15ad4f2fc"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: CodeUnitDB: TooManyMethods \u2014 71 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/code/CodeUnitDB.java"},"region":{"startLine":47}}}],"partialFingerprints":{"codehealthFindingId/v1":"a1769665c7ea41053859babaf7ce77e8c6a5073288980df37b41560e64004b93"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: AddressSet: TooManyMethods \u2014 71 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/address/AddressSet.java"},"region":{"startLine":30}}}],"partialFingerprints":{"codehealthFindingId/v1":"919f1e715c69e47a15ef6af4485f8f11e9cd2bf89ac851fc6476894e7e8adc7a"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: jpda/JdiMethods.java: FileTooLong \u2014 1169 significant lines (blank, comment-only and punctuation-only lines excluded), about 99% of them inside a single declaration: JdiMethods (34-1646). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/Debugger-jpda/src/main/java/ghidra/dbg/jdi/rmi/jpda/JdiMethods.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"0f980a4906c7cfbb22960fbd05437dd4e9d70e6e2b1b587236671e73fac8b50e"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: ProgramByteViewerComponentProvider: TooManyMethods \u2014 70 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/ByteViewer/src/main/java/ghidra/app/plugin/core/byteviewer/ProgramByteViewerComponentProvider.java"},"region":{"startLine":53}}}],"partialFingerprints":{"codehealthFindingId/v1":"60c7d529b37452fcb0eb78fca45d7ac8a9b66fb4a93f66c2f45233b916b6cd5a"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: LinkedGhidraFile: TooManyMethods \u2014 70 methods. Most of these members implement model.DomainFile (61 of 68 members), so moving them onto a smaller type would remove them from that contract rather than reduce it. To reduce it, split the contract instead: give each cohesive group of operations its own smaller interface and its own implementing type. Where the contract has to stay whole, move the work behind these members into collaborator types, so what is left here is a forward per member rather than a responsibility per member."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Project/src/main/java/ghidra/framework/data/LinkedGhidraFile.java"},"region":{"startLine":39}}}],"partialFingerprints":{"codehealthFindingId/v1":"39e8c8ac01cca490fb1e1bb87680a48970c68af739253994ad2e589b0a28e6e5"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: StructureDataType: TooManyMethods \u2014 70 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/StructureDataType.java"},"region":{"startLine":33}}}],"partialFingerprints":{"codehealthFindingId/v1":"5865171b90b48826a181ce96093699ec8f6eb686c9fb84a7ee76f6d0cd813220"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: pagedump/KdDebuggerData.java: FileTooLong \u2014 1155 significant lines (blank, comment-only and punctuation-only lines excluded), about 100% of them inside a single declaration: KdDebuggerData (24-2279). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/dump/pagedump/KdDebuggerData.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"75f166e5885d89a21f776be9d6c35adea9245b69aa813bfd3bc8086b16117758"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: DropDownTextField: TooManyMethods \u2014 69 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Docking/src/main/java/docking/widgets/DropDownTextField.java"},"region":{"startLine":71}}}],"partialFingerprints":{"codehealthFindingId/v1":"99dc0e315df93f765cb2b4fdbec643e9c148d1d38a9e3e6eb26fe61e28565d6a"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: SubOptions: TooManyMethods \u2014 69 methods. Most of these members implement options.Options (61 of 66 members), so moving them onto a smaller type would remove them from that contract rather than reduce it. To reduce it, split the contract instead: give each cohesive group of operations its own smaller interface and its own implementing type. Where the contract has to stay whole, move the work behind these members into collaborator types, so what is left here is a forward per member rather than a responsibility per member."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Gui/src/main/java/ghidra/framework/options/SubOptions.java"},"region":{"startLine":29}}}],"partialFingerprints":{"codehealthFindingId/v1":"a2ac8071121205818c5f4846b4d0847650a61bffa876c18dbbc7b63112094409"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: StringDataInstance: TooManyMethods \u2014 69 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/StringDataInstance.java"},"region":{"startLine":47}}}],"partialFingerprints":{"codehealthFindingId/v1":"f7734ba6f2dc376d008263dc7304edcda52b907e6313e0e7f4e91d5361a5d5b1"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: docking/DockingWindowManager.java: FileTooLong \u2014 1136 significant lines (blank, comment-only and punctuation-only lines excluded), about 97% of them inside a single declaration: DockingWindowManager (63-2663). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Docking/src/main/java/docking/DockingWindowManager.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"9b203b3654c36fecc06dcf383eae25cfa503e951bd2c0b3e1d103c18b3ac60ab"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: DBTraceObjectManager: TooManyMethods \u2014 68 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/target/DBTraceObjectManager.java"},"region":{"startLine":66}}}],"partialFingerprints":{"codehealthFindingId/v1":"d05db896ca403b061568be57a25c608be59c5f71da03f20aefc28ee80f07985a"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: PagedumpFileHeader: TooManyMethods \u2014 68 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/dump/pagedump/PagedumpFileHeader.java"},"region":{"startLine":27}}}],"partialFingerprints":{"codehealthFindingId/v1":"0b157767055e6e02fdb7ecb26918ddc1298f40344948cad078ce1c5770753a32"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: AbstractFunctionGraphVertex: TooManyMethods \u2014 68 methods. Most of these members implement vertex.FGVertex (45 of 67 members), so moving them onto a smaller type would remove them from that contract rather than reduce it. To reduce it, split the contract instead: give each cohesive group of operations its own smaller interface and its own implementing type. Where the contract has to stay whole, move the work behind these members into collaborator types, so what is left here is a forward per member rather than a responsibility per member."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/FunctionGraph/src/main/java/ghidra/app/plugin/core/functiongraph/graph/vertex/AbstractFunctionGraphVertex.java"},"region":{"startLine":38}}}],"partialFingerprints":{"codehealthFindingId/v1":"2eeaeb56ed66f91c854aa66968ec06cf21e4131848a7619186a08dffd6115092"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: pdbapplicator/DefaultPdbApplicator.java: FileTooLong \u2014 1128 significant lines (blank, comment-only and punctuation-only lines excluded). To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/PDB/src/main/java/ghidra/app/util/pdb/pdbapplicator/DefaultPdbApplicator.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"b0b15eacff7068d9b02d7c9abdf1d39d69c1b38cc191f73c4d7756ee1c80e67a"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: PdbPrimitiveTypeApplicator: TooManyMethods \u2014 67 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/PDB/src/main/java/ghidra/app/util/pdb/pdbapplicator/PdbPrimitiveTypeApplicator.java"},"region":{"startLine":31}}}],"partialFingerprints":{"codehealthFindingId/v1":"2c4fdb03fc6de350032a662fec33d41d1dff7dff066edb1d5f2b6a0b84157a1d"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: GraphComponent: TooManyMethods \u2014 67 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Graph/src/main/java/ghidra/graph/viewer/GraphComponent.java"},"region":{"startLine":85}}}],"partialFingerprints":{"codehealthFindingId/v1":"dbfc103293a13e74a32a22548b5115b5d6b208c2835ea517315a23cc2ba45070"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: PseudoCodeUnit: TooManyMethods \u2014 67 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/util/PseudoCodeUnit.java"},"region":{"startLine":30}}}],"partialFingerprints":{"codehealthFindingId/v1":"abc7defc552deb7c314ac1f3826ed50ab834cbaacc9b21e4fed5b18cda1fb2eb"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: MemoryBlockDB: TooManyMethods \u2014 67 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/mem/MemoryBlockDB.java"},"region":{"startLine":34}}}],"partialFingerprints":{"codehealthFindingId/v1":"8da365faa3d877ca5de8994306a4ec81ab50e6b512b844c9ea91fc318a7b96a3"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: data/StructureDataType.java: FileTooLong \u2014 1104 significant lines (blank, comment-only and punctuation-only lines excluded), about 99% of them inside a single declaration: StructureDataType (33-1958). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/StructureDataType.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"3ce0deb6b2d580127f4ba3ff51c869ccbf77054213f4d908e617031196e7ac5e"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: AbstractDBTraceProgramViewMemory: TooManyMethods \u2014 66 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/program/AbstractDBTraceProgramViewMemory.java"},"region":{"startLine":38}}}],"partialFingerprints":{"codehealthFindingId/v1":"a75223253678537d9db59497ecea370c3c3b3c838e1baf58e29e439bc13c9175"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: CompositeDB: TooManyMethods \u2014 66 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/CompositeDB.java"},"region":{"startLine":36}}}],"partialFingerprints":{"codehealthFindingId/v1":"df81a86067fd69b16f4512c87bf935367cb1672d648d8520588ce7b3b92b01c9"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: DataTypeDB: TooManyMethods \u2014 66 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/DataTypeDB.java"},"region":{"startLine":36}}}],"partialFingerprints":{"codehealthFindingId/v1":"43b013bae078c8d19af043aa73ec4f85eaccd5c8d00c77b7bba0ca6b2dfb52b6"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: sleigh/SleighInstructionPrototype.java: FileTooLong \u2014 1085 significant lines (blank, comment-only and punctuation-only lines excluded), about 98% of them inside a single declaration: SleighInstructionPrototype (44-1634). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/processors/sleigh/SleighInstructionPrototype.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"9a0a808cf9d25ec451ab8f54a2e231bbcc4b5c40fb7516c5335335dac81494e0"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: GBinaryReader: TooManyMethods \u2014 65 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"GPL/DMG/src/dmg/java/mobiledevices/dmg/ghidra/GBinaryReader.java"},"region":{"startLine":14}}}],"partialFingerprints":{"codehealthFindingId/v1":"b021af667047702dee59b27e3b6287f0473e234b5a3397c70f23291f6f97ffe9"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: DebuggerCoordinates: TooManyMethods \u2014 65 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/Debugger-api/src/main/java/ghidra/debug/api/tracemgr/DebuggerCoordinates.java"},"region":{"startLine":49}}}],"partialFingerprints":{"codehealthFindingId/v1":"9fbf1fb2c5b1d0eb06320be63751fa05205103979da11447690e46cf1f708b57"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: GTabPanel: TooManyMethods \u2014 65 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Docking/src/main/java/docking/widgets/tab/GTabPanel.java"},"region":{"startLine":52}}}],"partialFingerprints":{"codehealthFindingId/v1":"92628f75861e0af43fe0e63b5489cfdd785cd840744f4de2506957411c91f273"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: Application: TooManyMethods \u2014 65 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Generic/src/main/java/ghidra/framework/Application.java"},"region":{"startLine":50}}}],"partialFingerprints":{"codehealthFindingId/v1":"391e4118eec3c7a7c94f6fd4321a1a3228cf5fc73f4246805bd81f903da2d1a6"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: DataDB: TooManyMethods \u2014 65 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/code/DataDB.java"},"region":{"startLine":47}}}],"partialFingerprints":{"codehealthFindingId/v1":"d4680e885694c4de19d5d0b31480e35be34319f22cd5e6cb25c02dccdfefc57c"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: DebuggerRegistersProvider: TooManyMethods \u2014 64 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/gui/register/DebuggerRegistersProvider.java"},"region":{"startLine":86}}}],"partialFingerprints":{"codehealthFindingId/v1":"36abfbfcd1a798d6f460ceaa801496f0d525dda7f85471aceaa96f95e889025e"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: ByteViewerPanel: TooManyMethods \u2014 64 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/ByteViewer/src/main/java/ghidra/app/plugin/core/byteviewer/ByteViewerPanel.java"},"region":{"startLine":50}}}],"partialFingerprints":{"codehealthFindingId/v1":"d79fbcf8e426f696df0e55022358d9d6f6f4567e702bba37483aa50313407d5f"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: MDMang: TooManyMethods \u2014 64 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/MicrosoftDmang/src/main/java/mdemangler/MDMang.java"},"region":{"startLine":40}}}],"partialFingerprints":{"codehealthFindingId/v1":"5325aaab9b32dd801eff7b9cd4fadae9d7a74dcdf94ab9dd2c3c6a0850d6b58a"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: OldLanguage: TooManyMethods \u2014 64 methods. Most of these members implement lang.Language (43 of 59 members), so moving them onto a smaller type would remove them from that contract rather than reduce it. To reduce it, split the contract instead: give each cohesive group of operations its own smaller interface and its own implementing type. Where the contract has to stay whole, move the work behind these members into collaborator types, so what is left here is a forward per member rather than a responsibility per member."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/util/OldLanguage.java"},"region":{"startLine":37}}}],"partialFingerprints":{"codehealthFindingId/v1":"69eed13a9034c70ae901081a656ca32abb27b0afe44f98db9b34944e08117c72"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: DefaultAssemblyResolvedPatterns: TooManyMethods \u2014 63 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/assembler/sleigh/sem/DefaultAssemblyResolvedPatterns.java"},"region":{"startLine":52}}}],"partialFingerprints":{"codehealthFindingId/v1":"1913c4ab316341b60ef8c038d0d6e6033b4ec0eaa5d15b7f59cbbcd7139801fb"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: SleighInstructionPrototype: TooManyMethods \u2014 63 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/processors/sleigh/SleighInstructionPrototype.java"},"region":{"startLine":44}}}],"partialFingerprints":{"codehealthFindingId/v1":"07695673627a88808f85c9d5aaa0f9d07d3b45f2f81464b34e1b670d6f4aab89"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: InstructionDB: TooManyMethods \u2014 63 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/code/InstructionDB.java"},"region":{"startLine":39}}}],"partialFingerprints":{"codehealthFindingId/v1":"e03ae3e21a3ce73a4813d20b4c9f7070082d81b224963c70bf7ac6d3b3cda855"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: FcgProvider: TooManyMethods \u2014 62 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/GraphFunctionCalls/src/main/java/functioncalls/plugin/FcgProvider.java"},"region":{"startLine":65}}}],"partialFingerprints":{"codehealthFindingId/v1":"90eb0ef195f0864c59d471b03596d1dded81d0fa158dc04adc91db9f76d785ce"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: GhidraFolderData: TooManyMethods \u2014 62 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Project/src/main/java/ghidra/framework/data/GhidraFolderData.java"},"region":{"startLine":46}}}],"partialFingerprints":{"codehealthFindingId/v1":"e4adede6d76b66a407b445f016e14979e44ad24107f6261c31c243eeb472e8b5"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: PseudoInstruction: TooManyMethods \u2014 62 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/util/PseudoInstruction.java"},"region":{"startLine":45}}}],"partialFingerprints":{"codehealthFindingId/v1":"529f836b5996dc096ccb114d380c80f7dbf33f57ad9cc27cf78398274fe7442f"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: modules/DebuggerModulesProvider.java: FileTooLong \u2014 1029 significant lines (blank, comment-only and punctuation-only lines excluded), about 95% of them inside a single declaration: DebuggerModulesProvider (74-1480). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/gui/modules/DebuggerModulesProvider.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"d42fb30ed5d9df3ae8102c5ddae3d1ba36d102c8ad0bb6ac2b8cdf2ce3e12543"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: sleigh/SleighLanguage.java: FileTooLong \u2014 1023 significant lines (blank, comment-only and punctuation-only lines excluded), about 96% of them inside a single declaration: SleighLanguage (58-1523). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/processors/sleigh/SleighLanguage.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"a1d25e2634447b1b4e62fe541d38f0dc5efd78cdda94719b3cf71ac9124c0f3e"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: local/IndexedLocalFileSystem.java: FileTooLong \u2014 1021 significant lines (blank, comment-only and punctuation-only lines excluded), about 99% of them inside a single declaration: IndexedLocalFileSystem (35-1827). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/FileSystem/src/main/java/ghidra/framework/store/local/IndexedLocalFileSystem.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"7006d387c4f8ee4353dd0064a416d0b0a569a73317a516e861a4d1f2d617ebce"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: TriageDump: TooManyMethods \u2014 61 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/dump/pagedump/TriageDump.java"},"region":{"startLine":24}}}],"partialFingerprints":{"codehealthFindingId/v1":"4e5862836b7bab7a4baf2a59f8da34322fd9e2e805392742b6cd866c3aa6bf73"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: GraphViewerUtils: TooManyMethods \u2014 61 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Graph/src/main/java/ghidra/graph/viewer/GraphViewerUtils.java"},"region":{"startLine":62}}}],"partialFingerprints":{"codehealthFindingId/v1":"1f3d86fa1603eee2cab093d96e3a4b499797db9d81df783838615a0036aae0a5"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: breakpoint/DebuggerBreakpointsProvider.java: FileTooLong \u2014 1004 significant lines (blank, comment-only and punctuation-only lines excluded), about 95% of them inside a single declaration: DebuggerBreakpointsProvider (66-1510). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/gui/breakpoint/DebuggerBreakpointsProvider.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"a4e2858e2639507a19a6b59b52e496650ef1615ea31226e49efadc5fa11d81b7"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: DBTraceProgramViewSymbolTable: TooManyMethods \u2014 60 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/program/DBTraceProgramViewSymbolTable.java"},"region":{"startLine":32}}}],"partialFingerprints":{"codehealthFindingId/v1":"73f6e5d7c65ef17ffd46f54c9e8dbb7cb1d651185bb8e02a1217015fa402eb44"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: SymValueZ3: TooManyMethods \u2014 60 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Extensions/SymbolicSummaryZ3/src/main/java/ghidra/symz3/model/SymValueZ3.java"},"region":{"startLine":52}}}],"partialFingerprints":{"codehealthFindingId/v1":"f78fbf5f45ee77ea092c75ace4f41abd49858a37bd8c2a466daf7f82b34488b1"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: MDCVMod: TooManyMethods \u2014 60 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/MicrosoftDmang/src/main/java/mdemangler/datatype/modifier/MDCVMod.java"},"region":{"startLine":27}}}],"partialFingerprints":{"codehealthFindingId/v1":"9765b119da00699088414a0bc386bd37230b0fae05b825c432095da066810e1e"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: ThemeManager: TooManyMethods \u2014 60 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Gui/src/main/java/generic/theme/ThemeManager.java"},"region":{"startLine":58}}}],"partialFingerprints":{"codehealthFindingId/v1":"0a229d7e87635307c043f9b0a50f5be48233ab1f168422536719e3ae0f746c9b"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: MaskedLong: TooManyMethods \u2014 60 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/assembler/sleigh/expr/MaskedLong.java"},"region":{"startLine":24}}}],"partialFingerprints":{"codehealthFindingId/v1":"71ab3ef5ceea802483ff020d2641a9b3e10901caf294bab13625903555fe616e"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: EnumDB: TooManyMethods \u2014 60 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/EnumDB.java"},"region":{"startLine":43}}}],"partialFingerprints":{"codehealthFindingId/v1":"fcd586fe7de2a1c2943c60e7344219b8884d859818d8c93b65fd85cb7b85b51e"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: FunctionManagerDB: TooManyMethods \u2014 60 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/function/FunctionManagerDB.java"},"region":{"startLine":56}}}],"partialFingerprints":{"codehealthFindingId/v1":"fe06052824acdc0e9918330d10fa187d9c02ab765fd2c9f4a3680f1cbf1f982c"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: FileUtilities: TooManyMethods \u2014 60 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Utility/src/main/java/utilities/util/FileUtilities.java"},"region":{"startLine":36}}}],"partialFingerprints":{"codehealthFindingId/v1":"99ad900cdaec01ec3db5df1a16d0424e4faaffe5ce69c63e3e22d342bd63f601"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: function/FunctionDB.java: FileTooLong \u2014 999 significant lines (blank, comment-only and punctuation-only lines excluded), about 98% of them inside a single declaration: FunctionDB (49-1654). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/function/FunctionDB.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"1e423caf570a14f3f3f2603b48c2bd17efaee73bce8eab5d8bdedc15057572af"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: DebuggerListingProvider: TooManyMethods \u2014 59 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/gui/listing/DebuggerListingProvider.java"},"region":{"startLine":94}}}],"partialFingerprints":{"codehealthFindingId/v1":"f373645abfd1bb45f1aa13a20c92abebe9cf5893babeb431020bab56a12e4591"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: EventTranslator: TooManyMethods \u2014 59 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/program/DBTraceProgramView.java"},"region":{"startLine":85}}}],"partialFingerprints":{"codehealthFindingId/v1":"0965193df9ef99c16954c15b9656b482be81f5d49a97b5a7dd6c3cd694059148"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: VTControllerImpl: TooManyMethods \u2014 59 methods. Most of these members implement plugin.VTController (38 of 55 members), so moving them onto a smaller type would remove them from that contract rather than reduce it. To reduce it, split the contract instead: give each cohesive group of operations its own smaller interface and its own implementing type. Where the contract has to stay whole, move the work behind these members into collaborator types, so what is left here is a forward per member rather than a responsibility per member."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/VersionTracking/src/main/java/ghidra/feature/vt/gui/plugin/VTControllerImpl.java"},"region":{"startLine":59}}}],"partialFingerprints":{"codehealthFindingId/v1":"27fa8984a7c5b561cbadef3b7df9a3563e76a2e41ae96a753195768f60104dac"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: ComponentPlaceholder: TooManyMethods \u2014 59 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Docking/src/main/java/docking/ComponentPlaceholder.java"},"region":{"startLine":43}}}],"partialFingerprints":{"codehealthFindingId/v1":"caec51d63ab9f866f5389555cc3628a12515ce40d8e2270ba4d5400db030cadf"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: DockingAction: TooManyMethods \u2014 59 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Docking/src/main/java/docking/action/DockingAction.java"},"region":{"startLine":64}}}],"partialFingerprints":{"codehealthFindingId/v1":"5125e3c0d8a5ca5f076886d894768eb27ad17f951cd1556130f1a995ebc40256"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: VisualGraphView: TooManyMethods \u2014 59 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Graph/src/main/java/ghidra/graph/viewer/VisualGraphView.java"},"region":{"startLine":66}}}],"partialFingerprints":{"codehealthFindingId/v1":"2cf1b0184725eeaf4fc15a1539a7f57517ef721631ef1f9853fccaa3e49c8834"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: DomainObjectAdapterDB: TooManyMethods \u2014 59 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Project/src/main/java/ghidra/framework/data/DomainObjectAdapterDB.java"},"region":{"startLine":42}}}],"partialFingerprints":{"codehealthFindingId/v1":"1dd4592cbd982a67a7701a036fc868922335dd5038671b86fab6a5703c9302fe"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: PseudoData: TooManyMethods \u2014 59 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/util/PseudoData.java"},"region":{"startLine":37}}}],"partialFingerprints":{"codehealthFindingId/v1":"3f7b2b841d6befe3cdb0e8b570b253f78c589890a07c28cdba454ba5559e6685"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: BigFloat: TooManyMethods \u2014 59 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcode/floatformat/BigFloat.java"},"region":{"startLine":35}}}],"partialFingerprints":{"codehealthFindingId/v1":"f3518708bc946b3e286e7ce55c959c10644dcc01942367f51efd59a95e685981"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: PcodeCompile: TooManyMethods \u2014 59 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slgh_compile/PcodeCompile.java"},"region":{"startLine":37}}}],"partialFingerprints":{"codehealthFindingId/v1":"7fb32cea4d9782de100804f8ab4e4838146e0f0fdfd5e1c0ba81bb35bc8f007c"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: FunctionDefinitionDB: TooManyMethods \u2014 59 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/FunctionDefinitionDB.java"},"region":{"startLine":38}}}],"partialFingerprints":{"codehealthFindingId/v1":"93b05132dd7118724b9db300b188a72cabb3e512c35edb54169eaf03f3e69d75"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: VisualGraphPathHighlighter: TooManyMethods \u2014 58 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Graph/src/main/java/ghidra/graph/viewer/edge/VisualGraphPathHighlighter.java"},"region":{"startLine":78}}}],"partialFingerprints":{"codehealthFindingId/v1":"3d4cc1e0174d9f87deafe50b848eedf9d7fccefebf458fba9d682e8adbf63c59"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: AbstractAddressSpace: TooManyMethods \u2014 58 methods. Most of these members implement address.AddressSpace (40 of 53 members), so moving them onto a smaller type would remove them from that contract rather than reduce it. To reduce it, split the contract instead: give each cohesive group of operations its own smaller interface and its own implementing type. Where the contract has to stay whole, move the work behind these members into collaborator types, so what is left here is a forward per member rather than a responsibility per member."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/address/AbstractAddressSpace.java"},"region":{"startLine":23}}}],"partialFingerprints":{"codehealthFindingId/v1":"338e8f9f86858edce5a2d1fdb92c134dda8e7bf532c30fde6538fc8c5ba19b5e"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: program/DBTraceProgramView.java: FileTooLong \u2014 966 significant lines (blank, comment-only and punctuation-only lines excluded), about 95% of them inside a single declaration: DBTraceProgramView (81-1568). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/program/DBTraceProgramView.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"67b9a41980790e4863855729d3c71b7e1fd3aaa22b142b77b1ab9bf95b1e3432"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: slgh_compile/ConsistencyChecker.java: FileTooLong \u2014 961 significant lines (blank, comment-only and punctuation-only lines excluded), about 99% of them inside a single declaration: ConsistencyChecker (32-1395). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slgh_compile/ConsistencyChecker.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"62257816291374b6385cad414ff097b6eeb704392bc76bf934a0644beb926312"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: buffers/BufferMgr.java: FileTooLong \u2014 954 significant lines (blank, comment-only and punctuation-only lines excluded), about 99% of them inside a single declaration: BufferMgr (36-2133). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/DB/src/main/java/db/buffers/BufferMgr.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"d6ad8e8380ec35c660da08344a1392e5e073d99b52d0059de49bb5e553b8f8a5"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: disassemble/Disassembler.java: FileTooLong \u2014 954 significant lines (blank, comment-only and punctuation-only lines excluded), about 97% of them inside a single declaration: Disassembler (52-1892). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/disassemble/Disassembler.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"c8310c95d7bf85b403fa5c75ff13f3c34188bb5c980456baaf9ea7dc18449088"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: DebuggerModelProvider: TooManyMethods \u2014 57 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/gui/model/DebuggerModelProvider.java"},"region":{"startLine":71}}}],"partialFingerprints":{"codehealthFindingId/v1":"a6cf5abe1c3534aaac03f74ef26b8d17ac3f4d04561b27361bd7b869b6505a0f"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: DBTraceInstruction: TooManyMethods \u2014 57 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/listing/DBTraceInstruction.java"},"region":{"startLine":56}}}],"partialFingerprints":{"codehealthFindingId/v1":"6029e2f04e1b380f8bd81f9cb41a39b14a6d60a8e5b29a252d1f4a066ab0ca71"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: FrontEndPlugin: TooManyMethods \u2014 57 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Project/src/main/java/ghidra/framework/main/FrontEndPlugin.java"},"region":{"startLine":77}}}],"partialFingerprints":{"codehealthFindingId/v1":"413f99bdade7203545bc3f6daff778aa6be4224ed57e27739268bc201ecead75"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: decompiler/DecompileOptions.java: FileTooLong \u2014 946 significant lines (blank, comment-only and punctuation-only lines excluded), about 98% of them inside a single declaration: DecompileOptions (48-1806). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/Decompiler/src/main/java/ghidra/app/decompiler/DecompileOptions.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"fd0e3793f9fa4fd22bf868bd641869f3dd46069b110ceb3c2aab90b593d277ed"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: tree/GTree.java: FileTooLong \u2014 934 significant lines (blank, comment-only and punctuation-only lines excluded). To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Docking/src/main/java/docking/widgets/tree/GTree.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"93c89fabebc119bfd4183627de6bc0221e701740fa00571544b3f7533c5bdf0a"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: MappedLogicalBreakpoint: TooManyMethods \u2014 56 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/service/breakpoint/MappedLogicalBreakpoint.java"},"region":{"startLine":34}}}],"partialFingerprints":{"codehealthFindingId/v1":"72592f17c12707475df52c378f1863ef373f5d0b12a26ebb2da85f6b5d4f8a85"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: TaintSliceTreeProvider: TooManyMethods \u2014 56 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/DecompilerDependent/src/main/java/ghidra/app/plugin/core/decompiler/taint/TaintSliceTreeProvider.java"},"region":{"startLine":59}}}],"partialFingerprints":{"codehealthFindingId/v1":"cace59b256463b1ccd2fdbc5aebc18531227f581614dee4c80dd1398dc024422"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: FunctionGraph: TooManyMethods \u2014 56 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/FunctionGraph/src/main/java/ghidra/app/plugin/core/functiongraph/graph/FunctionGraph.java"},"region":{"startLine":42}}}],"partialFingerprints":{"codehealthFindingId/v1":"77d82d308e5a32dcd81e3eb2cc6cec6233fd6ef78a8628da6bf781fb77389454"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: DataOrganizationImpl: TooManyMethods \u2014 56 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/DataOrganizationImpl.java"},"region":{"startLine":36}}}],"partialFingerprints":{"codehealthFindingId/v1":"fa16ea43369a9a798d3cc61bd2988d499e2ac5cb44d3161155693cd07d1788b2"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: query/BSimControlLaunchable.java: FileTooLong \u2014 932 significant lines (blank, comment-only and punctuation-only lines excluded), about 97% of them inside a single declaration: BSimControlLaunchable (51-1571). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/BSim/src/main/java/ghidra/features/bsim/query/BSimControlLaunchable.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"7b64d4787171988aff8bbe3512b7fdbe442f124af279476012139223b1202963"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: tracermi/TraceRmiHandler.java: FileTooLong \u2014 918 significant lines (blank, comment-only and punctuation-only lines excluded), about 94% of them inside a single declaration: TraceRmiHandler (72-1387). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/Debugger-rmi-trace/src/main/java/ghidra/app/plugin/core/debug/service/tracermi/TraceRmiHandler.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"f97e5c72e44033ff89ee6c751f133f148d5022d045dd61597c8b2318ec6a9dc8"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: RootNode: TooManyMethods \u2014 55 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Docking/src/main/java/docking/RootNode.java"},"region":{"startLine":39}}}],"partialFingerprints":{"codehealthFindingId/v1":"458f2347d1ee93aa123fa1373f9dd9c871c69259796e77feac93b23f7ef139dc"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: RepositoryAdapter: TooManyMethods \u2014 55 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/FileSystem/src/main/java/ghidra/framework/client/RepositoryAdapter.java"},"region":{"startLine":37}}}],"partialFingerprints":{"codehealthFindingId/v1":"6827d0e7a208e93da4a5dd16d7417d0bcfae5477f0ea75b4161e91b5af387390"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: register/DebuggerRegistersProvider.java: FileTooLong \u2014 915 significant lines (blank, comment-only and punctuation-only lines excluded), about 93% of them inside a single declaration: DebuggerRegistersProvider (86-1392). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/gui/register/DebuggerRegistersProvider.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"ae0a2d1ddbb871788f87c7fb758374cef7dd53362d0e3b73856c38bd57859f9e"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: tracemgr/DebuggerTraceManagerServicePlugin.java: FileTooLong \u2014 913 significant lines (blank, comment-only and punctuation-only lines excluded), about 92% of them inside a single declaration: DebuggerTraceManagerServicePlugin (95-1383). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/service/tracemgr/DebuggerTraceManagerServicePlugin.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"e10c9df19914290584a61616c8f3e63948eef9f481d9949cd4d73fb29c72da6b"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: component/DecompilerPanel.java: FileTooLong \u2014 909 significant lines (blank, comment-only and punctuation-only lines excluded), about 96% of them inside a single declaration: DecompilerPanel (61-1632). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/Decompiler/src/main/java/ghidra/app/decompiler/component/DecompilerPanel.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"af7e378e6284f7d42483d7e605966658ea732f530139ed90e866cd0bb1c47bf7"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: AccessibleField: TooManyMethods \u2014 54 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Docking/src/main/java/docking/widgets/fieldpanel/AccessibleField.java"},"region":{"startLine":33}}}],"partialFingerprints":{"codehealthFindingId/v1":"39f2e340c43947b17506c1f91005014bb307982416bee576c2597fc6112b5757"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: TypedefDB: TooManyMethods \u2014 54 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/TypedefDB.java"},"region":{"startLine":35}}}],"partialFingerprints":{"codehealthFindingId/v1":"37bf77d2ae022cf51cc1e6906e809d22005118ed55a03a0d223446ce44eb47d2"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: breakpoint/DebuggerLogicalBreakpointServicePlugin.java: FileTooLong \u2014 898 significant lines (blank, comment-only and punctuation-only lines excluded), about 94% of them inside a single declaration: DebuggerLogicalBreakpointServicePlugin (80-1425). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/service/breakpoint/DebuggerLogicalBreakpointServicePlugin.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"fccd2e518b242130003463f38b876c16663c0ad89d32566278e7c35925fbd903"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: visualization/DefaultGraphDisplay.java: FileTooLong \u2014 896 significant lines (blank, comment-only and punctuation-only lines excluded), about 95% of them inside a single declaration: DefaultGraphDisplay (72-1505). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/GraphServices/src/main/java/ghidra/graph/visualization/DefaultGraphDisplay.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"e0fdaa9036234f2befa1e7ffbdac001eab1ba87e1ec220dc1e35255a6d177256"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: DBTraceMemorySpace: TooManyMethods \u2014 53 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/memory/DBTraceMemorySpace.java"},"region":{"startLine":58}}}],"partialFingerprints":{"codehealthFindingId/v1":"75beb512c0bc14b581a7bbd5b987e8480f4ab0b54d5db41afca892e1a169843d"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: SarifProgramOptions: TooManyMethods \u2014 53 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/Sarif/src/main/java/sarif/SarifProgramOptions.java"},"region":{"startLine":29}}}],"partialFingerprints":{"codehealthFindingId/v1":"2bbe65a0f2a279ece2862d5f280140a44f17f971ed7844eff30450512ab1e9fd"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: VTSessionDB: TooManyMethods \u2014 53 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/VersionTracking/src/main/java/ghidra/feature/vt/api/db/VTSessionDB.java"},"region":{"startLine":47}}}],"partialFingerprints":{"codehealthFindingId/v1":"cc83fc542767b9f90e6b7816f514562f0e92326413e8f51ba37cc50221d1451a"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: SymbolUtilities: TooManyMethods \u2014 53 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/symbol/SymbolUtilities.java"},"region":{"startLine":33}}}],"partialFingerprints":{"codehealthFindingId/v1":"67f39ae8c87b39c1c03d36d931bd5c779c0e0a2d6c9b2389ecb1db963e311421"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: table/GTable.java: FileTooLong \u2014 883 significant lines (blank, comment-only and punctuation-only lines excluded), about 96% of them inside a single declaration: GTable (78-1762). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Docking/src/main/java/docking/widgets/table/GTable.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"fcd578a234fc900c348f951223dc44320a4662e5db9ec9c03207aa24b4d30d1e"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: layout/DecompilerNestedLayout.java: FileTooLong \u2014 873 significant lines (blank, comment-only and punctuation-only lines excluded), about 97% of them inside a single declaration: DecompilerNestedLayout (69-1661). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/FunctionGraphDecompilerExtension/src/main/java/ghidra/app/plugin/core/functiongraph/graph/layout/DecompilerNestedLayout.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"aede80603bd2a855b0d3111cf0bfb295d98f3d4d9d2955f4a830b7fa367f131c"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: AbstractDBTraceSymbol: TooManyMethods \u2014 52 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/symbol/AbstractDBTraceSymbol.java"},"region":{"startLine":52}}}],"partialFingerprints":{"codehealthFindingId/v1":"3a2b45dff8770e92e72feba4202b3cc8534bf03c69bd00e9ee7b5edba0201e2a"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: VTSubToolManager: TooManyMethods \u2014 52 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/VersionTracking/src/main/java/ghidra/feature/vt/gui/plugin/VTSubToolManager.java"},"region":{"startLine":62}}}],"partialFingerprints":{"codehealthFindingId/v1":"34eb917be93dd130dbb43ca3bc0dd11112416fc0f5b37cd1c0da0149c60bed7c"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: IndexedLocalFileSystem: TooManyMethods \u2014 52 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/FileSystem/src/main/java/ghidra/framework/store/local/IndexedLocalFileSystem.java"},"region":{"startLine":35}}}],"partialFingerprints":{"codehealthFindingId/v1":"650abe48794c9fe717d401220ecfb16d797fd6c39b05d25e1a4525a8ffa15c8d"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: LocalFileSystem: TooManyMethods \u2014 52 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/FileSystem/src/main/java/ghidra/framework/store/local/LocalFileSystem.java"},"region":{"startLine":49}}}],"partialFingerprints":{"codehealthFindingId/v1":"5aa0959f484e57ec991a9e3a8b00cadc7e68c37530db3d495bd8043e80f99b3d"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: Plugin: TooManyMethods \u2014 52 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Project/src/main/java/ghidra/framework/plugintool/Plugin.java"},"region":{"startLine":207}}}],"partialFingerprints":{"codehealthFindingId/v1":"4471d91d88b1fa9b0f01c68eafb3a83b7ca0fad156ff870157a8f8a76f8b48a0"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: VariableStorage: TooManyMethods \u2014 52 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/listing/VariableStorage.java"},"region":{"startLine":34}}}],"partialFingerprints":{"codehealthFindingId/v1":"fb271c871e37963ca27fab6b4c5972af7ca2e65a3569f4e5bd0912b388affb36"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: pcode/PcodeDataTypeManager.java: FileTooLong \u2014 854 significant lines (blank, comment-only and punctuation-only lines excluded), about 98% of them inside a single declaration: PcodeDataTypeManager (44-1449). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/pcode/PcodeDataTypeManager.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"6de4c302b8d1fc55a0575e83dd18c5581f0fdc1d8725756bd1566e5970719d7d"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: DebuggerBreakpointsProvider: TooManyMethods \u2014 51 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/gui/breakpoint/DebuggerBreakpointsProvider.java"},"region":{"startLine":66}}}],"partialFingerprints":{"codehealthFindingId/v1":"b58185a114049ba58a0d92444621d655a151ea39242ee83ab7a7bd7713a2d36c"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: DebuggerLogicalBreakpointServicePlugin: TooManyMethods \u2014 51 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/service/breakpoint/DebuggerLogicalBreakpointServicePlugin.java"},"region":{"startLine":80}}}],"partialFingerprints":{"codehealthFindingId/v1":"d3cce54da51aeb633655512a678bb9e2260024df3b3f28e4684c726660aaec35"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: AbstractDBTraceProgramViewReferenceManager: TooManyMethods \u2014 51 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/program/AbstractDBTraceProgramViewReferenceManager.java"},"region":{"startLine":42}}}],"partialFingerprints":{"codehealthFindingId/v1":"83cf9a3e2ad525bb98f6f100836ff5a627cf2127b612146d4aaa7307a1962949"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: BoundedStuff: TooManyMethods \u2014 51 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/ProposedUtils/src/main/java/ghidra/util/database/DBCachedObjectStore.java"},"region":{"startLine":85}}}],"partialFingerprints":{"codehealthFindingId/v1":"bb01f9f6afa7a7e391547a7844d147feaeb2ced64e33cc4d855b026784bf8d6b"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: Module: TooManyMethods \u2014 51 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/dump/mdmp/Module.java"},"region":{"startLine":25}}}],"partialFingerprints":{"codehealthFindingId/v1":"cf346b5af092c66fca4c8531fdd7280e322e89945ebab67cb7ec74f2300c8407"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: GnuDemanglerParser: TooManyMethods \u2014 51 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/GnuDemangler/src/main/java/ghidra/app/util/demangler/gnu/GnuDemanglerParser.java"},"region":{"startLine":52}}}],"partialFingerprints":{"codehealthFindingId/v1":"19ee81c52e560058745aed2916d6528bb34d75ac75a1c324f3fadd65dfec985f"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: FunctionSignatureStringable: TooManyMethods \u2014 51 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/VersionTracking/src/main/java/ghidra/feature/vt/api/stringable/FunctionSignatureStringable.java"},"region":{"startLine":43}}}],"partialFingerprints":{"codehealthFindingId/v1":"050e36cb69af0fe8865f37393dfe7e827d59ee5523be7d2d12fe1d326e0da062"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: GTableFilterPanel: TooManyMethods \u2014 51 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Docking/src/main/java/docking/widgets/table/GTableFilterPanel.java"},"region":{"startLine":102}}}],"partialFingerprints":{"codehealthFindingId/v1":"0c01f81a4d779118ad4465a42eee2d67baed11d37febb0c13f95c95d295ba9f1"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: StringUtilities: TooManyMethods \u2014 51 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Generic/src/main/java/ghidra/util/StringUtilities.java"},"region":{"startLine":31}}}],"partialFingerprints":{"codehealthFindingId/v1":"5ac66ef88a9216ead024f28674b2d6f14e463d4b1e30fe2ec2e494038717d8e6"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: JungToGDirectedGraphAdapter: TooManyMethods \u2014 51 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Graph/src/main/java/ghidra/graph/jung/JungToGDirectedGraphAdapter.java"},"region":{"startLine":34}}}],"partialFingerprints":{"codehealthFindingId/v1":"6f547a434c1eaf274f49ce4873301e591147e106228a863da8833005d5162459"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: decompile/DecompilerProvider.java: FileTooLong \u2014 840 significant lines (blank, comment-only and punctuation-only lines excluded), about 95% of them inside a single declaration: DecompilerProvider (62-1402). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/Decompiler/src/main/java/ghidra/app/plugin/core/decompile/DecompilerProvider.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"e780216ad80d9ccba2a9183067063990a057e73d822f501afabe1b4aae54aa6a"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: stringable/FunctionSignatureStringable.java: FileTooLong \u2014 836 significant lines (blank, comment-only and punctuation-only lines excluded), about 97% of them inside a single declaration: FunctionSignatureStringable (43-1389). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/VersionTracking/src/main/java/ghidra/feature/vt/api/stringable/FunctionSignatureStringable.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"d0ebcaf2e2a38c4e61dc555d70602ab77cc6049fb2fe0f6df7d51dd8828e8b06"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: FormatStringParser: TooManyMethods \u2014 50 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/DecompilerDependent/src/main/java/ghidra/app/plugin/core/string/variadic/FormatStringParser.java"},"region":{"startLine":44}}}],"partialFingerprints":{"codehealthFindingId/v1":"7aa2305f0e24c28b06e8af30c58cfceb2d1067db26309512eea3373828b4be21"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: ListingGraphComponentPanel: TooManyMethods \u2014 50 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/FunctionGraph/src/main/java/ghidra/app/plugin/core/functiongraph/graph/vertex/ListingGraphComponentPanel.java"},"region":{"startLine":68}}}],"partialFingerprints":{"codehealthFindingId/v1":"625ea3b2bba28b936095f78b5e44de55db0ba97824af8933fc4d995ad0e8ef06"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: LocalBufferFile: TooManyMethods \u2014 50 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/DB/src/main/java/db/buffers/LocalBufferFile.java"},"region":{"startLine":34}}}],"partialFingerprints":{"codehealthFindingId/v1":"eabf987a4356c7bcdeb1052c004fe6d79cc201b175e244dbd2a9cebf7b97d8b4"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: LocalFolderItem: TooManyMethods \u2014 50 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/FileSystem/src/main/java/ghidra/framework/store/local/LocalFolderItem.java"},"region":{"startLine":38}}}],"partialFingerprints":{"codehealthFindingId/v1":"8cb8aaab2197e37e2093d55e80588b927dbd4520e4c1fa161550d8fa3ceb8d5c"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: VariableImpl: TooManyMethods \u2014 50 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/listing/VariableImpl.java"},"region":{"startLine":34}}}],"partialFingerprints":{"codehealthFindingId/v1":"1099cc93a27695319d319fa4114dc38a63f74dfd8773926fd99418cf7de9c3e9"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: PcodeSyntaxTree: TooManyMethods \u2014 50 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/pcode/PcodeSyntaxTree.java"},"region":{"startLine":33}}}],"partialFingerprints":{"codehealthFindingId/v1":"b85c5456eb23fc4e155c7a1ffd7f113cd4e18047980981c931449e0e15c03862"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: model/DebuggerModelProvider.java: FileTooLong \u2014 823 significant lines (blank, comment-only and punctuation-only lines excluded), about 94% of them inside a single declaration: DebuggerModelProvider (71-1201). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/gui/model/DebuggerModelProvider.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"db95130c69b82f54dc52918bbdee691559e3397231b1c21c2779951c76e90fc0"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: RmiClient: TooManyMethods \u2014 49 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/Debugger-rmi-trace/src/main/java/ghidra/app/plugin/core/debug/client/tracermi/RmiClient.java"},"region":{"startLine":42}}}],"partialFingerprints":{"codehealthFindingId/v1":"5003475e0983f9bf30ad639f155fdaefa0e625a26a64de4533c79b2a43f601c0"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: DebuggerMemoryBytesProvider: TooManyMethods \u2014 49 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/gui/memory/DebuggerMemoryBytesProvider.java"},"region":{"startLine":70}}}],"partialFingerprints":{"codehealthFindingId/v1":"b056a05da8509d5911df8b29d7193a75adb09c348d4d0b85b588bb91965b8c36"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: ByteViewerComponent: TooManyMethods \u2014 49 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/ByteViewer/src/main/java/ghidra/app/plugin/core/byteviewer/ByteViewerComponent.java"},"region":{"startLine":51}}}],"partialFingerprints":{"codehealthFindingId/v1":"1cfae3b1acdc49214cc3b09f76695bd60b490ddfe8a28c4615266d6b69e32d92"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: DegController: TooManyMethods \u2014 49 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/DataGraph/src/main/java/datagraph/data/graph/DegController.java"},"region":{"startLine":56}}}],"partialFingerprints":{"codehealthFindingId/v1":"d7846bc743417a60a52ad54a8736ba569358697ac9af72317bfdf523cd0c1e8d"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: DataVertexPanel: TooManyMethods \u2014 49 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/DataGraph/src/main/java/datagraph/data/graph/panel/DataVertexPanel.java"},"region":{"startLine":48}}}],"partialFingerprints":{"codehealthFindingId/v1":"17a334b9844c5c638dab61066e9843dd43df12a0bb638d08a3735714652a8315"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: ClangHighlightController: TooManyMethods \u2014 49 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/Decompiler/src/main/java/ghidra/app/decompiler/component/ClangHighlightController.java"},"region":{"startLine":65}}}],"partialFingerprints":{"codehealthFindingId/v1":"d0c0fd80e6df3b4f41fc9703833a9d91186c9530203f6688a364c03ca11abaf1"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: ObjcMessageAnalyzer: TooManyMethods \u2014 49 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/Objective-C/src/main/java/ghidra/app/plugin/core/analysis/ObjcMessageAnalyzer.java"},"region":{"startLine":55}}}],"partialFingerprints":{"codehealthFindingId/v1":"cbb4d3442cccf50adb5eb890460dc74732771e968c948a3bb3049a7bface842a"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: DataTypeUtilities: TooManyMethods \u2014 49 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/DataTypeUtilities.java"},"region":{"startLine":32}}}],"partialFingerprints":{"codehealthFindingId/v1":"467033f9fba82b09db5b20e6ca8e6d46332cdac755012bdabf521640d4935b86"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: functiongraph/FGActionManager.java: FileTooLong \u2014 815 significant lines (blank, comment-only and punctuation-only lines excluded), about 96% of them inside a single declaration: FGActionManager (50-1224). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/FunctionGraph/src/main/java/ghidra/app/plugin/core/functiongraph/FGActionManager.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"3daa410b4ffad5a68130c9b38906d3d72e93440397d4f96c39b49fac2272db9c"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: analysis/ObjcMessageAnalyzer.java: FileTooLong \u2014 813 significant lines (blank, comment-only and punctuation-only lines excluded), about 96% of them inside a single declaration: ObjcMessageAnalyzer (55-1193). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/Objective-C/src/main/java/ghidra/app/plugin/core/analysis/ObjcMessageAnalyzer.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"ca84389efe927850a09dc3c182abbafae3c66a1869949231da3c55d799efaf92"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: emulation/AARCH64EmulateInstructionStateModifier.java: FileTooLong \u2014 807 significant lines (blank, comment-only and punctuation-only lines excluded), about 99% of them inside a single declaration: AARCH64EmulateInstructionStateModifier (29-1698). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Processors/AARCH64/src/main/java/ghidra/program/emulation/AARCH64EmulateInstructionStateModifier.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"b7a214f9e7632e7b86450b9f6281612c0b5ca8284929a93bc17021999f6e52db"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: TraceSchedule: TooManyMethods \u2014 48 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/model/time/schedule/TraceSchedule.java"},"region":{"startLine":32}}}],"partialFingerprints":{"codehealthFindingId/v1":"f9a7d4a34c4c1dd216883973a144225a7f789b3bacc1e6d4cf387714029ca693"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: AbstractConstraintsTree: TooManyMethods \u2014 48 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/ProposedUtils/src/main/java/ghidra/util/database/spatial/AbstractConstraintsTree.java"},"region":{"startLine":33}}}],"partialFingerprints":{"codehealthFindingId/v1":"83ca3387f33ba059498eea89ee6aca4f06664bee5e7f77e3a6750ce33f96d68d"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: GDynamicColumnTableModel: TooManyMethods \u2014 48 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Docking/src/main/java/docking/widgets/table/GDynamicColumnTableModel.java"},"region":{"startLine":59}}}],"partialFingerprints":{"codehealthFindingId/v1":"7cc7492ae3dd7ed2c773f989d1daea0a5e388bc881b5f06207339247c24c5309"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: GTableColumnModel: TooManyMethods \u2014 48 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Docking/src/main/java/docking/widgets/table/GTableColumnModel.java"},"region":{"startLine":33}}}],"partialFingerprints":{"codehealthFindingId/v1":"29aa6c330b728eedd31646d7964d9a2c425f2346b8398fdc67265f6b5f10ac53"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: ProgramDBChangeSet: TooManyMethods \u2014 48 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/ProgramDBChangeSet.java"},"region":{"startLine":34}}}],"partialFingerprints":{"codehealthFindingId/v1":"f7b3f1bcb615365eb732139d8a4fec32a867e9880a7a3173bb9087d52b5ba706"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: ArrayDB: TooManyMethods \u2014 48 methods. Most of these members implement data.DataType (31 of 46 members), so moving them onto a smaller type would remove them from that contract rather than reduce it. To reduce it, split the contract instead: give each cohesive group of operations its own smaller interface and its own implementing type. Where the contract has to stay whole, move the work behind these members into collaborator types, so what is left here is a forward per member rather than a responsibility per member."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/ArrayDB.java"},"region":{"startLine":35}}}],"partialFingerprints":{"codehealthFindingId/v1":"a1e9d5f303b93b3cb1d574ee50b498300dd0be1baaffdfb4f5cdcfcc8c2ca6af"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: ModuleDB: TooManyMethods \u2014 48 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/module/ModuleDB.java"},"region":{"startLine":36}}}],"partialFingerprints":{"codehealthFindingId/v1":"d96f7f89056e147941dcc6f8389f568573d8db836468d4596007d1ff4d1eab32"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: ModuleManager: TooManyMethods \u2014 48 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/module/ModuleManager.java"},"region":{"startLine":42}}}],"partialFingerprints":{"codehealthFindingId/v1":"bacab97fea36c7152a02e17a7b750bf1b61756ce373a4e4c7ebb1af336b4c935"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: AddressRangeMapDB: TooManyMethods \u2014 48 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/util/AddressRangeMapDB.java"},"region":{"startLine":73}}}],"partialFingerprints":{"codehealthFindingId/v1":"13471dfc3960d167345e78c6250717d1c64b1e78c0625b204615517f62002093"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: Disassembler: TooManyMethods \u2014 48 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/disassemble/Disassembler.java"},"region":{"startLine":52}}}],"partialFingerprints":{"codehealthFindingId/v1":"db330bc76416cc8fc50be2fe426e144eccf2aff47333782c0bb6a329afcd3e90"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: EnumDataType: TooManyMethods \u2014 48 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/EnumDataType.java"},"region":{"startLine":34}}}],"partialFingerprints":{"codehealthFindingId/v1":"bbce7e3ad3d691d8563beb5f71a8b02774cefa4e1db4dca13c9458acdc20d44b"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: main/FrontEndPlugin.java: FileTooLong \u2014 794 significant lines (blank, comment-only and punctuation-only lines excluded), about 94% of them inside a single declaration: FrontEndPlugin (77-1302). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Project/src/main/java/ghidra/framework/main/FrontEndPlugin.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"8595b36325a3a1b2d4079fae2b486fb5df2291ebf64c8e2ec427221815b23965"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: functiongraph/FGProvider.java: FileTooLong \u2014 785 significant lines (blank, comment-only and punctuation-only lines excluded), about 95% of them inside a single declaration: FGProvider (62-1409). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/FunctionGraph/src/main/java/ghidra/app/plugin/core/functiongraph/FGProvider.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"9d4a9dc91cfe92f398fd5b355059c012dc89e01f1f78c03dc6bf0822d206a9ef"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: DebuggerWatchesProvider: TooManyMethods \u2014 47 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/gui/watch/DebuggerWatchesProvider.java"},"region":{"startLine":89}}}],"partialFingerprints":{"codehealthFindingId/v1":"4a820c96e0372ec3f7a87094b7877623eca4aa54eff6e4981b9101bb7a59fa3d"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: MiscInfoStream: TooManyMethods \u2014 47 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/dump/mdmp/MiscInfoStream.java"},"region":{"startLine":25}}}],"partialFingerprints":{"codehealthFindingId/v1":"5d4b092b0fb8595cd2f05a63f8f7f0894eff076db5621a82b260ae5f4460c98d"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: Repository: TooManyMethods \u2014 47 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/GhidraServer/src/main/java/ghidra/server/Repository.java"},"region":{"startLine":44}}}],"partialFingerprints":{"codehealthFindingId/v1":"7c325cbb5a8e71809416d024e503c9a1aad35e9955b2dffdbc327b8d0b11088f"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: RepositoryHandleImpl: TooManyMethods \u2014 47 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/GhidraServer/src/main/java/ghidra/server/remote/RepositoryHandleImpl.java"},"region":{"startLine":41}}}],"partialFingerprints":{"codehealthFindingId/v1":"aea70809b85ecf799c004fc989b6ebfe730de1ee427fdf5957de00b83e85e8ed"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: AbstractCreateDataTypeModel: TooManyMethods \u2014 47 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/MicrosoftCodeAnalyzer/src/main/java/ghidra/app/cmd/data/AbstractCreateDataTypeModel.java"},"region":{"startLine":32}}}],"partialFingerprints":{"codehealthFindingId/v1":"f59088071a03a15690fc7416cf4bd91e01c4aaf6ecd01acb8e0bf2da0f9a5384"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: StructuredSleigh: TooManyMethods \u2014 47 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/SystemEmulation/src/main/java/ghidra/pcode/struct/StructuredSleigh.java"},"region":{"startLine":122}}}],"partialFingerprints":{"codehealthFindingId/v1":"1e3595567a053f66ae6fe8c2aa2fd6aceca1243c3c6ef959f9d8e0b427eae762"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: SymbolDB: TooManyMethods \u2014 47 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/symbol/SymbolDB.java"},"region":{"startLine":44}}}],"partialFingerprints":{"codehealthFindingId/v1":"fd73d34955597d7aa82020abffa8eec6161aae4dd13238dedba9d8d29f315f70"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: GenericAddress: TooManyMethods \u2014 47 methods. Most of these members implement address.Address (36 of 38 members), so moving them onto a smaller type would remove them from that contract rather than reduce it. To reduce it, split the contract instead: give each cohesive group of operations its own smaller interface and its own implementing type. Where the contract has to stay whole, move the work behind these members into collaborator types, so what is left here is a forward per member rather than a responsibility per member."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/address/GenericAddress.java"},"region":{"startLine":26}}}],"partialFingerprints":{"codehealthFindingId/v1":"79b019c1b2f85bb54f52ff40ec1605ceffa94043540122902ce2b9cb499d5a98"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: Register: TooManyMethods \u2014 47 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/lang/Register.java"},"region":{"startLine":29}}}],"partialFingerprints":{"codehealthFindingId/v1":"2bbdaa4a44673f85f21598b39f4cac7151885a3d215d02aee6ad8c3b65aca9bc"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: tracecalltree/TraceCallTreeProvider.java: FileTooLong \u2014 783 significant lines (blank, comment-only and punctuation-only lines excluded), about 93% of them inside a single declaration: TraceCallTreeProvider (72-1301). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/gui/tracecalltree/TraceCallTreeProvider.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"2040bd51d7360aa87d09da17ff828a5c00b26c26040c9f25bd96155222b9d5ef"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: analysis/Pic17c7xxAnalyzer.java: FileTooLong \u2014 776 significant lines (blank, comment-only and punctuation-only lines excluded), about 98% of them inside a single declaration: Pic17c7xxAnalyzer (34-1160). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Processors/PIC/src/main/java/ghidra/app/plugin/core/analysis/Pic17c7xxAnalyzer.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"5b3ac9f81d75c88185e1170ef403d09b712b3b964b31aeedb5da91ca104e7773"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: plugin/FcgProvider.java: FileTooLong \u2014 773 significant lines (blank, comment-only and punctuation-only lines excluded), about 95% of them inside a single declaration: FcgProvider (65-1359). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/GraphFunctionCalls/src/main/java/functioncalls/plugin/FcgProvider.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"e939ac27acef86f189df37e0450cba5439bbd8f7164f27d162fe255348b19278"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: emulation/DebuggerEmulateFunctionDialog.java: FileTooLong \u2014 770 significant lines (blank, comment-only and punctuation-only lines excluded), about 95% of them inside a single declaration: DebuggerEmulateFunctionDialog (61-1148). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/gui/emulation/DebuggerEmulateFunctionDialog.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"ab0c6d6b5f837a712d6e9430709149df8d380415b74b4d36ed4a23017698f7c0"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: data/DefaultProjectData.java: FileTooLong \u2014 768 significant lines (blank, comment-only and punctuation-only lines excluded), about 97% of them inside a single declaration: DefaultProjectData (43-1465). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Project/src/main/java/ghidra/framework/data/DefaultProjectData.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"be11583d3a79a167525ade9dbaa40562b560696b2d18bbb0dd3b8b3b22b93659"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: plugintool/PluginTool.java: FileTooLong \u2014 767 significant lines (blank, comment-only and punctuation-only lines excluded), about 94% of them inside a single declaration: PluginTool (79-1680). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Project/src/main/java/ghidra/framework/plugintool/PluginTool.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"25b5004cfbf9ea9daf54b58aa53e5451afc12b2b97c41b2620e65329c13d1013"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: DBTraceMemoryManager: TooManyMethods \u2014 46 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/memory/DBTraceMemoryManager.java"},"region":{"startLine":48}}}],"partialFingerprints":{"codehealthFindingId/v1":"615062a80fee61adb503feea1db944b095214562ce4784adb908e2fd8be500e2"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: ByteViewerComponentProvider: TooManyMethods \u2014 46 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/ByteViewer/src/main/java/ghidra/app/plugin/core/byteviewer/ByteViewerComponentProvider.java"},"region":{"startLine":50}}}],"partialFingerprints":{"codehealthFindingId/v1":"5d3199e59015a76b5036682638df6a20c6a597dbc119d79be08ebb941e3778e4"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: DecompileCallback: TooManyMethods \u2014 46 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/Decompiler/src/main/java/ghidra/app/decompiler/DecompileCallback.java"},"region":{"startLine":49}}}],"partialFingerprints":{"codehealthFindingId/v1":"6cdd094ce042b71fba09513225bbb741229368cca6a837573f5b47a6f0f4a7a3"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: AbstractGraphComponentPanel: TooManyMethods \u2014 46 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/FunctionGraph/src/main/java/ghidra/app/plugin/core/functiongraph/graph/vertex/AbstractGraphComponentPanel.java"},"region":{"startLine":34}}}],"partialFingerprints":{"codehealthFindingId/v1":"c6c524de06f69587a8f785514139bf4a170806e12aabcca6ddb46dec92e6f7a7"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: FidDB: TooManyMethods \u2014 46 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/FunctionID/src/main/java/ghidra/feature/fid/db/FidDB.java"},"region":{"startLine":34}}}],"partialFingerprints":{"codehealthFindingId/v1":"549edb03c9705094421fd212e54e1389589429576b6eee0bf45e8537d89383d4"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: HelpManager: TooManyMethods \u2014 46 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Docking/src/main/java/docking/help/HelpManager.java"},"region":{"startLine":51}}}],"partialFingerprints":{"codehealthFindingId/v1":"5eb1c133f4de0e761f8a15785677cdf5e60b18f9d748730d367353d39cb6c6ee"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: DomainObjectAdapter: TooManyMethods \u2014 46 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Project/src/main/java/ghidra/framework/data/DomainObjectAdapter.java"},"region":{"startLine":37}}}],"partialFingerprints":{"codehealthFindingId/v1":"a0714de3ed4ac8105bd60a1d4664edf7d9e5e28b48c4fcf636f7111ea8a1f92f"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: ToolManagerImpl: TooManyMethods \u2014 46 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Project/src/main/java/ghidra/framework/project/tool/ToolManagerImpl.java"},"region":{"startLine":38}}}],"partialFingerprints":{"codehealthFindingId/v1":"4a4f8ce5942bd6a54e763e1b9fc7cb8eee53c82ad90e771963663985013807d0"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: AssemblyPatternBlock: TooManyMethods \u2014 46 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/assembler/sleigh/sem/AssemblyPatternBlock.java"},"region":{"startLine":48}}}],"partialFingerprints":{"codehealthFindingId/v1":"2c636174e2d8c2fdc2defb666a19682a3fbb4c0b174d6f8a576b866bfd7850ee"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: FragmentDB: TooManyMethods \u2014 46 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/module/FragmentDB.java"},"region":{"startLine":36}}}],"partialFingerprints":{"codehealthFindingId/v1":"d7e86853586afb3c302e631a358fc35d4b6e6d9a47182f22c078a477bbd15752"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: OldProgramContextDB: TooManyMethods \u2014 46 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/register/OldProgramContextDB.java"},"region":{"startLine":44}}}],"partialFingerprints":{"codehealthFindingId/v1":"e1f37590e44cf85cb792205c19e979196787b354e9c11bd6550893d668e6cf92"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: db/ChainedBuffer.java: FileTooLong \u2014 758 significant lines (blank, comment-only and punctuation-only lines excluded), about 99% of them inside a single declaration: ChainedBuffer (59-1483). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/DB/src/main/java/db/ChainedBuffer.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"0576972d4b05a2195b8965a6fd08767877d2caed06943ebe9a76e5f7c06479ec"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: data/GhidraFolderData.java: FileTooLong \u2014 751 significant lines (blank, comment-only and punctuation-only lines excluded). To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Project/src/main/java/ghidra/framework/data/GhidraFolderData.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"ca9f79a3b280e886c80108897534856ff89e7f641c11c3ed28ffa62ea1626b26"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: LoneLogicalBreakpoint: TooManyMethods \u2014 45 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/service/breakpoint/LoneLogicalBreakpoint.java"},"region":{"startLine":33}}}],"partialFingerprints":{"codehealthFindingId/v1":"6983d5c0244f04293cd95f04ba8488afc55d0c18db1e4c6d0bab76855cce68d7"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: DescriptionManager: TooManyMethods \u2014 45 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/BSim/src/main/java/ghidra/features/bsim/query/description/DescriptionManager.java"},"region":{"startLine":37}}}],"partialFingerprints":{"codehealthFindingId/v1":"3789b28c3aa5f8d6d403f6c405cfde0c1f8335d70d36f49024cb789324b4a24d"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: ProcessVmCountersStream: TooManyMethods \u2014 45 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/dump/mdmp/ProcessVmCountersStream.java"},"region":{"startLine":25}}}],"partialFingerprints":{"codehealthFindingId/v1":"794db97c2ad109a07de51bd76c8c0480fafe891d598975618fde798cde62b78c"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: GroupedFunctionGraphComponentPanel: TooManyMethods \u2014 45 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/FunctionGraph/src/main/java/ghidra/app/plugin/core/functiongraph/graph/vertex/GroupedFunctionGraphComponentPanel.java"},"region":{"startLine":50}}}],"partialFingerprints":{"codehealthFindingId/v1":"a0b65457dceb6c2304aa6c3a610d801295611d76da3e401ebdcc6950bfc2d670"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: ChainedBuffer: TooManyMethods \u2014 45 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/DB/src/main/java/db/ChainedBuffer.java"},"region":{"startLine":59}}}],"partialFingerprints":{"codehealthFindingId/v1":"628c9dae54d93b10f111c44c261fb698460a06c52d61ae0e2b00ebf733e6003b"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: VarKeyRecordNode: TooManyMethods \u2014 45 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/DB/src/main/java/db/VarKeyRecordNode.java"},"region":{"startLine":40}}}],"partialFingerprints":{"codehealthFindingId/v1":"c957ac2771c75a3aac4be3f08ad6225d2191fb6f2bdcbaeb401e10e685b859ff"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: TextComponentAutocompleter: TooManyMethods \u2014 45 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Docking/src/main/java/docking/widgets/autocomplete/TextComponentAutocompleter.java"},"region":{"startLine":97}}}],"partialFingerprints":{"codehealthFindingId/v1":"6e6e14936c0cb614b32502ec738231d73f8a62f3a4c9db375d7ed717872a74cd"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: AbstractVisualGraphLayout: TooManyMethods \u2014 45 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Graph/src/main/java/ghidra/graph/viewer/layout/AbstractVisualGraphLayout.java"},"region":{"startLine":77}}}],"partialFingerprints":{"codehealthFindingId/v1":"8d91db2f2bc2460e2e6067ff6eedb53e55228de8d72bde108dbc6789495ba573"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: GhidraFolder: TooManyMethods \u2014 45 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Project/src/main/java/ghidra/framework/data/GhidraFolder.java"},"region":{"startLine":30}}}],"partialFingerprints":{"codehealthFindingId/v1":"511dc1e10b434c95826d6fe860d84a799eaa58942a5ba254892f08532c5c53c8"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: AnsiBufferedInputStream: TooManyMethods \u2014 45 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Pty/src/main/java/ghidra/pty/windows/AnsiBufferedInputStream.java"},"region":{"startLine":29}}}],"partialFingerprints":{"codehealthFindingId/v1":"0a38d27791a0d4bafaf7f096a76c791ccfbdb9d6d0f1cbe65ab311cf9071d9cb"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: SleighDebugLogger: TooManyMethods \u2014 45 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/processors/sleigh/SleighDebugLogger.java"},"region":{"startLine":38}}}],"partialFingerprints":{"codehealthFindingId/v1":"8db4aef18f45889e8c791e7fb68a68997a995e8ad26133a784626c94394bc3da"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: ExternalManagerDB: TooManyMethods \u2014 45 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/external/ExternalManagerDB.java"},"region":{"startLine":46}}}],"partialFingerprints":{"codehealthFindingId/v1":"2b13163a39f1efe7ad883f60cd162e0b9aa7a5843e6ad77926851d796cee467c"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: FunctionDefinitionDataType: TooManyMethods \u2014 45 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/FunctionDefinitionDataType.java"},"region":{"startLine":32}}}],"partialFingerprints":{"codehealthFindingId/v1":"e9d7656cea362a7d1e96e4b751501529f87e4427c9d6f6668d4bd9cafa899a74"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: StandAloneDataTypeManager: TooManyMethods \u2014 45 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/StandAloneDataTypeManager.java"},"region":{"startLine":50}}}],"partialFingerprints":{"codehealthFindingId/v1":"8f41d13a4883ab869147bbf120b7cb1f4b4870b972f48ff1b27d179e9bffcc69"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: TypedefDataType: TooManyMethods \u2014 45 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/TypedefDataType.java"},"region":{"startLine":30}}}],"partialFingerprints":{"codehealthFindingId/v1":"8c01efe7bbcc90a5143aabeff0ecb04f74f558e2ee10d2f559b28003ec962c5d"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: breakpoint/DebuggerBreakpointMarkerPlugin.java: FileTooLong \u2014 747 significant lines (blank, comment-only and punctuation-only lines excluded), about 91% of them inside a single declaration: DebuggerBreakpointMarkerPlugin (89-1144). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/gui/breakpoint/DebuggerBreakpointMarkerPlugin.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"6ac08cd128e84205487522915d7eee3f4caf062e903ba9a4fd0e4396bca6bb33"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: function/FunctionManagerDB.java: FileTooLong \u2014 745 significant lines (blank, comment-only and punctuation-only lines excluded), about 96% of them inside a single declaration: FunctionManagerDB (56-1314). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/function/FunctionManagerDB.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"f092158eb11bfeba7201bbe058d6a5bf90f8f2445c9a8b80931119a6962b04fa"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: address/AddressSet.java: FileTooLong \u2014 735 significant lines (blank, comment-only and punctuation-only lines excluded), about 99% of them inside a single declaration: AddressSet (30-1357). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/address/AddressSet.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"fab523183662325e04119cea0ed8bf7e5be896d89a7478e8e4ec36342dceff41"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: BSimControlLaunchable: TooManyMethods \u2014 44 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/BSim/src/main/java/ghidra/features/bsim/query/BSimControlLaunchable.java"},"region":{"startLine":51}}}],"partialFingerprints":{"codehealthFindingId/v1":"b3b83e53ccfe3f9cd53eeff46b3f055e7d8157d5e3ec7f2590d38666fa0a41aa"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: DetachedWindowNode: TooManyMethods \u2014 44 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Docking/src/main/java/docking/DetachedWindowNode.java"},"region":{"startLine":37}}}],"partialFingerprints":{"codehealthFindingId/v1":"80c7ed27a7b4e31c3339155fe1afce7279d11f4a5386d4c54bdb48e6fa58be18"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: AbstractActionBuilder: TooManyMethods \u2014 44 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Docking/src/main/java/docking/action/builder/AbstractActionBuilder.java"},"region":{"startLine":54}}}],"partialFingerprints":{"codehealthFindingId/v1":"8ff0c69951f1b97cc31faea0ebf3045cfe334dac23eb40015675ade848cbb05f"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: OptionDialog: TooManyMethods \u2014 44 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Docking/src/main/java/docking/widgets/OptionDialog.java"},"region":{"startLine":80}}}],"partialFingerprints":{"codehealthFindingId/v1":"e09a54b37baf0702c748c70bc10d1c4fe379c7c27051f23351148b145ec9ba06"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: ClippingTextField: TooManyMethods \u2014 44 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Docking/src/main/java/docking/widgets/fieldpanel/field/ClippingTextField.java"},"region":{"startLine":33}}}],"partialFingerprints":{"codehealthFindingId/v1":"69807120ecf95a160e2f9f6bc6a6603295e92f24834e10f1dc77afb647fb37d5"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: CompositeVerticalLayoutTextField: TooManyMethods \u2014 44 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Docking/src/main/java/docking/widgets/fieldpanel/field/CompositeVerticalLayoutTextField.java"},"region":{"startLine":48}}}],"partialFingerprints":{"codehealthFindingId/v1":"34a468b4eab16dabe5d2805d15b5c167a00be1c46fa4f67febfce19fb6cc71ff"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: GValuesMap: TooManyMethods \u2014 44 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Docking/src/main/java/docking/widgets/values/GValuesMap.java"},"region":{"startLine":31}}}],"partialFingerprints":{"codehealthFindingId/v1":"286f1b190980398a02e8968625628fa86ade00b3fed1a2716f1560b1f1bdbb07"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: ApplicationThemeManager: TooManyMethods \u2014 44 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Gui/src/main/java/generic/theme/ApplicationThemeManager.java"},"region":{"startLine":37}}}],"partialFingerprints":{"codehealthFindingId/v1":"40627d31b870e5db6e67ecf74d99ff513b4973cc987029bee56f9e436def646d"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: FrontEndTool: TooManyMethods \u2014 44 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Project/src/main/java/ghidra/framework/main/FrontEndTool.java"},"region":{"startLine":90}}}],"partialFingerprints":{"codehealthFindingId/v1":"ed9667536f3708b709a23173975b4eedd356c96b91d452beb8abaa836f08eae4"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: AbstractDataType: TooManyMethods \u2014 44 methods. Most of these members implement data.DataType (40 of 42 members), so moving them onto a smaller type would remove them from that contract rather than reduce it. To reduce it, split the contract instead: give each cohesive group of operations its own smaller interface and its own implementing type. Where the contract has to stay whole, move the work behind these members into collaborator types, so what is left here is a forward per member rather than a responsibility per member."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/AbstractDataType.java"},"region":{"startLine":30}}}],"partialFingerprints":{"codehealthFindingId/v1":"0f33fa530feb72a2b822e088cfbd36b439ace539ab796bfb0e3648ee5977176e"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: matchtable/VTMatchTableProvider.java: FileTooLong \u2014 732 significant lines (blank, comment-only and punctuation-only lines excluded), about 94% of them inside a single declaration: VTMatchTableProvider (67-1172). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/VersionTracking/src/main/java/ghidra/feature/vt/gui/provider/matchtable/VTMatchTableProvider.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"1d83f35d906166378b35b6377df6547b171b022a7bae7e2b0b31a5c881446423"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: memory/DBTraceMemorySpace.java: FileTooLong \u2014 725 significant lines (blank, comment-only and punctuation-only lines excluded), about 95% of them inside a single declaration: DBTraceMemorySpace (58-1140). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/memory/DBTraceMemorySpace.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"c49c1b1582f6eabc09a0e81a0737f7de67b023cdfb24cee0cb75046a82752e8d"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: graph/DirectedGraph.java: FileTooLong \u2014 721 significant lines (blank, comment-only and punctuation-only lines excluded), about 99% of them inside a single declaration: DirectedGraph (42-1369). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Generic/src/main/java/ghidra/util/graph/DirectedGraph.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"751e48d76ad31c48c234b987e0e1235bfa5b1d612e5597dcc95e87811d3143e7"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: RmiTrace: TooManyMethods \u2014 43 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/Debugger-rmi-trace/src/main/java/ghidra/app/plugin/core/debug/client/tracermi/RmiTrace.java"},"region":{"startLine":33}}}],"partialFingerprints":{"codehealthFindingId/v1":"0fa3ddf4a8c4bc640f8726db2d616dedd3ad8485d3cd58176732492001ce234f"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: DebuggerEmulateFunctionDialog: TooManyMethods \u2014 43 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/gui/emulation/DebuggerEmulateFunctionDialog.java"},"region":{"startLine":61}}}],"partialFingerprints":{"codehealthFindingId/v1":"2be125705a24df98b29cec7615ee3c53cd2da56b9edd923d40e6aded75b40547"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: DebuggerEmulationServicePlugin: TooManyMethods \u2014 43 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/service/emulation/DebuggerEmulationServicePlugin.java"},"region":{"startLine":104}}}],"partialFingerprints":{"codehealthFindingId/v1":"54ad89114bf9a6ffd57f496ae4e196c654193afc09b1deac6e0b960b46f36be7"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: DebuggerStaticMappingServicePlugin: TooManyMethods \u2014 43 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/service/modules/DebuggerStaticMappingServicePlugin.java"},"region":{"startLine":81}}}],"partialFingerprints":{"codehealthFindingId/v1":"130a20abbfc548edf89b932591952068cc17a7c85d7e717049a015743a5c4df6"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: ExecutableRecord: TooManyMethods \u2014 43 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/BSim/src/main/java/ghidra/features/bsim/query/description/ExecutableRecord.java"},"region":{"startLine":41}}}],"partialFingerprints":{"codehealthFindingId/v1":"0a07a0efa2ac397543c7c9c42d0e3a174c94f47fe62f6a7782c2e17fd075fd4d"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: MDModifiedTypeParser: TooManyMethods \u2014 43 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/MicrosoftDmang/src/main/java/mdemangler/datatype/modifier/MDModifiedTypeParser.java"},"region":{"startLine":29}}}],"partialFingerprints":{"codehealthFindingId/v1":"17c1f6d637b547ae45e48c6cf604717f12a7be0bb251a7a5e26df36a78b0731a"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: ProgramSarifMgr: TooManyMethods \u2014 43 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/Sarif/src/main/java/sarif/managers/ProgramSarifMgr.java"},"region":{"startLine":56}}}],"partialFingerprints":{"codehealthFindingId/v1":"e38ec2b19fe9a052f4c56bb69f162ce7f25c94f2d5b4446ffde8d67d6311676a"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: VerticalLayoutTextField: TooManyMethods \u2014 43 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Docking/src/main/java/docking/widgets/fieldpanel/field/VerticalLayoutTextField.java"},"region":{"startLine":36}}}],"partialFingerprints":{"codehealthFindingId/v1":"602c77fe85f59d443a8dd91794825ae827e50c5470f5eb469335bece036e477b"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: GTreeNode: TooManyMethods \u2014 43 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Docking/src/main/java/docking/widgets/tree/GTreeNode.java"},"region":{"startLine":76}}}],"partialFingerprints":{"codehealthFindingId/v1":"b6f0695885c6783b611723e00850643773bb99c5deb0f5144d9ef870f0259265"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: VectorSTL: TooManyMethods \u2014 43 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Generic/src/main/java/generic/stl/VectorSTL.java"},"region":{"startLine":21}}}],"partialFingerprints":{"codehealthFindingId/v1":"c29edb58034d5da02af254f35237b73d9bfe4edd8e163f446b37511c88e51250"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: PluginManager: TooManyMethods \u2014 43 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Project/src/main/java/ghidra/framework/plugintool/PluginManager.java"},"region":{"startLine":37}}}],"partialFingerprints":{"codehealthFindingId/v1":"8b7a0a34847bcdb3b8e17df5532c03fb34158307ad0b23ff6707c0bc8f1f894b"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: EquateManager: TooManyMethods \u2014 43 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/symbol/EquateManager.java"},"region":{"startLine":40}}}],"partialFingerprints":{"codehealthFindingId/v1":"2c6d91fca4469188d59fa0d65e361c154051193cec4e541f9ab6b075ed9dfc55"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: DisassemblerContextImpl: TooManyMethods \u2014 43 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/disassemble/DisassemblerContextImpl.java"},"region":{"startLine":33}}}],"partialFingerprints":{"codehealthFindingId/v1":"07b99eb0c1f255bf82760ca9e69dc35f900d2b5b3e2a68be61a7432845a472a5"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: CompositeDataTypeImpl: TooManyMethods \u2014 43 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/CompositeDataTypeImpl.java"},"region":{"startLine":31}}}],"partialFingerprints":{"codehealthFindingId/v1":"a5177249046051c2f53bcb72aa7199d95e0b2ab8c2969d29a6e9ae277da3b9ca"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: PointerDataType: TooManyMethods \u2014 43 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/PointerDataType.java"},"region":{"startLine":34}}}],"partialFingerprints":{"codehealthFindingId/v1":"b742da6daa6948ecf71a89a07640099b752e221fb87a4144e72d2c5340f6c4b5"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: viewer/GraphComponent.java: FileTooLong \u2014 714 significant lines (blank, comment-only and punctuation-only lines excluded), about 93% of them inside a single declaration: GraphComponent (85-1291). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Graph/src/main/java/ghidra/graph/viewer/GraphComponent.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"b233bd8f3b82b747ed70a92aedfff71d86cce8d10da2be162c24f4bcfaa03a06"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: floatformat/FloatFormat.java: FileTooLong \u2014 711 significant lines (blank, comment-only and punctuation-only lines excluded), about 99% of them inside a single declaration: FloatFormat (30-1283). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcode/floatformat/FloatFormat.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"67086d7a309b3829b58f930a2706686eb778c47f6824ed076c76330989fd2d69"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: emulation/DebuggerEmulationServicePlugin.java: FileTooLong \u2014 708 significant lines (blank, comment-only and punctuation-only lines excluded), about 89% of them inside a single declaration: DebuggerEmulationServicePlugin (104-1031). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/service/emulation/DebuggerEmulationServicePlugin.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"33c5af005a899e8cdfcc5e26154500ae0bd37230fda15de3fc222c5a7bbdc262"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: util/AbstractVTMatchTableModel.java: FileTooLong \u2014 708 significant lines (blank, comment-only and punctuation-only lines excluded), about 95% of them inside a single declaration: AbstractVTMatchTableModel (55-1177). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/VersionTracking/src/main/java/ghidra/feature/vt/gui/util/AbstractVTMatchTableModel.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"b9073cf4cddb45ec5cf1e5039e51ddaf4271b2f94d64b29d57968fff5b376198"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: widgets/DropDownTextField.java: FileTooLong \u2014 706 significant lines (blank, comment-only and punctuation-only lines excluded). To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Docking/src/main/java/docking/widgets/DropDownTextField.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"39ab4f9e36da19d91a364a3c58b7bd2b1c99dfb5638fc4950fbac08b634e7a4a"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: listing/DebuggerListingProvider.java: FileTooLong \u2014 702 significant lines (blank, comment-only and punctuation-only lines excluded), about 90% of them inside a single declaration: DebuggerListingProvider (94-1110). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/gui/listing/DebuggerListingProvider.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"862211cd2523b50f5580807f72eb08195188914037ab09ca23e928b52f0bc4d2"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: analyzer/DexHeaderFormatMarkup.java: FileTooLong \u2014 702 significant lines (blank, comment-only and punctuation-only lines excluded), about 97% of them inside a single declaration: DexHeaderFormatMarkup (42-1021). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/android/dex/analyzer/DexHeaderFormatMarkup.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"32c62eb095727aeaab1687a44f9ac9c02b73faa11215694ee80e0105d4ffb0ee"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: sleigh/SleighDebugLogger.java: FileTooLong \u2014 702 significant lines (blank, comment-only and punctuation-only lines excluded), about 98% of them inside a single declaration: SleighDebugLogger (38-1304). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/processors/sleigh/SleighDebugLogger.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"7142b1703facdcbe14e388c4cb0b3084378f7595c086263882ee3a1239f56910"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: DefaultWatchRow: TooManyMethods \u2014 42 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/gui/watch/DefaultWatchRow.java"},"region":{"startLine":50}}}],"partialFingerprints":{"codehealthFindingId/v1":"73a4c9688004e2dd867c912f10e92f2538d59a3c7824983fecc55e3489e2e7d7"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: UndefinedDBTraceData: TooManyMethods \u2014 42 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/listing/UndefinedDBTraceData.java"},"region":{"startLine":43}}}],"partialFingerprints":{"codehealthFindingId/v1":"57e6219e6b5899bd7224a442e08dffb654714e1d8c5d9c287ad77decfb82b7c5"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: DBTraceProgramViewFragment: TooManyMethods \u2014 42 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/program/DBTraceProgramViewFragment.java"},"region":{"startLine":27}}}],"partialFingerprints":{"codehealthFindingId/v1":"4639175e11bf4608b4728c15597c8bfbad8fffeff959be34c421f42bd1306919"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: LisaOptions: TooManyMethods \u2014 42 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Extensions/Lisa/src/main/java/ghidra/lisa/gui/LisaOptions.java"},"region":{"startLine":47}}}],"partialFingerprints":{"codehealthFindingId/v1":"05b2ea19a191ae82ed68c8d4dbe49c582fb2e255a49d5875ec0d13cc3fa317d9"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: DecompileProcess: TooManyMethods \u2014 42 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/Decompiler/src/main/java/ghidra/app/decompiler/DecompileProcess.java"},"region":{"startLine":49}}}],"partialFingerprints":{"codehealthFindingId/v1":"4ceea42d9e6df86c502fd25d5e67599f1dfeb5fbfa4ab11c7f6e543515d44518"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: VTMarkupItemsTableProvider: TooManyMethods \u2014 42 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/VersionTracking/src/main/java/ghidra/feature/vt/gui/provider/markuptable/VTMarkupItemsTableProvider.java"},"region":{"startLine":73}}}],"partialFingerprints":{"codehealthFindingId/v1":"7581d145aaadf1a865e599db5f20e8405142743bd8a27e9616bda561864c821c"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: VTMatchTableProvider: TooManyMethods \u2014 42 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/VersionTracking/src/main/java/ghidra/feature/vt/gui/provider/matchtable/VTMatchTableProvider.java"},"region":{"startLine":67}}}],"partialFingerprints":{"codehealthFindingId/v1":"3f34104b541e0459aafbaec250e0bec25463f9f5097c7af48e1a43c1807099cd"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: BookmarkDBManager: TooManyMethods \u2014 42 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/bookmark/BookmarkDBManager.java"},"region":{"startLine":44}}}],"partialFingerprints":{"codehealthFindingId/v1":"3f84e9a946d7e26e352ca7017b8787bed4136dc73bda666e8a1d44dcc3af78b1"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: PointerDB: TooManyMethods \u2014 42 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/PointerDB.java"},"region":{"startLine":34}}}],"partialFingerprints":{"codehealthFindingId/v1":"2335e71411265eb33865c6c5933a54e4ae3f9606b2e2d1224b254118c2d3210c"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: watch/DebuggerWatchesProvider.java: FileTooLong \u2014 700 significant lines (blank, comment-only and punctuation-only lines excluded), about 90% of them inside a single declaration: DebuggerWatchesProvider (89-1036). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/gui/watch/DebuggerWatchesProvider.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"930f7a2868bc9b62653898e6ceecf9f0ed832bd20dfda84c91fa3421153fdd05"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: slgh_compile/PcodeCompile.java: FileTooLong \u2014 696 significant lines (blank, comment-only and punctuation-only lines excluded), about 98% of them inside a single declaration: PcodeCompile (37-1085). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slgh_compile/PcodeCompile.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"d0b27bce03c659b6fc536fd2a4b9fed0e3676f45fc5129c24b2d43d3172e6ca2"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: util/AnimationUtils.java: FileTooLong \u2014 694 significant lines (blank, comment-only and punctuation-only lines excluded), about 98% of them inside a single declaration: AnimationUtils (38-1224). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Docking/src/main/java/docking/util/AnimationUtils.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"dd6e6e780696f474fd9d1db7757c5a4236f903c63996d1d77d295e818651a45c"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: JdiEventHandler: TooManyMethods \u2014 41 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/Debugger-jpda/src/main/java/ghidra/dbg/jdi/manager/JdiEventHandler.java"},"region":{"startLine":32}}}],"partialFingerprints":{"codehealthFindingId/v1":"a24e0cc2ffc77001c469417a46ff6de186ee95e2599e7eafa548b9d71f26db35"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: DebuggerControlPlugin: TooManyMethods \u2014 41 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/gui/control/DebuggerControlPlugin.java"},"region":{"startLine":74}}}],"partialFingerprints":{"codehealthFindingId/v1":"3877aa7dcbd49d6b5b558938c03edadd50b21d4285236b30d5a3205a0c1cfab6"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: DebuggerCopyIntoProgramDialog: TooManyMethods \u2014 41 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/gui/copying/DebuggerCopyIntoProgramDialog.java"},"region":{"startLine":55}}}],"partialFingerprints":{"codehealthFindingId/v1":"c0a01ac22e66d96bc997dffbbff9b581426f1d16bd3a500d2d2ac625fef6fbc3"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: AssociationDatabaseManager: TooManyMethods \u2014 41 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/VersionTracking/src/main/java/ghidra/feature/vt/api/db/AssociationDatabaseManager.java"},"region":{"startLine":37}}}],"partialFingerprints":{"codehealthFindingId/v1":"7d9ced63653185ed385bb66fc2630a65befa5930a8271c0ae96f3673f7a09295"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: ApplyMarkupPropertyEditor: TooManyMethods \u2014 41 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/VersionTracking/src/main/java/ghidra/feature/vt/gui/provider/matchtable/ApplyMarkupPropertyEditor.java"},"region":{"startLine":49}}}],"partialFingerprints":{"codehealthFindingId/v1":"5aab375fd5833b84afcfc35f3a572a1ac83556af270c5ff6889c03958a4f7535"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: ReverseClippingTextField: TooManyMethods \u2014 41 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Docking/src/main/java/docking/widgets/fieldpanel/field/ReverseClippingTextField.java"},"region":{"startLine":33}}}],"partialFingerprints":{"codehealthFindingId/v1":"76af4c4222449e8e0101ece7fbbb5f95f95baf12d90f801219688c4d15797fd4"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: GTrable: TooManyMethods \u2014 41 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Docking/src/main/java/docking/widgets/trable/GTrable.java"},"region":{"startLine":46}}}],"partialFingerprints":{"codehealthFindingId/v1":"3ddc6fa08cd48a3392c3f537a970e6f6915233a4f78d7fb0bb819bcd39a0fac8"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: TaskDialog: TooManyMethods \u2014 41 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Docking/src/main/java/ghidra/util/task/TaskDialog.java"},"region":{"startLine":63}}}],"partialFingerprints":{"codehealthFindingId/v1":"99385922bce6aba047b8a1bf3f1c8d750ad103580550a562e7af80013efb76a1"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: LinkedGhidraSubFolder: TooManyMethods \u2014 41 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Project/src/main/java/ghidra/framework/data/LinkedGhidraSubFolder.java"},"region":{"startLine":34}}}],"partialFingerprints":{"codehealthFindingId/v1":"c8d74c27afd3dbff356896bfd31a5e1ec0ab0a5ff655d26ad37728dd9cd65eef"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: GTaskManager: TooManyMethods \u2014 41 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Project/src/main/java/ghidra/framework/task/GTaskManager.java"},"region":{"startLine":59}}}],"partialFingerprints":{"codehealthFindingId/v1":"510bb596916c3a64b07ee56abfb2dd118d2a40ef314cc7f97d91215276dab455"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: CodeBlockImpl: TooManyMethods \u2014 41 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/block/CodeBlockImpl.java"},"region":{"startLine":34}}}],"partialFingerprints":{"codehealthFindingId/v1":"be17c5173ebd162b153bc977732a1722f68c757f73d5d23b9e0afc0f7b7dcb6f"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: DebuggerBreakpointMarkerPlugin: TooManyMethods \u2014 40 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/gui/breakpoint/DebuggerBreakpointMarkerPlugin.java"},"region":{"startLine":89}}}],"partialFingerprints":{"codehealthFindingId/v1":"bec4342446a236a3637796c1f9781c0103b9ca04a48c2368c4be5d8e45b64490"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: ObjectTreeModel: TooManyMethods \u2014 40 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/gui/model/ObjectTreeModel.java"},"region":{"startLine":42}}}],"partialFingerprints":{"codehealthFindingId/v1":"f2d408154987d815eca13eb72c32d5f1cee0cc69e1702c5aca01fb7bdd47be96"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: DecompilerController: TooManyMethods \u2014 40 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/Decompiler/src/main/java/ghidra/app/decompiler/component/DecompilerController.java"},"region":{"startLine":42}}}],"partialFingerprints":{"codehealthFindingId/v1":"3b4bca8686280d26cbed6c41ac491ad20b7a11713d721710ea28b00aa595693b"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: Ext4Inode: TooManyMethods \u2014 40 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/ext4/Ext4Inode.java"},"region":{"startLine":25}}}],"partialFingerprints":{"codehealthFindingId/v1":"cd0e3ca11713dfa49505f06dc8fa82f51b532ddd5623c6a9e32319da385c3007"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: EHFunctionInfoModel: TooManyMethods \u2014 40 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/MicrosoftCodeAnalyzer/src/main/java/ghidra/app/cmd/data/exceptionhandling/EHFunctionInfoModel.java"},"region":{"startLine":37}}}],"partialFingerprints":{"codehealthFindingId/v1":"d0cec38936ff173905bb559067119247a7203f6a359e69fa14d53bf26bd1bf06"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: DBRecord: TooManyMethods \u2014 40 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/DB/src/main/java/db/DBRecord.java"},"region":{"startLine":28}}}],"partialFingerprints":{"codehealthFindingId/v1":"eab6e36c84e4acf1dd2e67b99350897fd75549e6d48e623cab1427a129f26235"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: Field: TooManyMethods \u2014 40 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/DB/src/main/java/db/Field.java"},"region":{"startLine":55}}}],"partialFingerprints":{"codehealthFindingId/v1":"98bd839f689eb26e8cb1dc8063a09bcc734f48890d785bf2f95c3b2c22ac699e"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: DockingActionProxy: TooManyMethods \u2014 40 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Docking/src/main/java/docking/DockingActionProxy.java"},"region":{"startLine":30}}}],"partialFingerprints":{"codehealthFindingId/v1":"05611e2d39f81cf6b8a19117f4e7325b1f99b5778122921d6f9546b0819a587a"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: ToolActions: TooManyMethods \u2014 40 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Docking/src/main/java/docking/actions/ToolActions.java"},"region":{"startLine":47}}}],"partialFingerprints":{"codehealthFindingId/v1":"b2e0a6a21521e0578d39d7d593b3537f6c64b078430955bd46ce0c08b054126b"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: NumericUtilities: TooManyMethods \u2014 40 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Generic/src/main/java/ghidra/util/NumericUtilities.java"},"region":{"startLine":27}}}],"partialFingerprints":{"codehealthFindingId/v1":"ce86f6079e8b5dc51858a7f6d5185d8f29cac90a894c44462769c9af40b605a6"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: FilteringVisualGraph: TooManyMethods \u2014 40 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Graph/src/main/java/ghidra/graph/graphs/FilteringVisualGraph.java"},"region":{"startLine":61}}}],"partialFingerprints":{"codehealthFindingId/v1":"7aa565860a289ac2d9191f3bf8bf55a3bb1898921438dff2e6d39fc658de0334"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: NormalizedAddressSet: TooManyMethods \u2014 40 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/map/NormalizedAddressSet.java"},"region":{"startLine":30}}}],"partialFingerprints":{"codehealthFindingId/v1":"04afea7fa31307e339c67a0a908b415421f39ff87edad57a67ddd599b4149cc9"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: PrototypeModel: TooManyMethods \u2014 40 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/lang/PrototypeModel.java"},"region":{"startLine":38}}}],"partialFingerprints":{"codehealthFindingId/v1":"b25d97102256104572d014989047fdb3d014a9dc633be2f40d5c571e379c1dd7"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: MemoryBlockStub: TooManyMethods \u2014 40 methods. Most of these members implement mem.MemoryBlock (35 of 37 members), so moving them onto a smaller type would remove them from that contract rather than reduce it. To reduce it, split the contract instead: give each cohesive group of operations its own smaller interface and its own implementing type. Where the contract has to stay whole, move the work behind these members into collaborator types, so what is left here is a forward per member rather than a responsibility per member."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/mem/MemoryBlockStub.java"},"region":{"startLine":30}}}],"partialFingerprints":{"codehealthFindingId/v1":"26a366788ef5df1329547e66332073a9b99dacea5ad9599c820a603745521ed2"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: PackedDecode: TooManyMethods \u2014 40 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/pcode/PackedDecode.java"},"region":{"startLine":52}}}],"partialFingerprints":{"codehealthFindingId/v1":"40f7429ad175f220e1aed5707371a6e0138f7cf367a317cdf04c940e2594f578"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: PcodeDataTypeManager: TooManyMethods \u2014 40 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/pcode/PcodeDataTypeManager.java"},"region":{"startLine":44}}}],"partialFingerprints":{"codehealthFindingId/v1":"bf5f4713ae83bf00b84632a6e893da9bc09621599133a84d41a7998bcb399f2b"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: flatapi/FlatDebuggerAPI.java: FileTooLong \u2014 666 significant lines (blank, comment-only and punctuation-only lines excluded), about 93% of them inside a single declaration: FlatDebuggerAPI (72-2345). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/Debugger-api/src/main/java/ghidra/debug/flatapi/FlatDebuggerAPI.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"f38102f4443c816845627caea9a76d239d026bc6305399f47c11447d4fd28bf0"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: options/GProperties.java: FileTooLong \u2014 665 significant lines (blank, comment-only and punctuation-only lines excluded), about 97% of them inside a single declaration: GProperties (73-1473). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Generic/src/main/java/ghidra/framework/options/GProperties.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"182574816388acaa218562956232b6b8e1ca48168961c817e2ab9f9adb32c9e4"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: datastruct/TreeValueSortedMap.java: FileTooLong \u2014 665 significant lines (blank, comment-only and punctuation-only lines excluded), about 100% of them inside a single declaration: TreeValueSortedMap (34-1245). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Generic/src/main/java/ghidra/generic/util/datastruct/TreeValueSortedMap.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"efce7d7fd8daa02e71169a8f0bd5a76300b367258afb9053246b42b548673068"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: taint/TaintSliceTreeProvider.java: FileTooLong \u2014 664 significant lines (blank, comment-only and punctuation-only lines excluded), about 94% of them inside a single declaration: TaintSliceTreeProvider (59-1106). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/DecompilerDependent/src/main/java/ghidra/app/plugin/core/decompiler/taint/TaintSliceTreeProvider.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"2a8cdec853184e49e456d96a79ce3126c0b322a87879370de4766c4335e9015a"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: ingest/BulkSignatures.java: FileTooLong \u2014 663 significant lines (blank, comment-only and punctuation-only lines excluded), about 96% of them inside a single declaration: BulkSignatures (48-1174). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/BSim/src/main/java/ghidra/features/bsim/query/ingest/BulkSignatures.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"49a271a3a6edbf595e17d16ec020234e1e1a5c064c01da412bac00745bd4f884"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: actions/AutoVersionTrackingTask.java: FileTooLong \u2014 663 significant lines (blank, comment-only and punctuation-only lines excluded), about 97% of them inside a single declaration: AutoVersionTrackingTask (75-1436). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/VersionTracking/src/main/java/ghidra/feature/vt/gui/actions/AutoVersionTrackingTask.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"f1d0083fb0cb6dad321ea51a8efae527cc0beb011602d5d643c34bb1a63bd5c8"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: ingest/BSimLaunchable.java: FileTooLong \u2014 660 significant lines (blank, comment-only and punctuation-only lines excluded), about 97% of them inside a single declaration: BSimLaunchable (42-1176). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/BSim/src/main/java/ghidra/features/bsim/query/ingest/BSimLaunchable.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"58bc61b138ae0e833f0feb5a662bc405c221d0737dcd47edfac7a7c3fd7f7804"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: decompiler/DecompileCallback.java: FileTooLong \u2014 658 significant lines (blank, comment-only and punctuation-only lines excluded), about 97% of them inside a single declaration: DecompileCallback (49-1207). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/Decompiler/src/main/java/ghidra/app/decompiler/DecompileCallback.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"daaed1fe9103f951c3ad6733409830acc918aba7997a9803aaabb868ed3b7fe5"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: remote/GhidraServer.java: FileTooLong \u2014 653 significant lines (blank, comment-only and punctuation-only lines excluded), about 94% of them inside a single declaration: GhidraServer (69-1034). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/GhidraServer/src/main/java/ghidra/server/remote/GhidraServer.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"817c88de721f7668f990933564c62b75b30e62648ee7eacb626b75945ded5f4b"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: buffers/LocalBufferFile.java: FileTooLong \u2014 653 significant lines (blank, comment-only and punctuation-only lines excluded), about 98% of them inside a single declaration: LocalBufferFile (34-1584). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/DB/src/main/java/db/buffers/LocalBufferFile.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"e49119085adb7c04827af97e589582ec5122eecf1ec53379e5f6b199622d54ea"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: MemoryBox: TooManyMethods \u2014 39 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/gui/memview/MemoryBox.java"},"region":{"startLine":29}}}],"partialFingerprints":{"codehealthFindingId/v1":"a250c6a4245b5de598d7ea5ce6f2a73eea5eb9e11760ce99f35864ad7abac936"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: PcodeStability: TooManyMethods \u2014 39 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Extensions/Lisa/src/main/java/ghidra/lisa/pcode/analyses/PcodeStability.java"},"region":{"startLine":47}}}],"partialFingerprints":{"codehealthFindingId/v1":"019d33e9f9b53187ce074c50a607c7d060959682629abae82f24ca1608414e11"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: BSimLaunchable: TooManyMethods \u2014 39 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/BSim/src/main/java/ghidra/features/bsim/query/ingest/BSimLaunchable.java"},"region":{"startLine":42}}}],"partialFingerprints":{"codehealthFindingId/v1":"e923c935867827ae4b713ea9dbc2d21329ff57978b68fd3298b335df29c40dd7"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: BulkSignatures: TooManyMethods \u2014 39 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/BSim/src/main/java/ghidra/features/bsim/query/ingest/BulkSignatures.java"},"region":{"startLine":48}}}],"partialFingerprints":{"codehealthFindingId/v1":"48dc418ef6366f9bbc9fd3a6030a64e8541f5cb03bbb03e371f9c81966b3d6cd"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: DecompileDebug: TooManyMethods \u2014 39 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/Decompiler/src/main/java/ghidra/app/decompiler/DecompileDebug.java"},"region":{"startLine":50}}}],"partialFingerprints":{"codehealthFindingId/v1":"840bdb67bf5bc933877247fe2c1eb058154023c7c93406eb16b7671a3467423c"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: AbstractDockingTool: TooManyMethods \u2014 39 methods. Most of these members implement docking.Tool (33 of 35 members), so moving them onto a smaller type would remove them from that contract rather than reduce it. To reduce it, split the contract instead: give each cohesive group of operations its own smaller interface and its own implementing type. Where the contract has to stay whole, move the work behind these members into collaborator types, so what is left here is a forward per member rather than a responsibility per member."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Docking/src/main/java/docking/AbstractDockingTool.java"},"region":{"startLine":31}}}],"partialFingerprints":{"codehealthFindingId/v1":"f56d80bdbd0f8d56c22b3631fe8d4abb3741b5b63b00a6cabbbb7bcde6e84e7e"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: VisualGraphViewUpdater: TooManyMethods \u2014 39 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Graph/src/main/java/ghidra/graph/viewer/VisualGraphViewUpdater.java"},"region":{"startLine":50}}}],"partialFingerprints":{"codehealthFindingId/v1":"65e7e8dbc6e2a8272cb648c7571fd2a3bf1e49b8dd1a1b6e02428620a1c2ced7"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: GThemeValueMap: TooManyMethods \u2014 39 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Gui/src/main/java/generic/theme/GThemeValueMap.java"},"region":{"startLine":32}}}],"partialFingerprints":{"codehealthFindingId/v1":"6b93abe6a97aa3cf530ca4391c230c112acc6766d040088dbd2b0a148c02c3b6"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: ProjectDataTreePanel: TooManyMethods \u2014 39 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Project/src/main/java/ghidra/framework/main/datatree/ProjectDataTreePanel.java"},"region":{"startLine":46}}}],"partialFingerprints":{"codehealthFindingId/v1":"654180970590ad63fcd6cee947e5c86f96709de534744845a2899ea4f6ac3641"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: AddressMapDB: TooManyMethods \u2014 39 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/map/AddressMapDB.java"},"region":{"startLine":49}}}],"partialFingerprints":{"codehealthFindingId/v1":"a7038b7623c7a9c263e5fbd540e3c6915f8055c5152357a6158204d01e0f0ce7"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: Varnode: TooManyMethods \u2014 39 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/pcode/Varnode.java"},"region":{"startLine":38}}}],"partialFingerprints":{"codehealthFindingId/v1":"87eacabe132d32ab69d49ce4912b1d58a7c12346b1a7f2865dc80da3b5163ae6"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: pcode/DebuggerPcodeStepperProvider.java: FileTooLong \u2014 650 significant lines (blank, comment-only and punctuation-only lines excluded), about 92% of them inside a single declaration: DebuggerPcodeStepperProvider (72-992). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/gui/pcode/DebuggerPcodeStepperProvider.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"b5fae6a95a77e81108124a17d343a8f5816dfdbf207bc6efa5516ae6a79423d2"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: database/DBCachedObjectStoreFactory.java: FileTooLong \u2014 649 significant lines (blank, comment-only and punctuation-only lines excluded). To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/ProposedUtils/src/main/java/ghidra/util/database/DBCachedObjectStoreFactory.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"f806e8b4c17fbd7fa117603a42b9b015769a4f85bea590d116c2430a64d7a5b0"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: editor/SettableColorSwatchChooserPanel.java: FileTooLong \u2014 646 significant lines (blank, comment-only and punctuation-only lines excluded). To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Docking/src/main/java/docking/options/editor/SettableColorSwatchChooserPanel.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"05e245cd99f14b34862f5c88043df95b3a1e9887857353924535b22b933c39d4"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: docking/DialogComponentProvider.java: FileTooLong \u2014 640 significant lines (blank, comment-only and punctuation-only lines excluded), about 96% of them inside a single declaration: DialogComponentProvider (49-1525). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Docking/src/main/java/docking/DialogComponentProvider.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"3f26dbec408fb0c0cd72f07e162785ba2a774e250d349b4b7b015f646a5fb9ee"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: DecompInterface: TooManyMethods \u2014 38 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/Decompiler/src/main/java/ghidra/app/decompiler/DecompInterface.java"},"region":{"startLine":82}}}],"partialFingerprints":{"codehealthFindingId/v1":"e7ef3fef582a51d5db5d3dc6d0fb77c185c1d2adb3f7e2cd755fd50d5266027b"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: DecompilerUtils: TooManyMethods \u2014 38 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/Decompiler/src/main/java/ghidra/app/decompiler/component/DecompilerUtils.java"},"region":{"startLine":34}}}],"partialFingerprints":{"codehealthFindingId/v1":"1e629f2a9efa0b9f3791cf1519712027793deb2c37b8e40d483e4db2b9d7ff58"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: AbstractTaintState: TooManyMethods \u2014 38 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/DecompilerDependent/src/main/java/ghidra/app/plugin/core/decompiler/taint/AbstractTaintState.java"},"region":{"startLine":43}}}],"partialFingerprints":{"codehealthFindingId/v1":"e08b9d5d1b6c7bf3dd8112f73d1f7df3a7d14443fc3402a819ae6d0e237fd90e"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: DexHeader: TooManyMethods \u2014 38 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/android/dex/format/DexHeader.java"},"region":{"startLine":35}}}],"partialFingerprints":{"codehealthFindingId/v1":"4d44cddd0d0557a152d43f418c61fe36f1451d23a880b4167dcc9a1c438ac9dd"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: SquashSuperBlock: TooManyMethods \u2014 38 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/squashfs/SquashSuperBlock.java"},"region":{"startLine":25}}}],"partialFingerprints":{"codehealthFindingId/v1":"060fd5a7367fd901eea2958f025498f4a8c7a47c78cb61b1eb0cd4c4ba487c19"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: LoadPdbDialog: TooManyMethods \u2014 38 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/PDB/src/main/java/pdb/symbolserver/ui/LoadPdbDialog.java"},"region":{"startLine":66}}}],"partialFingerprints":{"codehealthFindingId/v1":"79618853b9c187052463ce807493c1e0275bbcd8500212babdcf9bbe4bfae728"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: VTFunctionAssociationProvider: TooManyMethods \u2014 38 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/VersionTracking/src/main/java/ghidra/feature/vt/gui/provider/functionassociation/VTFunctionAssociationProvider.java"},"region":{"startLine":69}}}],"partialFingerprints":{"codehealthFindingId/v1":"6ccb314514cfcfeca3dfb97dbcaa4786f0dcacefc95d6b960cf1cb532e8abb4e"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: GTreeTableNode: TooManyMethods \u2014 38 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Docking/src/main/java/docking/widgets/gtreetable/GTreeTableNode.java"},"region":{"startLine":24}}}],"partialFingerprints":{"codehealthFindingId/v1":"b4b1bc1fbfdd554a29babfd3b4d464f40dae87cf8c9fe7c4fdf1fd57318f322b"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: TaskMonitorComponent: TooManyMethods \u2014 38 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Docking/src/main/java/ghidra/util/task/TaskMonitorComponent.java"},"region":{"startLine":45}}}],"partialFingerprints":{"codehealthFindingId/v1":"adb44ed64a257fcb4098a3fc93df5f1a3a98bbef13207b757b968b1f2a98adb0"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: Constructor: TooManyMethods \u2014 38 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghsymbol/Constructor.java"},"region":{"startLine":34}}}],"partialFingerprints":{"codehealthFindingId/v1":"51c49aed58afed452b86d366a99f4dbdce5eb6bd0c074450d7170a4e19ee8de2"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: ProjectDataTypeManager: TooManyMethods \u2014 38 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/ProjectDataTypeManager.java"},"region":{"startLine":43}}}],"partialFingerprints":{"codehealthFindingId/v1":"b2b3e6b157f408be4e2261016397a92c5c63ce060de6c34e417e25d05e25bf9d"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: ProgramDataTypeManager: TooManyMethods \u2014 38 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/ProgramDataTypeManager.java"},"region":{"startLine":42}}}],"partialFingerprints":{"codehealthFindingId/v1":"87dd3b68bd9fef5c5c5b2d4f2cab08a753ce8408d9f9b976b341b3ac29c84c66"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: UnionDB: TooManyMethods \u2014 38 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/UnionDB.java"},"region":{"startLine":33}}}],"partialFingerprints":{"codehealthFindingId/v1":"5c71941bb4491a2251dc0a8ff82434e2a3b298beec90291c282031175e44a7d6"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: mvc/FGController.java: FileTooLong \u2014 628 significant lines (blank, comment-only and punctuation-only lines excluded), about 93% of them inside a single declaration: FGController (65-1198). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/FunctionGraph/src/main/java/ghidra/app/plugin/core/functiongraph/mvc/FGController.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"deb303ee47bc714344da966542cb69b80db2ab58c3258edc10e3d1ec1c909b91"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: data/DataTypeUtilities.java: FileTooLong \u2014 621 significant lines (blank, comment-only and punctuation-only lines excluded), about 98% of them inside a single declaration: DataTypeUtilities (32-1315). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/DataTypeUtilities.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"e07542cd57812587e8c277aba1d3ecad8c5f79ee09e3f23e97d6f8fa9d68a175"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: decompiler/DecompileProcess.java: FileTooLong \u2014 618 significant lines (blank, comment-only and punctuation-only lines excluded), about 98% of them inside a single declaration: DecompileProcess (49-947). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/Decompiler/src/main/java/ghidra/app/decompiler/DecompileProcess.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"63a1c0f58186ada99e0b1303efc95df9486ebcc7f08bed68c162c44df4d29d38"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: ui/LoadPdbDialog.java: FileTooLong \u2014 617 significant lines (blank, comment-only and punctuation-only lines excluded), about 93% of them inside a single declaration: LoadPdbDialog (66-940). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/PDB/src/main/java/pdb/symbolserver/ui/LoadPdbDialog.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"ddda0a4d917cc5845e80834594c6b55da00d60b85d5e5795e3f355ba9c97cabd"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: options/AbstractOptions.java: FileTooLong \u2014 617 significant lines (blank, comment-only and punctuation-only lines excluded), about 97% of them inside a single declaration: AbstractOptions (36-997). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Gui/src/main/java/ghidra/framework/options/AbstractOptions.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"0d1622f4916d10bdba749b157d396d10644ae00521d31f6a93c451f17c330f1c"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: JdiManagerImpl: TooManyMethods \u2014 37 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/Debugger-jpda/src/main/java/ghidra/dbg/jdi/manager/impl/JdiManagerImpl.java"},"region":{"startLine":36}}}],"partialFingerprints":{"codehealthFindingId/v1":"033455982319545b0eb6fa9a5a5ab448ab5dfe735656aced1e3d0ef425b1c0d2"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: AbstractQueryTableModel: TooManyMethods \u2014 37 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/gui/model/AbstractQueryTableModel.java"},"region":{"startLine":38}}}],"partialFingerprints":{"codehealthFindingId/v1":"ecfd1c3235040568d733c6a1b0ce4838a0e67aef2ada935bca2f6e1a4f932845"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: DBCachedObjectIndex: TooManyMethods \u2014 37 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/ProposedUtils/src/main/java/ghidra/util/database/DBCachedObjectIndex.java"},"region":{"startLine":43}}}],"partialFingerprints":{"codehealthFindingId/v1":"49e2073ca41588b7a5e1eb6242441095033afd0edae8f4615e5c46d86b635275"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: DBCachedObjectStoreMap: TooManyMethods \u2014 37 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/ProposedUtils/src/main/java/ghidra/util/database/DBCachedObjectStoreMap.java"},"region":{"startLine":36}}}],"partialFingerprints":{"codehealthFindingId/v1":"6296fa30056ad8a6987d0cf0e384390f25cac9c6274e6181b89e468a21d6d237"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: DataDegVertex: TooManyMethods \u2014 37 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/DataGraph/src/main/java/datagraph/data/graph/DataDegVertex.java"},"region":{"startLine":46}}}],"partialFingerprints":{"codehealthFindingId/v1":"2d40d20b5a4515d76ac2fbfe9272def0d961e5b036b044778a4e42365fe78bbf"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: ExecuteDiffDialog: TooManyMethods \u2014 37 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/ProgramDiff/src/main/java/ghidra/app/plugin/core/diff/ExecuteDiffDialog.java"},"region":{"startLine":40}}}],"partialFingerprints":{"codehealthFindingId/v1":"9116bde7126e6fc40df101fb3b17966e00561c55fbd8d9d70fa588dc1164bdbf"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: FilterTextField: TooManyMethods \u2014 37 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Docking/src/main/java/docking/widgets/filter/FilterTextField.java"},"region":{"startLine":41}}}],"partialFingerprints":{"codehealthFindingId/v1":"c40516eaa66eb0567ee780437fbf67d83700a11da217d2e1eb547c169b5d2da8"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: GridLocationMap: TooManyMethods \u2014 37 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Graph/src/main/java/ghidra/graph/viewer/layout/GridLocationMap.java"},"region":{"startLine":40}}}],"partialFingerprints":{"codehealthFindingId/v1":"000697b9e15a7845b3038d9db07179bd8c209efbf1b5264d0f7f3a7bb7c9f121"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: GhidraURL: TooManyMethods \u2014 37 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Project/src/main/java/ghidra/framework/protocol/ghidra/GhidraURL.java"},"region":{"startLine":57}}}],"partialFingerprints":{"codehealthFindingId/v1":"35b3baa52d64a68732b696dc5693cac189247e3a18688d76bdcf8584bdef6809"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: ConsistencyChecker: TooManyMethods \u2014 37 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slgh_compile/ConsistencyChecker.java"},"region":{"startLine":32}}}],"partialFingerprints":{"codehealthFindingId/v1":"890af14bbb60000297301f03453c2f76d7a410070d77b730478a0778b4bb435a"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: VariableDB: TooManyMethods \u2014 37 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/function/VariableDB.java"},"region":{"startLine":41}}}],"partialFingerprints":{"codehealthFindingId/v1":"650fe9d93cc3912ef445f4dd53c5615e5f874f074f63f03b3042be0915971520"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: SymbolDatabaseAdapter: TooManyMethods \u2014 37 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/symbol/SymbolDatabaseAdapter.java"},"region":{"startLine":37}}}],"partialFingerprints":{"codehealthFindingId/v1":"1a2e6ce269cea5636653b896749e26839fcf240952f50b72ac5997b497b7ac9e"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: DataTypeWriter: TooManyMethods \u2014 37 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/DataTypeWriter.java"},"region":{"startLine":34}}}],"partialFingerprints":{"codehealthFindingId/v1":"56d8bc84e000cc02e247e8d7738fa8233ffecf85d22a2c530e3234c124c94cb7"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: function/FunctionVariables.java: FileTooLong \u2014 613 significant lines (blank, comment-only and punctuation-only lines excluded), about 98% of them inside a single declaration: FunctionVariables (34-1024). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/function/FunctionVariables.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"df0d712f57fd5f9698cd6a76f383500db1c4cf893f3cf115b6269229e917442e"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: tracermi/RmiClient.java: FileTooLong \u2014 612 significant lines (blank, comment-only and punctuation-only lines excluded), about 97% of them inside a single declaration: RmiClient (42-834). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/Debugger-rmi-trace/src/main/java/ghidra/app/plugin/core/debug/client/tracermi/RmiClient.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"6c834bb033181a824d2f22dac391b14fcfcbab89f778c3d86e80b39b7adbdf00"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: markuptable/VTMarkupItemsTableProvider.java: FileTooLong \u2014 607 significant lines (blank, comment-only and punctuation-only lines excluded), about 92% of them inside a single declaration: VTMarkupItemsTableProvider (73-1024). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/VersionTracking/src/main/java/ghidra/feature/vt/gui/provider/markuptable/VTMarkupItemsTableProvider.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"85b6047eed41a271530954057f4c6fdae79765faae223525a8a79bf3d1cf7bbb"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: data/StringDataInstance.java: FileTooLong \u2014 607 significant lines (blank, comment-only and punctuation-only lines excluded), about 97% of them inside a single declaration: StringDataInstance (47-1252). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/StringDataInstance.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"a934dd5eb272f0fbc04bfa97bb4c67ecba0fc8ba508e4d3140a971420b606832"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: matchtable/ApplyMarkupPropertyEditor.java: FileTooLong \u2014 606 significant lines (blank, comment-only and punctuation-only lines excluded), about 96% of them inside a single declaration: ApplyMarkupPropertyEditor (49-877). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/VersionTracking/src/main/java/ghidra/feature/vt/gui/provider/matchtable/ApplyMarkupPropertyEditor.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"f7b8e72db10c89d2bd3fdc66ee9a41bf26de0475aafcfc6fb807b11af7d34717"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: floatformat/BigFloat.java: FileTooLong \u2014 605 significant lines (blank, comment-only and punctuation-only lines excluded), about 99% of them inside a single declaration: BigFloat (35-1175). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcode/floatformat/BigFloat.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"75c56bdae96d76bb033e90c2ea354e68edccc41e8fd899b3e2aecc9b75275f17"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: MemviewPanel: TooManyMethods \u2014 36 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/gui/memview/MemviewPanel.java"},"region":{"startLine":31}}}],"partialFingerprints":{"codehealthFindingId/v1":"106a618c18e5225dcd16c74baae1569f22cfdeb4b626bfba50af743841aab9a5"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: ObjectsTreePanel: TooManyMethods \u2014 36 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/gui/model/ObjectsTreePanel.java"},"region":{"startLine":43}}}],"partialFingerprints":{"codehealthFindingId/v1":"2261be54531d5fc2309767e3977b7f23c8e3daf0c4de8e0646bc2ad3cbe1039e"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: DebuggerStaticMappingContext: TooManyMethods \u2014 36 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/service/modules/DebuggerStaticMappingContext.java"},"region":{"startLine":34}}}],"partialFingerprints":{"codehealthFindingId/v1":"0b255e152a55f97f9d1270c8e0bab027ecd62931862822dc2cbe017df60b4dc0"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: DynamicStaticSynchronizationPlugin: TooManyMethods \u2014 36 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/service/modules/DynamicStaticSynchronizationPlugin.java"},"region":{"startLine":85}}}],"partialFingerprints":{"codehealthFindingId/v1":"e72564b1570f6e256e20884afe17fb4af0e4ff40a06e923155c09c24dee7f59f"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: DBTraceSymbolManager: TooManyMethods \u2014 36 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/symbol/DBTraceSymbolManager.java"},"region":{"startLine":60}}}],"partialFingerprints":{"codehealthFindingId/v1":"930b0603103b1d840f86228308ea3ead8282a08b3d8d46f5713f7c8326a5e9ce"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: PatchStep: TooManyMethods \u2014 36 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/model/time/schedule/PatchStep.java"},"region":{"startLine":41}}}],"partialFingerprints":{"codehealthFindingId/v1":"8dafbfcfea6b5eead9e40ad4d8486a919a0529ca0bb0521661acab60473e3212"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: TaintPlugin: TooManyMethods \u2014 36 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/DecompilerDependent/src/main/java/ghidra/app/plugin/core/decompiler/taint/TaintPlugin.java"},"region":{"startLine":79}}}],"partialFingerprints":{"codehealthFindingId/v1":"e6552f04f9174be7d2acc3aec83153cfaee77a81d529f55fcdb844e8b1cfcce9"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: SystemInfoStream: TooManyMethods \u2014 36 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/dump/mdmp/SystemInfoStream.java"},"region":{"startLine":25}}}],"partialFingerprints":{"codehealthFindingId/v1":"61235af243fc541f250d11b5cb4732011acac33c743e7da05db52eeefd6f1e91"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: TypeDescriptorModel: TooManyMethods \u2014 36 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/MicrosoftCodeAnalyzer/src/main/java/ghidra/app/cmd/data/TypeDescriptorModel.java"},"region":{"startLine":41}}}],"partialFingerprints":{"codehealthFindingId/v1":"8de7976e3b7c7f54d7ecc6b7aaa02ff09256cb1cff1892b8c143229d07eb3b20"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: Schema: TooManyMethods \u2014 36 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/DB/src/main/java/db/Schema.java"},"region":{"startLine":28}}}],"partialFingerprints":{"codehealthFindingId/v1":"84e71bd04078dede17777c1c9d60cb27b77c507adfe65e78ebcff3cd9c99d5a9"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: VarKeyInteriorNode: TooManyMethods \u2014 36 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/DB/src/main/java/db/VarKeyInteriorNode.java"},"region":{"startLine":34}}}],"partialFingerprints":{"codehealthFindingId/v1":"b38eec67af6394a10ee7c1de881c36c461ac6d6515ce209063b611343cccca13"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: ComponentNode: TooManyMethods \u2014 36 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Docking/src/main/java/docking/ComponentNode.java"},"region":{"startLine":37}}}],"partialFingerprints":{"codehealthFindingId/v1":"3a5a6c838c840204e1d4bf3ca23be12839aa1d49f24c618adad4bfbdc6ca5a58"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: AbstractGCellRenderer: TooManyMethods \u2014 36 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Docking/src/main/java/docking/widgets/AbstractGCellRenderer.java"},"region":{"startLine":54}}}],"partialFingerprints":{"codehealthFindingId/v1":"bd22c6b742775de1200d2bff13c449edd16ca5a40dba9292d29a5b5ca7acecc8"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: SimpleTextField: TooManyMethods \u2014 36 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Docking/src/main/java/docking/widgets/fieldpanel/field/SimpleTextField.java"},"region":{"startLine":33}}}],"partialFingerprints":{"codehealthFindingId/v1":"790f483da49b5be95c9a5e0377579c63fa4bf47bdce42532f147879c00d04051"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: TableUpdateJob: TooManyMethods \u2014 36 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Docking/src/main/java/docking/widgets/table/threaded/TableUpdateJob.java"},"region":{"startLine":51}}}],"partialFingerprints":{"codehealthFindingId/v1":"8ded115ebd60f5684600e70272ca756356e280aa28fbd990a0b11d2520eceece"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: DataTable: TooManyMethods \u2014 36 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Generic/src/main/java/ghidra/util/datastruct/DataTable.java"},"region":{"startLine":25}}}],"partialFingerprints":{"codehealthFindingId/v1":"8b6c893e077e1cb92a011abb2b4aeeab33c4fa0a4183a6c6d2a8905efd2c0817"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: DefaultProject: TooManyMethods \u2014 36 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Project/src/main/java/ghidra/framework/project/DefaultProject.java"},"region":{"startLine":50}}}],"partialFingerprints":{"codehealthFindingId/v1":"806b0898a998fd588f4b6e9ad3296740918e283ab675dd58b08d760855be5b10"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: Translate: TooManyMethods \u2014 36 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/translate/Translate.java"},"region":{"startLine":32}}}],"partialFingerprints":{"codehealthFindingId/v1":"e981632daef8ba78b4c9fb26e98d2836f2b5adb6bd428938007b56d90698b0fe"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: CategoryDB: TooManyMethods \u2014 36 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/CategoryDB.java"},"region":{"startLine":36}}}],"partialFingerprints":{"codehealthFindingId/v1":"134636b599700b23490ab6c5ae87aac724b7a617261780844ca05881316b2e95"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: DataTypeComponentDB: TooManyMethods \u2014 36 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/DataTypeComponentDB.java"},"region":{"startLine":32}}}],"partialFingerprints":{"codehealthFindingId/v1":"cb9b0caa76e1f539c55f8f7fdf1405911787deb67affefe19486c3fc8f1beb88"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: FunctionVariables: TooManyMethods \u2014 36 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/function/FunctionVariables.java"},"region":{"startLine":34}}}],"partialFingerprints":{"codehealthFindingId/v1":"b8d1609dce7e46b1030b723dfed89b08df2fcfd85365e0440cfc1ae420980d0e"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: HighSymbol: TooManyMethods \u2014 36 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/pcode/HighSymbol.java"},"region":{"startLine":37}}}],"partialFingerprints":{"codehealthFindingId/v1":"6172024c6f7c6ce1d2c0946a3973323076e5a036ea427289a1e9e1ddcbd2a5b9"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: naming/MDSpecialName.java: FileTooLong \u2014 598 significant lines (blank, comment-only and punctuation-only lines excluded). To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/MicrosoftDmang/src/main/java/mdemangler/naming/MDSpecialName.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"a71bc379a5d006740883ab95b14ab3e7a1a0a11b5c230813be5229cc22a0f495"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: database/DBTrace.java: FileTooLong \u2014 595 significant lines (blank, comment-only and punctuation-only lines excluded), about 91% of them inside a single declaration: DBTrace (76-904). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/DBTrace.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"71262097a8e35d71c224a0751a1782f5b89b6bafe943126cb7135999d08946e4"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: decompiler/DecompileDebug.java: FileTooLong \u2014 593 significant lines (blank, comment-only and punctuation-only lines excluded), about 96% of them inside a single declaration: DecompileDebug (50-847). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/Decompiler/src/main/java/ghidra/app/decompiler/DecompileDebug.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"e3fae1156da48e55810031cee8fa2f163e33b2c8dd0a2a70f53a354011d2a5f9"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: analyzers/FunctionStartAnalyzer.java: FileTooLong \u2014 592 significant lines (blank, comment-only and punctuation-only lines excluded), about 90% of them inside a single declaration: FunctionStartAnalyzer (47-980). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/BytePatterns/src/main/java/ghidra/app/analyzers/FunctionStartAnalyzer.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"b9cab22e6bacfac01c8c17d3643b5d91250eace4e6a008663c0c33173dabb305"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: program/AbstractDBTraceProgramViewListing.java: FileTooLong \u2014 590 significant lines (blank, comment-only and punctuation-only lines excluded), about 94% of them inside a single declaration: AbstractDBTraceProgramViewListing (57-939). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/program/AbstractDBTraceProgramViewListing.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"0f44acdba135d8788b164b4969ca27bb7e2b23874ac44d43cce178bd67486db6"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: database/DBCachedObjectStore.java: FileTooLong \u2014 587 significant lines (blank, comment-only and punctuation-only lines excluded), about 97% of them inside a single declaration: DBCachedObjectStore (58-1304). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/ProposedUtils/src/main/java/ghidra/util/database/DBCachedObjectStore.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"06668104655027381eb74f78bbec3132d3b89151a22b1fd2d312bc9ccb51365e"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: map/AddressMapDB.java: FileTooLong \u2014 586 significant lines (blank, comment-only and punctuation-only lines excluded), about 97% of them inside a single declaration: AddressMapDB (49-1020). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/map/AddressMapDB.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"35ed90c52d110eff9c1028e84097f4e719b5f8c8498f2dfced6c1abee805b8b3"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: DBTraceReferenceSpace: TooManyMethods \u2014 35 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/symbol/DBTraceReferenceSpace.java"},"region":{"startLine":53}}}],"partialFingerprints":{"codehealthFindingId/v1":"e6919d1998d7384fd2eb8d568ac168bd5b0e7c3e64268fca6b2fee66227f0ad1"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: FunctionGraphCodeComparisonView: TooManyMethods \u2014 35 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/CodeCompare/src/main/java/ghidra/features/codecompare/functiongraph/FunctionGraphCodeComparisonView.java"},"region":{"startLine":72}}}],"partialFingerprints":{"codehealthFindingId/v1":"6c6d46356a8bda3a1d6d45be9ee07d00c6675e2451fa8efa8754ede716675531"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: FunctionGraphPlugin: TooManyMethods \u2014 35 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/FunctionGraph/src/main/java/ghidra/app/plugin/core/functiongraph/FunctionGraphPlugin.java"},"region":{"startLine":65}}}],"partialFingerprints":{"codehealthFindingId/v1":"54f27ad1a15b6bc41cdf1a771ace6a9ee7385d37749123edae0c3659ef6998dd"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: MarkupItemImpl: TooManyMethods \u2014 35 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/VersionTracking/src/main/java/ghidra/feature/vt/api/impl/MarkupItemImpl.java"},"region":{"startLine":37}}}],"partialFingerprints":{"codehealthFindingId/v1":"48e957f747f048b18267ee0324e2cc408091df4ae078cb76de1df87120de0452"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: DataBuffer: TooManyMethods \u2014 35 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/DB/src/main/java/db/buffers/DataBuffer.java"},"region":{"startLine":28}}}],"partialFingerprints":{"codehealthFindingId/v1":"21207abc3052be1193840548e51453630351a1f285eb958e4a9b7282b58a4fab"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: MultiRowLayout: TooManyMethods \u2014 35 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Docking/src/main/java/docking/widgets/fieldpanel/support/MultiRowLayout.java"},"region":{"startLine":33}}}],"partialFingerprints":{"codehealthFindingId/v1":"cfda62ebc957840532023707cc5e7da580ebfae2d0f1e55fde2107b988beaee0"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: GTableWidget: TooManyMethods \u2014 35 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Docking/src/main/java/docking/widgets/table/GTableWidget.java"},"region":{"startLine":35}}}],"partialFingerprints":{"codehealthFindingId/v1":"cd92c6c2b3601f0d4d98ac2e01f5228afc2e55852c409f179f3f2a3af31186cb"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: TableModelWrapper: TooManyMethods \u2014 35 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Docking/src/main/java/docking/widgets/table/TableModelWrapper.java"},"region":{"startLine":37}}}],"partialFingerprints":{"codehealthFindingId/v1":"5523163f922b863ca3eae52b5f1c68aba3b775c91dfb37eaa05d92d5b152a841"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: ColumnFilterDialog: TooManyMethods \u2014 35 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Docking/src/main/java/docking/widgets/table/constraint/dialog/ColumnFilterDialog.java"},"region":{"startLine":49}}}],"partialFingerprints":{"codehealthFindingId/v1":"9e494cebefe0568d262dd65fcc5e4fc23952a0c7daf4ad4b9748540a7d64e11d"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: AbstractIntegerTextField: TooManyMethods \u2014 35 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Docking/src/main/java/docking/widgets/textfield/integer/AbstractIntegerTextField.java"},"region":{"startLine":33}}}],"partialFingerprints":{"codehealthFindingId/v1":"f26146bd43b537b2f98127908017071d6355ea3e1e486a6bfadf1f1f6a7e454a"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: ObjectStorageStreamAdapter: TooManyMethods \u2014 35 methods. Most of these members implement util.ObjectStorage (30 of 34 members), so moving them onto a smaller type would remove them from that contract rather than reduce it. To reduce it, split the contract instead: give each cohesive group of operations its own smaller interface and its own implementing type. Where the contract has to stay whole, move the work behind these members into collaborator types, so what is left here is a forward per member rather than a responsibility per member."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Generic/src/main/java/ghidra/util/ObjectStorageStreamAdapter.java"},"region":{"startLine":26}}}],"partialFingerprints":{"codehealthFindingId/v1":"2108000bb5aff280d2547f2cd56a09d44513deaf91d109c023a9075f8fc1356d"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: UiDefaultsMapper: TooManyMethods \u2014 35 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Gui/src/main/java/generic/theme/laf/UiDefaultsMapper.java"},"region":{"startLine":74}}}],"partialFingerprints":{"codehealthFindingId/v1":"3fc27bca77366fdf0c7fa4f4d67a00016ef7e31305ce080456a171edaed5b3f4"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: HTMLUtilities: TooManyMethods \u2014 35 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Gui/src/main/java/ghidra/util/HTMLUtilities.java"},"region":{"startLine":121}}}],"partialFingerprints":{"codehealthFindingId/v1":"a4dab40facb9944ac421e72be67f925f9d07c6bf2e47e9d1a80d9359de7075ad"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: AbstractTransactionManager: TooManyMethods \u2014 35 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Project/src/main/java/ghidra/framework/data/AbstractTransactionManager.java"},"region":{"startLine":27}}}],"partialFingerprints":{"codehealthFindingId/v1":"0d3ed7fb7b62d913cfcd9e0e94e32740e86ac34e707a008d2f5b2884e515c2c2"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: DefaultProjectManager: TooManyMethods \u2014 35 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Project/src/main/java/ghidra/framework/project/DefaultProjectManager.java"},"region":{"startLine":45}}}],"partialFingerprints":{"codehealthFindingId/v1":"575c792f9e2c53920e7568bb4581e153cf8ffed0b411c03a366479d67d17abf2"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: DataTypeArchiveDB: TooManyMethods \u2014 35 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/DataTypeArchiveDB.java"},"region":{"startLine":43}}}],"partialFingerprints":{"codehealthFindingId/v1":"4078e54765a184ada6b70e6201b07f23a4d4d8afe288316af205d15ac5123df9"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: DefaultAddressFactory: TooManyMethods \u2014 35 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/address/DefaultAddressFactory.java"},"region":{"startLine":29}}}],"partialFingerprints":{"codehealthFindingId/v1":"1bd89e09c9ea11d297e5d91423c27d62a280d71ffaf1f370aaa73d57541efcd8"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: ArrayDataType: TooManyMethods \u2014 35 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/ArrayDataType.java"},"region":{"startLine":30}}}],"partialFingerprints":{"codehealthFindingId/v1":"278f5f391277910d9b1731b34387989ee73f8e0303efebf8b2d368c8affc5dd6"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: UnionDataType: TooManyMethods \u2014 35 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/UnionDataType.java"},"region":{"startLine":31}}}],"partialFingerprints":{"codehealthFindingId/v1":"2754e5f34efffceef7fb027b32f3ca829f5bb79167de1ced33f06fed84f0f35a"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: InvalidPrototype: TooManyMethods \u2014 35 methods. Most of these members implement lang.InstructionPrototype (31 of 34 members), so moving them onto a smaller type would remove them from that contract rather than reduce it. To reduce it, split the contract instead: give each cohesive group of operations its own smaller interface and its own implementing type. Where the contract has to stay whole, move the work behind these members into collaborator types, so what is left here is a forward per member rather than a responsibility per member."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/lang/InvalidPrototype.java"},"region":{"startLine":32}}}],"partialFingerprints":{"codehealthFindingId/v1":"189b07e0ed87861739612470fdb975dc57c9355db7de25d93da8526df6554517"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: DynamicHash: TooManyMethods \u2014 35 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/pcode/DynamicHash.java"},"region":{"startLine":39}}}],"partialFingerprints":{"codehealthFindingId/v1":"80809088adea8e0ff1ffbe7bd7009b00c53953b37037e369410f40c0a0a16d68"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: main/FrontEndTool.java: FileTooLong \u2014 583 significant lines (blank, comment-only and punctuation-only lines excluded), about 90% of them inside a single declaration: FrontEndTool (90-1052). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Project/src/main/java/ghidra/framework/main/FrontEndTool.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"eeb35095a3866c1eca9a34c42e0d5274a2b28815a840923961970cd20e85451b"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: model/ObjectTreeModel.java: FileTooLong \u2014 582 significant lines (blank, comment-only and punctuation-only lines excluded), about 96% of them inside a single declaration: ObjectTreeModel (42-962). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/gui/model/ObjectTreeModel.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"a4e6580647d86e871d8f45abc54aa202450b009d8e27a0c5903fc6d62c0f3195"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: remote/RepositoryHandleImpl.java: FileTooLong \u2014 576 significant lines (blank, comment-only and punctuation-only lines excluded), about 97% of them inside a single declaration: RepositoryHandleImpl (41-888). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/GhidraServer/src/main/java/ghidra/server/remote/RepositoryHandleImpl.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"7014732f295b8893227b0659900c65f7bbed2e78e55145e5debd47cf9cf78f59"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: copying/DebuggerCopyIntoProgramDialog.java: FileTooLong \u2014 575 significant lines (blank, comment-only and punctuation-only lines excluded), about 94% of them inside a single declaration: DebuggerCopyIntoProgramDialog (55-873). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/gui/copying/DebuggerCopyIntoProgramDialog.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"c3eb6b311eb4ed5b90c1f4461017637a99ae080195f96233246072a95d2f91ce"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: analyzers/JavaAnalyzer.java: FileTooLong \u2014 570 significant lines (blank, comment-only and punctuation-only lines excluded), about 94% of them inside a single declaration: JavaAnalyzer (52-801). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Processors/JVM/src/main/java/ghidra/javaclass/analyzers/JavaAnalyzer.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"c583f0a9f0abb5a44ed6a5cd84da2fe48b537fdd55443add2561a3b2c3599a22"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: DebuggerListingPlugin: TooManyMethods \u2014 34 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/gui/listing/DebuggerListingPlugin.java"},"region":{"startLine":92}}}],"partialFingerprints":{"codehealthFindingId/v1":"341242717f0ab868f4ec792290dd6128bc5ffd430ea0dc3b9826d445fd159b5c"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: AbstractBaseDBTraceCodeUnitsMemoryView: TooManyMethods \u2014 34 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/listing/AbstractBaseDBTraceCodeUnitsMemoryView.java"},"region":{"startLine":37}}}],"partialFingerprints":{"codehealthFindingId/v1":"32fd22f17bfd4053c1b243cab238e9090e1b0baef499c81d3f43d67c19866491"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: DBTraceProgramViewRootModule: TooManyMethods \u2014 34 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/program/DBTraceProgramViewRootModule.java"},"region":{"startLine":30}}}],"partialFingerprints":{"codehealthFindingId/v1":"b36d49002b7764b4250160557526406fd6f764ff2f05409aa57184a5aee68912"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: DBTraceReferenceManager: TooManyMethods \u2014 34 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/symbol/DBTraceReferenceManager.java"},"region":{"startLine":46}}}],"partialFingerprints":{"codehealthFindingId/v1":"c1e706ae9d8fc13be0a37e4df876f6fe92eb751e71b2cff22537005fd4ffebfa"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: KeyPath: TooManyMethods \u2014 34 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/model/target/path/KeyPath.java"},"region":{"startLine":32}}}],"partialFingerprints":{"codehealthFindingId/v1":"0c64b61dd9f4de3efaf28e22d9df9d3f578f37e9a28ab6d688f38a5bbf777d5a"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: TaintVec: TooManyMethods \u2014 34 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/TaintAnalysis/src/main/java/ghidra/taint/model/TaintVec.java"},"region":{"startLine":36}}}],"partialFingerprints":{"codehealthFindingId/v1":"6b13b6278a8775177a4ca2dc804ff6a8cc6669c90ae14d2ec32a4e7a30eceee2"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: DecompilerNestedLayout: TooManyMethods \u2014 34 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/FunctionGraphDecompilerExtension/src/main/java/ghidra/app/plugin/core/functiongraph/graph/layout/DecompilerNestedLayout.java"},"region":{"startLine":69}}}],"partialFingerprints":{"codehealthFindingId/v1":"bfe4ea641c9a2903d4227f7fbd2c41cda508cd6171ad4a697787b7e37bf61de4"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: DiffController: TooManyMethods \u2014 34 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/ProgramDiff/src/main/java/ghidra/app/plugin/core/diff/DiffController.java"},"region":{"startLine":39}}}],"partialFingerprints":{"codehealthFindingId/v1":"b6b4c5c29f378254e1f3bb4db621ba438a892eb81f623fa19e8c0c4c29be8c16"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: AutoVersionTrackingTask: TooManyMethods \u2014 34 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/VersionTracking/src/main/java/ghidra/feature/vt/gui/actions/AutoVersionTrackingTask.java"},"region":{"startLine":75}}}],"partialFingerprints":{"codehealthFindingId/v1":"248cac838c764441211a8b9705fa6db3313cf09426c3c65217dee3fcc710895b"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: ObjectStorageAdapterDB: TooManyMethods \u2014 34 methods. Most of these members implement util.ObjectStorage (30 of 33 members), so moving them onto a smaller type would remove them from that contract rather than reduce it. To reduce it, split the contract instead: give each cohesive group of operations its own smaller interface and its own implementing type. Where the contract has to stay whole, move the work behind these members into collaborator types, so what is left here is a forward per member rather than a responsibility per member."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/DB/src/main/java/db/ObjectStorageAdapterDB.java"},"region":{"startLine":30}}}],"partialFingerprints":{"codehealthFindingId/v1":"4ac1d4cb86c69850ef8671c1601f88e5f2f41417fce774d69bccc322dae63150"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: SideKickVerticalScrollbar: TooManyMethods \u2014 34 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Docking/src/main/java/docking/widgets/SideKickVerticalScrollbar.java"},"region":{"startLine":30}}}],"partialFingerprints":{"codehealthFindingId/v1":"172153b796bf96563e00cef93d1dba6ccdab9d0ee0eca6b28e3be6d2528928fc"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: GhidraComboBox: TooManyMethods \u2014 34 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Docking/src/main/java/docking/widgets/combobox/GhidraComboBox.java"},"region":{"startLine":61}}}],"partialFingerprints":{"codehealthFindingId/v1":"04ce9e7e65c90978061712be9f826d5a8668e440fc440d92550877ada3ac1ff3"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: FieldSelection: TooManyMethods \u2014 34 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Docking/src/main/java/docking/widgets/fieldpanel/support/FieldSelection.java"},"region":{"startLine":39}}}],"partialFingerprints":{"codehealthFindingId/v1":"d6b395c5e4fe49fae8b3c679961be7074fd141fadc235f11db36c7020a5ca21c"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: RowLayout: TooManyMethods \u2014 34 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Docking/src/main/java/docking/widgets/fieldpanel/support/RowLayout.java"},"region":{"startLine":34}}}],"partialFingerprints":{"codehealthFindingId/v1":"a698dd16d3a2ed171ffc32b01e782e9a051bdb6a9a7a5a3fd039f3e17d6f55f1"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: TextComponentSearchResults: TooManyMethods \u2014 34 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Docking/src/main/java/docking/widgets/search/TextComponentSearchResults.java"},"region":{"startLine":40}}}],"partialFingerprints":{"codehealthFindingId/v1":"b37f4f426d9be0e13c50c1c0fb0ab5ee755677b1b25244d0e200fc8bd02eb040"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: LongArrayList: TooManyMethods \u2014 34 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Generic/src/main/java/ghidra/util/datastruct/LongArrayList.java"},"region":{"startLine":26}}}],"partialFingerprints":{"codehealthFindingId/v1":"cdc80075fe9492b78cdd117e4821ebcb7a834095ba0acf4c073d0db7f42c411e"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: GraphViewer: TooManyMethods \u2014 34 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Graph/src/main/java/ghidra/graph/viewer/GraphViewer.java"},"region":{"startLine":59}}}],"partialFingerprints":{"codehealthFindingId/v1":"98add5a0cb378c171de599c62b0e3822f85b9379508463f7c2597feea8e87e4a"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: StubThemeManager: TooManyMethods \u2014 34 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Gui/src/main/java/generic/theme/StubThemeManager.java"},"region":{"startLine":32}}}],"partialFingerprints":{"codehealthFindingId/v1":"0b4d4cdf2915ab9e21385364bee38c75d8e77979e0fe53bd31720ee27d52642f"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: ResourceManager: TooManyMethods \u2014 34 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Gui/src/main/java/resources/ResourceManager.java"},"region":{"startLine":49}}}],"partialFingerprints":{"codehealthFindingId/v1":"df467c976a65695977f9952c43b8d19d97529d12ffd306e98efc7242f218b9bf"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: ToolButton: TooManyMethods \u2014 34 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Project/src/main/java/ghidra/framework/main/ToolButton.java"},"region":{"startLine":59}}}],"partialFingerprints":{"codehealthFindingId/v1":"e82dd09266f6b43d1d2bbb0b93f2a5183df9cf074efe5cda7971e7941661385f"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: KeyBindingsPanel: TooManyMethods \u2014 34 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Project/src/main/java/ghidra/framework/plugintool/dialog/KeyBindingsPanel.java"},"region":{"startLine":53}}}],"partialFingerprints":{"codehealthFindingId/v1":"44d18a01949c9d526269de2bc1021ba702cf73b505d9b46a39c62fb3b75c9eaf"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: ParserWalker: TooManyMethods \u2014 34 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/processors/sleigh/ParserWalker.java"},"region":{"startLine":35}}}],"partialFingerprints":{"codehealthFindingId/v1":"79eeef76fbddb0134265ab05f87b04d10e9e88bd62b60999bad56550a7ba1852"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: PropertyMapDB: TooManyMethods \u2014 34 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/properties/PropertyMapDB.java"},"region":{"startLine":42}}}],"partialFingerprints":{"codehealthFindingId/v1":"03775aa3d979d68ba0fe69595b09c3ba32e42ea013bd9bd1e11965a36a00d9dd"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: GlobalSymbol: TooManyMethods \u2014 34 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/address/GlobalSymbol.java"},"region":{"startLine":28}}}],"partialFingerprints":{"codehealthFindingId/v1":"17af937c54bd9f40587bd0e0c4879d3580fb2e69f19e2e9eee4e8fcd23fba2fc"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: BitFieldDataType: TooManyMethods \u2014 34 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/BitFieldDataType.java"},"region":{"startLine":40}}}],"partialFingerprints":{"codehealthFindingId/v1":"5e3f9feb027044393943c1353d6bd04085b7bce66308facded89e02a1b650f0c"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: PcodeParser: TooManyMethods \u2014 34 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/lang/PcodeParser.java"},"region":{"startLine":53}}}],"partialFingerprints":{"codehealthFindingId/v1":"4998890325be38494e00133fe905c9878d5d6a680d35243b5677b6dad07e0e75"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: PcodeOp: TooManyMethods \u2014 34 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/pcode/PcodeOp.java"},"region":{"startLine":41}}}],"partialFingerprints":{"codehealthFindingId/v1":"9aa0c16e61cfb615480e5efb51e4a32379ec9964e72d1e16eca61511307321d2"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: target/DBTraceObjectManager.java: FileTooLong \u2014 565 significant lines (blank, comment-only and punctuation-only lines excluded), about 92% of them inside a single declaration: DBTraceObjectManager (66-883). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/target/DBTraceObjectManager.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"7115ca02ee59336fd9a06947c4b98dbb645bebcb9ed6251449f9021581d38934"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: spatial/AbstractConstraintsTree.java: FileTooLong \u2014 559 significant lines (blank, comment-only and punctuation-only lines excluded), about 97% of them inside a single declaration: AbstractConstraintsTree (33-970). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/ProposedUtils/src/main/java/ghidra/util/database/spatial/AbstractConstraintsTree.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"4b7a8d3926ca2eb324f6510c740972fce7aca78b220315da0a916e6f6071ae37"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: variadic/FormatStringParser.java: FileTooLong \u2014 559 significant lines (blank, comment-only and punctuation-only lines excluded), about 99% of them inside a single declaration: FormatStringParser (44-961). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/DecompilerDependent/src/main/java/ghidra/app/plugin/core/string/variadic/FormatStringParser.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"1546a6b135428d1c02002781bb58926f84fba38a64cc090981dec3354fb4eab9"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: data/DataTypeArchiveTransformer.java: FileTooLong \u2014 558 significant lines (blank, comment-only and punctuation-only lines excluded), about 96% of them inside a single declaration: DataTypeArchiveTransformer (53-900). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/DataTypeArchiveTransformer.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"5f8a6c1a35afb3f9a905d2631b93e1d45d9b33fd9c877ab07a2766d6e86293b1"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: util/ComponentInfoDialog.java: FileTooLong \u2014 554 significant lines (blank, comment-only and punctuation-only lines excluded), about 96% of them inside a single declaration: ComponentInfoDialog (48-849). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Docking/src/main/java/ghidra/docking/util/ComponentInfoDialog.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"3c4203f699dd467eea85f7169bf8dee7d1e6b3bba427f16e27442e54e9567a69"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: module/ModuleDB.java: FileTooLong \u2014 552 significant lines (blank, comment-only and punctuation-only lines excluded), about 98% of them inside a single declaration: ModuleDB (36-846). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/module/ModuleDB.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"124072cf311de7ebc94c39f9b6054835494a929dacff9b899ddf9d72c71bebd5"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: JdiConnector: TooManyMethods \u2014 33 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/Debugger-jpda/src/main/java/ghidra/dbg/jdi/rmi/jpda/JdiConnector.java"},"region":{"startLine":32}}}],"partialFingerprints":{"codehealthFindingId/v1":"78aa85feba38c166edea67021eca4732313380617e894d55c2a9d5e5f6c346d9"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: DebuggerTraceViewDiffPlugin: TooManyMethods \u2014 33 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/gui/diff/DebuggerTraceViewDiffPlugin.java"},"region":{"startLine":78}}}],"partialFingerprints":{"codehealthFindingId/v1":"9b1d62324c0320efb0bf7f4f5c53ea81fd8bafdd10ef14868cd4c92f85605562"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: DBTraceBreakpointLocation: TooManyMethods \u2014 33 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/breakpoint/DBTraceBreakpointLocation.java"},"region":{"startLine":38}}}],"partialFingerprints":{"codehealthFindingId/v1":"9be6fc171fddea2226eae2584025372fa716c8930f42a4f132f52256384ada8b"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: DBTraceDataTypeManager: TooManyMethods \u2014 33 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/data/DBTraceDataTypeManager.java"},"region":{"startLine":42}}}],"partialFingerprints":{"codehealthFindingId/v1":"2786ec29f0ee08ba25dbadbea4873637a878b783d2e5f62dbd21b7c1f1a4f78a"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: Sequence: TooManyMethods \u2014 33 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/model/time/schedule/Sequence.java"},"region":{"startLine":34}}}],"partialFingerprints":{"codehealthFindingId/v1":"94f1be33fe2d568f532569b61d6b1d6d6b3819aef828773a94cd18a6e98dd2f6"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: CachedAddressSetView: TooManyMethods \u2014 33 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/ProposedUtils/src/main/java/ghidra/program/model/address/CachedAddressSetView.java"},"region":{"startLine":30}}}],"partialFingerprints":{"codehealthFindingId/v1":"5c3a7d2319883288d3676bfc62704339a3fec2fabbcf05817720bd72cdd0370a"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: DBCachedObjectStore: TooManyMethods \u2014 33 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/ProposedUtils/src/main/java/ghidra/util/database/DBCachedObjectStore.java"},"region":{"startLine":58}}}],"partialFingerprints":{"codehealthFindingId/v1":"91a18293f854e8cdc6ff35fb4feb616054b3e030884d116e07ef6b3ad51f0173"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: VTPlugin: TooManyMethods \u2014 33 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/VersionTracking/src/main/java/ghidra/feature/vt/gui/plugin/VTPlugin.java"},"region":{"startLine":66}}}],"partialFingerprints":{"codehealthFindingId/v1":"5d7a35f038404f42889b80cdfa9e39f892232c4eaa82507215d25db2089c312d"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: KeyBindingUtils: TooManyMethods \u2014 33 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Docking/src/main/java/docking/actions/KeyBindingUtils.java"},"region":{"startLine":58}}}],"partialFingerprints":{"codehealthFindingId/v1":"7669bf2a0ce231fe4b47cfea9e85a134c74a6adaee30f10e428d6a04f58f1371"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: DateUtils: TooManyMethods \u2014 33 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Generic/src/main/java/ghidra/util/DateUtils.java"},"region":{"startLine":29}}}],"partialFingerprints":{"codehealthFindingId/v1":"8a316a0936e6acd812237c79d77a2301a5ee693eeee212a8669b9d532637c27b"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: HelpBuildUtils: TooManyMethods \u2014 33 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Help/src/main/java/help/HelpBuildUtils.java"},"region":{"startLine":39}}}],"partialFingerprints":{"codehealthFindingId/v1":"1c45cc04c75bc5bf2d982d3bb974c5a4c2ece26936599518adb4ca7d5566d6e3"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: PseudoDisassembler: TooManyMethods \u2014 33 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/util/PseudoDisassembler.java"},"region":{"startLine":53}}}],"partialFingerprints":{"codehealthFindingId/v1":"529f096ddacb68618febdcccfba3917863a232fc5bd2b70478f8b1b5076c4113"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: AddressSetViewAdapter: TooManyMethods \u2014 33 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/address/AddressSetViewAdapter.java"},"region":{"startLine":25}}}],"partialFingerprints":{"codehealthFindingId/v1":"a776f7b40053b080c127cf5dc346181255a4918d70f2aa884aa04743710a6be7"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: VariableUtilities: TooManyMethods \u2014 33 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/listing/VariableUtilities.java"},"region":{"startLine":30}}}],"partialFingerprints":{"codehealthFindingId/v1":"ad7bdc39cb807b9d6037d36b672f5ea51459f5835b3b91bbfc604fdc216bde3e"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: TemporaryCompilerSpec: TooManyMethods \u2014 33 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/util/LanguageTranslatorAdapter.java"},"region":{"startLine":514}}}],"partialFingerprints":{"codehealthFindingId/v1":"24def8fcb2c1e58a5e49adc0d380b79b0d96865ab6536846a6d61335fe8f30f1"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: SleighPreprocessor: TooManyMethods \u2014 33 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/sleigh/grammar/SleighPreprocessor.java"},"region":{"startLine":33}}}],"partialFingerprints":{"codehealthFindingId/v1":"acc303c71a4f7ada293b9d7a2a8a4d75516e47e09a8e33feb70c8cb8fb0d7c79"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: listing/DBTraceInstruction.java: FileTooLong \u2014 549 significant lines (blank, comment-only and punctuation-only lines excluded), about 94% of them inside a single declaration: DBTraceInstruction (56-876). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/listing/DBTraceInstruction.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"e68eeb880125c4341f4efcf232d7e4fae8267118fd8e64582c2749e40be950cd"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: functionassociation/VTFunctionAssociationProvider.java: FileTooLong \u2014 548 significant lines (blank, comment-only and punctuation-only lines excluded), about 92% of them inside a single declaration: VTFunctionAssociationProvider (69-823). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/VersionTracking/src/main/java/ghidra/feature/vt/gui/provider/functionassociation/VTFunctionAssociationProvider.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"cc7638649e4641d144a96334a631be55bad53e90018064bc30a7ebcacd86789a"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: decompiler/DecompInterface.java: FileTooLong \u2014 546 significant lines (blank, comment-only and punctuation-only lines excluded), about 97% of them inside a single declaration: DecompInterface (82-1116). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/Decompiler/src/main/java/ghidra/app/decompiler/DecompInterface.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"0f66d3489e407a7d44e8498549769069cf8501813cbf590b6ab639758cc4976a"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: tracemgr/DebuggerCoordinates.java: FileTooLong \u2014 544 significant lines (blank, comment-only and punctuation-only lines excluded), about 95% of them inside a single declaration: DebuggerCoordinates (49-862). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/Debugger-api/src/main/java/ghidra/debug/api/tracemgr/DebuggerCoordinates.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"3da3cd3044806f0073da8a3ee289400200c87dfdd5a001f97ce4bdcd2c42cb54"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: sleigh/PcodeEmit.java: FileTooLong \u2014 544 significant lines (blank, comment-only and punctuation-only lines excluded), about 98% of them inside a single declaration: PcodeEmit (38-894). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/processors/sleigh/PcodeEmit.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"1dd47fe32da2d1103a5830a0aba12688f4262127f9377c5db6b9d7a621e037fc"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: pcode/DynamicHash.java: FileTooLong \u2014 542 significant lines (blank, comment-only and punctuation-only lines excluded), about 99% of them inside a single declaration: DynamicHash (39-870). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/pcode/DynamicHash.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"407d76c6044d588ce346f2f76c4f4dc3ab692f9addf603e0c8daa7a9d2fcbda6"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: byteviewer/ByteViewerComponent.java: FileTooLong \u2014 541 significant lines (blank, comment-only and punctuation-only lines excluded), about 95% of them inside a single declaration: ByteViewerComponent (51-964). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/ByteViewer/src/main/java/ghidra/app/plugin/core/byteviewer/ByteViewerComponent.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"394c96b973b455e8caa0f40ec38b1b76dd7fd791ffae5ce03d4048fd44d51f87"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: data/FunctionDefinitionDB.java: FileTooLong \u2014 540 significant lines (blank, comment-only and punctuation-only lines excluded), about 96% of them inside a single declaration: FunctionDefinitionDB (38-828). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/FunctionDefinitionDB.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"bbcabbf93cd0729bdc72bd8327883ef6c37ba627fb9e614b55f18bb6babeb0fc"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: plugin/VTSubToolManager.java: FileTooLong \u2014 539 significant lines (blank, comment-only and punctuation-only lines excluded), about 92% of them inside a single declaration: VTSubToolManager (62-882). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/VersionTracking/src/main/java/ghidra/feature/vt/gui/plugin/VTSubToolManager.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"7ac6e1f9c7c5c1a79cdd56c66734b9ec182cebcbb3f419819f81bd625b374026"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: memory/DebuggerMemoryBytesProvider.java: FileTooLong \u2014 538 significant lines (blank, comment-only and punctuation-only lines excluded), about 91% of them inside a single declaration: DebuggerMemoryBytesProvider (70-846). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/gui/memory/DebuggerMemoryBytesProvider.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"686bda3303224e7c951a7f11d32f264254b7d1b5bc9b954a98d8047fac1d860f"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: code/InstructionDB.java: FileTooLong \u2014 538 significant lines (blank, comment-only and punctuation-only lines excluded), about 97% of them inside a single declaration: InstructionDB (39-923). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/code/InstructionDB.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"92692e7658357fa0a40c3a2c2beede1cf7c4d892dcab52b18a25974d89b2e895"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: microsoft/MicrosoftDemanglerUtil.java: FileTooLong \u2014 536 significant lines (blank, comment-only and punctuation-only lines excluded), about 97% of them inside a single declaration: MicrosoftDemanglerUtil (42-970). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/MicrosoftDemangler/src/main/java/ghidra/app/util/demangler/microsoft/MicrosoftDemanglerUtil.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"13a18f0808a8e075ef365a9c0eb4f4963a4a8d6dbe89b48d17363405eb0f3448"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: AbstractTarget: TooManyMethods \u2014 32 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/service/target/AbstractTarget.java"},"region":{"startLine":49}}}],"partialFingerprints":{"codehealthFindingId/v1":"d051a6ae377fdcc485202db4d4a1bc1a18649acad001792b609984780f41db8f"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: DBTraceMemoryRegion: TooManyMethods \u2014 32 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/memory/DBTraceMemoryRegion.java"},"region":{"startLine":38}}}],"partialFingerprints":{"codehealthFindingId/v1":"ee3f9889b359187230cf6cfc2628acb8a5e48ed149957d3bb4668b67050698a0"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: ArtImageSections: TooManyMethods \u2014 32 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/android/art/ArtImageSections.java"},"region":{"startLine":30}}}],"partialFingerprints":{"codehealthFindingId/v1":"c0629157b9cfdb0f21c141cec3b1f02fa84f0cb258855c9a6ca4b3d7cefe07d5"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: UserdumpFileHeader: TooManyMethods \u2014 32 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/dump/userdump/UserdumpFileHeader.java"},"region":{"startLine":25}}}],"partialFingerprints":{"codehealthFindingId/v1":"66ab0a9dee1c3cc4d12f76f8ec279fe1f534111fc73b53611d6661875de791e0"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: FGActionManager: TooManyMethods \u2014 32 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/FunctionGraph/src/main/java/ghidra/app/plugin/core/functiongraph/FGActionManager.java"},"region":{"startLine":50}}}],"partialFingerprints":{"codehealthFindingId/v1":"48a46dd904b06b47322c3f8d509872157281df9d8fe97a31363e605016ca1bc3"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: GroupedFunctionGraphVertex: TooManyMethods \u2014 32 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/FunctionGraph/src/main/java/ghidra/app/plugin/core/functiongraph/graph/vertex/GroupedFunctionGraphVertex.java"},"region":{"startLine":34}}}],"partialFingerprints":{"codehealthFindingId/v1":"b730833a8f87f36b1d2c27270daa64dd89d52dbe33021c96c3ebf4f49775205e"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: UserManager: TooManyMethods \u2014 32 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/GhidraServer/src/main/java/ghidra/server/UserManager.java"},"region":{"startLine":39}}}],"partialFingerprints":{"codehealthFindingId/v1":"cf34a7fbcc421b1730623f573745940252755f42017215ece7b5e564375e10f9"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: LocalManagedBufferFile: TooManyMethods \u2014 32 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/DB/src/main/java/db/buffers/LocalManagedBufferFile.java"},"region":{"startLine":34}}}],"partialFingerprints":{"codehealthFindingId/v1":"0dfe22bc622fcf255f0c65f741fa3cbf83aefaa243960c8e100045072eafcc80"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: ImagePanel: TooManyMethods \u2014 32 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Docking/src/main/java/docking/widgets/imagepanel/ImagePanel.java"},"region":{"startLine":32}}}],"partialFingerprints":{"codehealthFindingId/v1":"77daf509ac633d32fd55e0fb5e941246c6e70f9e8671c56a5604ad24b79e23a7"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: GFilterTable: TooManyMethods \u2014 32 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Docking/src/main/java/docking/widgets/table/GFilterTable.java"},"region":{"startLine":29}}}],"partialFingerprints":{"codehealthFindingId/v1":"2e2e488ce9dc3e185e33f48f9e08086a7332b62fd0808e488d9623caf6ea55cc"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: TableData: TooManyMethods \u2014 32 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Docking/src/main/java/docking/widgets/table/threaded/TableData.java"},"region":{"startLine":32}}}],"partialFingerprints":{"codehealthFindingId/v1":"69744e15b62e11712267d0aa36f74f4a27ca531132b05fda48f637c347752722"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: AddrSpace: TooManyMethods \u2014 32 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/space/AddrSpace.java"},"region":{"startLine":57}}}],"partialFingerprints":{"codehealthFindingId/v1":"e6c12c1abf325e4ecadbb495e8861c88a0225129412937f2e8bb791c54ad3975"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: ProgramUserDataDB: TooManyMethods \u2014 32 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/ProgramUserDataDB.java"},"region":{"startLine":42}}}],"partialFingerprints":{"codehealthFindingId/v1":"899ca77ae22fc55ea686d15f371b1bbdfdca38a09066608fb39da226c1fbbf86"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: TreeManager: TooManyMethods \u2014 32 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/module/TreeManager.java"},"region":{"startLine":43}}}],"partialFingerprints":{"codehealthFindingId/v1":"3ef55dfb7fa0867ea69bfc8f50636f76906dd5c9bd3594f4ef7ce60875bdf074"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: ImmutableAddressSet: TooManyMethods \u2014 32 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/address/ImmutableAddressSet.java"},"region":{"startLine":23}}}],"partialFingerprints":{"codehealthFindingId/v1":"e6ae62aea3faa713fa241f3389ec8e3ab8b6d8e5e1bc2246c7fc603f4d5adfac"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: ParamEntry: TooManyMethods \u2014 32 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/lang/ParamEntry.java"},"region":{"startLine":33}}}],"partialFingerprints":{"codehealthFindingId/v1":"e5fd10d51c52f6b39aea51ba9c1a51a63ef25c336e2112e4ddb6d879ea4a8d1c"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: HighFunction: TooManyMethods \u2014 32 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/pcode/HighFunction.java"},"region":{"startLine":41}}}],"partialFingerprints":{"codehealthFindingId/v1":"f9f82162864c8fd8490f568f5d4906685f20b2e0d12bbb2fa76904b2f8fb9ffb"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: viewer/GraphViewerUtils.java: FileTooLong \u2014 533 significant lines (blank, comment-only and punctuation-only lines excluded), about 96% of them inside a single declaration: GraphViewerUtils (62-1050). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Graph/src/main/java/ghidra/graph/viewer/GraphViewerUtils.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"4617d95769f95f52b5373aae00215f04500dc6ee937886ff4426a1f6b91dc1f8"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: launcher/ScriptAttributesParser.java: FileTooLong \u2014 532 significant lines (blank, comment-only and punctuation-only lines excluded), about 96% of them inside a single declaration: ScriptAttributesParser (42-852). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/Debugger-rmi-trace/src/main/java/ghidra/app/plugin/core/debug/gui/tracermi/launcher/ScriptAttributesParser.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"cdeeb49e0aacbf5938d6aee33d2ea9a0ba1b34d6f0a7154ba2a58bfb8178402a"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: target/DBTraceObject.java: FileTooLong \u2014 529 significant lines (blank, comment-only and punctuation-only lines excluded), about 94% of them inside a single declaration: DBTraceObject (51-851). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/target/DBTraceObject.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"842fc0cd4ae4df1960170a7abbd0d77935f2219a30d514e2908f8c00d056e561"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: modifier/MDCVMod.java: FileTooLong \u2014 529 significant lines (blank, comment-only and punctuation-only lines excluded). To reduce it, split the file along the responsibilities already in it: move each cohesive group of declarations into its own sibling file in the same module or package, so no one file has to be read whole to change one of them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/MicrosoftDmang/src/main/java/mdemangler/datatype/modifier/MDCVMod.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"e672c40a0ed9137c2d4726fecf44e9ec76f5da171766adc1faaeb03201482c3e"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: server/Repository.java: FileTooLong \u2014 528 significant lines (blank, comment-only and punctuation-only lines excluded), about 96% of them inside a single declaration: Repository (44-1047). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/GhidraServer/src/main/java/ghidra/server/Repository.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"ee976264a20e132699a8e769fb4289c312b1d283ebe9b03d0569a5d7a0266b00"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: launcher/AbstractTraceRmiLaunchOffer.java: FileTooLong \u2014 525 significant lines (blank, comment-only and punctuation-only lines excluded), about 92% of them inside a single declaration: AbstractTraceRmiLaunchOffer (61-819). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/Debugger-rmi-trace/src/main/java/ghidra/app/plugin/core/debug/gui/tracermi/launcher/AbstractTraceRmiLaunchOffer.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"ed31954d65ec8473a018f8c80ed55c81559a22347336b5860a5e466d1a5af2b3"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: data/DataOrganizationImpl.java: FileTooLong \u2014 524 significant lines (blank, comment-only and punctuation-only lines excluded), about 98% of them inside a single declaration: DataOrganizationImpl (36-1030). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/DataOrganizationImpl.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"547bff9b712e94a1bd897a789a1c81c86ed61347cf01f64a78234f2f319a24dd"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: vertex/ListingGraphComponentPanel.java: FileTooLong \u2014 523 significant lines (blank, comment-only and punctuation-only lines excluded), about 91% of them inside a single declaration: ListingGraphComponentPanel (68-815). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/FunctionGraph/src/main/java/ghidra/app/plugin/core/functiongraph/graph/vertex/ListingGraphComponentPanel.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"747e85cbdead7f5dcb584b63b70dda053136ac03bfb6fa5e1c1af275dbbbfe1f"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: data/DataTypeWriter.java: FileTooLong \u2014 521 significant lines (blank, comment-only and punctuation-only lines excluded), about 98% of them inside a single declaration: DataTypeWriter (34-916). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/DataTypeWriter.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"05b5cfb335c5b2281646dab9a408bc30bd647ee62f125e9b1351f8e1d6b09071"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: pcode/HighFunctionDBUtil.java: FileTooLong \u2014 521 significant lines (blank, comment-only and punctuation-only lines excluded), about 98% of them inside a single declaration: HighFunctionDBUtil (39-958). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/pcode/HighFunctionDBUtil.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"5aeed5f3751d2bed0696c05a0963fee4e542aab6ec2764c510ddaa49ff2f0f20"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: data/StandAloneDataTypeManager.java: FileTooLong \u2014 520 significant lines (blank, comment-only and punctuation-only lines excluded), about 95% of them inside a single declaration: StandAloneDataTypeManager (50-1116). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/StandAloneDataTypeManager.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"d01f7d5bdd78544ae90dea834282153e6ce735870b6f1c112debfd00baaa599f"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: edge/VisualGraphPathHighlighter.java: FileTooLong \u2014 517 significant lines (blank, comment-only and punctuation-only lines excluded), about 96% of them inside a single declaration: VisualGraphPathHighlighter (78-1004). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Graph/src/main/java/ghidra/graph/viewer/edge/VisualGraphPathHighlighter.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"fa4851759ef45d17cd382a77ce0cc41e7bcd82410ba0151f28457b836fdd4ce4"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: ScriptAttributesParser: TooManyMethods \u2014 31 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/Debugger-rmi-trace/src/main/java/ghidra/app/plugin/core/debug/gui/tracermi/launcher/ScriptAttributesParser.java"},"region":{"startLine":42}}}],"partialFingerprints":{"codehealthFindingId/v1":"ba40f3e7d2c2f25504d497705c2795ae05713a405d0b197e100f679378afff7d"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: TraceRmiLauncherServicePlugin: TooManyMethods \u2014 31 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/Debugger-rmi-trace/src/main/java/ghidra/app/plugin/core/debug/gui/tracermi/launcher/TraceRmiLauncherServicePlugin.java"},"region":{"startLine":81}}}],"partialFingerprints":{"codehealthFindingId/v1":"1eac6aa6d201bbcd6226fc696ab6e9b25bb14f54b300ef5007b3953a9de47534"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: AbstractDebuggerParameterDialog: TooManyMethods \u2014 31 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/gui/AbstractDebuggerParameterDialog.java"},"region":{"startLine":53}}}],"partialFingerprints":{"codehealthFindingId/v1":"65a8db96d377d38d96dd40b032fe1ebc4c0c21e72531fee831b4a3790dacd927"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: DebuggerConsoleProvider: TooManyMethods \u2014 31 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/gui/console/DebuggerConsoleProvider.java"},"region":{"startLine":59}}}],"partialFingerprints":{"codehealthFindingId/v1":"ae59c426110c46b33c0ae999d2dbd465b00c7da3e23c1b5fee264adb99173f7d"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: DebuggerRegionsProvider: TooManyMethods \u2014 31 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/gui/memory/DebuggerRegionsProvider.java"},"region":{"startLine":59}}}],"partialFingerprints":{"codehealthFindingId/v1":"0a5cb463fb259a60cf5b7891027b92b52c30b4ae2b68c60c1a77760b0517b488"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: MemviewProvider: TooManyMethods \u2014 31 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/gui/memview/MemviewProvider.java"},"region":{"startLine":41}}}],"partialFingerprints":{"codehealthFindingId/v1":"4245d3bb3342e0dde08bab311d8d0cbd3e51e5d6d34d40c842dc60934952589f"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: TraceCallTreeProvider: TooManyMethods \u2014 31 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/gui/tracecalltree/TraceCallTreeProvider.java"},"region":{"startLine":72}}}],"partialFingerprints":{"codehealthFindingId/v1":"82228c478ad040366deb932100740188b96f1e35caf9b7a964f4cfaf034c2e0e"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: AbstractDBTraceDataComponent: TooManyMethods \u2014 31 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/listing/AbstractDBTraceDataComponent.java"},"region":{"startLine":41}}}],"partialFingerprints":{"codehealthFindingId/v1":"08d646358aef0d11ec13b79cce2b201878b035abb3b653bea7a3158a7899ecd5"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: DBTraceAddressSnapRangePropertyMapSpace: TooManyMethods \u2014 31 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/map/DBTraceAddressSnapRangePropertyMapSpace.java"},"region":{"startLine":37}}}],"partialFingerprints":{"codehealthFindingId/v1":"b82851f9f15ffff72f4495328a553cf3bfcf3b57bff36dfa310726f1d2244fca"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: DBTraceObjectValue: TooManyMethods \u2014 31 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/target/DBTraceObjectValue.java"},"region":{"startLine":35}}}],"partialFingerprints":{"codehealthFindingId/v1":"801b4dbacdf6e49b0913ac72e51a5ba0415f27cf1f2a2f08dde3ab0247dec460"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: DBCachedObjectStoreEntrySet: TooManyMethods \u2014 31 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/ProposedUtils/src/main/java/ghidra/util/database/DBCachedObjectStoreEntrySet.java"},"region":{"startLine":36}}}],"partialFingerprints":{"codehealthFindingId/v1":"93cf1481b0cb36f9398f19fd342bb3c7055486c769b781dae25685eb6de15f50"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: DBCachedObjectStoreKeySet: TooManyMethods \u2014 31 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/ProposedUtils/src/main/java/ghidra/util/database/DBCachedObjectStoreKeySet.java"},"region":{"startLine":29}}}],"partialFingerprints":{"codehealthFindingId/v1":"f60b33997f21a4d8760bcaca076d53a188269cf2e3167eef3724d164454f352f"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: DBCachedObjectStoreSubMap: TooManyMethods \u2014 31 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/ProposedUtils/src/main/java/ghidra/util/database/DBCachedObjectStoreSubMap.java"},"region":{"startLine":31}}}],"partialFingerprints":{"codehealthFindingId/v1":"ebcaf9fc5455f22ab0bb8e1dd38dbd4cc420d5e16e3bc43c50511857d1c6c505"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: BSimSearchResultsProvider: TooManyMethods \u2014 31 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/BSim/src/main/java/ghidra/features/bsim/gui/search/results/BSimSearchResultsProvider.java"},"region":{"startLine":67}}}],"partialFingerprints":{"codehealthFindingId/v1":"6951d151c756f44a6fdd6cd50495e01300f5262fb231b9d0135b97d0aca2dd8b"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: BSimServerInfo: TooManyMethods \u2014 31 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/BSim/src/main/java/ghidra/features/bsim/query/BSimServerInfo.java"},"region":{"startLine":30}}}],"partialFingerprints":{"codehealthFindingId/v1":"87e488647f6148872e0a8ce5a70d4f5c972daeaa029164069a36b68d02024e3e"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: ThreadEx: TooManyMethods \u2014 31 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/dump/mdmp/ThreadEx.java"},"region":{"startLine":25}}}],"partialFingerprints":{"codehealthFindingId/v1":"b7b88f7d156927aaa592e72b764060f1572d66907709097e03164d61941a353b"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: VTMatchOneToManyTableProvider: TooManyMethods \u2014 31 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/VersionTracking/src/main/java/ghidra/feature/vt/gui/provider/onetomany/VTMatchOneToManyTableProvider.java"},"region":{"startLine":69}}}],"partialFingerprints":{"codehealthFindingId/v1":"31ca76f41f6d288b3cc176f01dbf2123f05606e1d5a19fd6116b054537c95b21"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: AnchoredLayout: TooManyMethods \u2014 31 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Docking/src/main/java/docking/widgets/fieldpanel/support/AnchoredLayout.java"},"region":{"startLine":29}}}],"partialFingerprints":{"codehealthFindingId/v1":"568c2fab083c08502567f820b936e145c42e6835158e4276a059022795f69b02"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: TableColumnModelState: TooManyMethods \u2014 31 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Docking/src/main/java/docking/widgets/table/TableColumnModelState.java"},"region":{"startLine":64}}}],"partialFingerprints":{"codehealthFindingId/v1":"54823170a34689be3cf9d1a0444a59c98ef38353dcd299757ef53cfbef730b85"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: PackedDatabase: TooManyMethods \u2014 31 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/FileSystem/src/main/java/ghidra/framework/store/db/PackedDatabase.java"},"region":{"startLine":46}}}],"partialFingerprints":{"codehealthFindingId/v1":"e354e739104e8d666179edf67831063f82641c01368413677c5abfa549ebbc65"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: TreeValueSortedMap: TooManyMethods \u2014 31 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Generic/src/main/java/ghidra/generic/util/datastruct/TreeValueSortedMap.java"},"region":{"startLine":34}}}],"partialFingerprints":{"codehealthFindingId/v1":"e013128c2bf3038ac093e30d023cd6f11d37d70b2fef0b782cbfab2765b40692"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: ObjectStorageAdapter: TooManyMethods \u2014 31 methods. Most of these members implement util.ObjectStorage (30 of 31 members), so moving them onto a smaller type would remove them from that contract rather than reduce it. To reduce it, split the contract instead: give each cohesive group of operations its own smaller interface and its own implementing type. Where the contract has to stay whole, move the work behind these members into collaborator types, so what is left here is a forward per member rather than a responsibility per member."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Generic/src/main/java/ghidra/util/map/ObjectStorageAdapter.java"},"region":{"startLine":26}}}],"partialFingerprints":{"codehealthFindingId/v1":"31a81ec0a8bf1f9403a8d8a2af8e0de9d90c3244a4107a9ed7ac4959f27743b3"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: ValueMap: TooManyMethods \u2014 31 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Generic/src/main/java/ghidra/util/map/ValueMap.java"},"region":{"startLine":32}}}],"partialFingerprints":{"codehealthFindingId/v1":"ecd64fb7c72ae5b52e8fa44ea765d415ed6dbd20449834802687f353460eb1ca"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: LookAndFeelManager: TooManyMethods \u2014 31 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Gui/src/main/java/generic/theme/laf/LookAndFeelManager.java"},"region":{"startLine":38}}}],"partialFingerprints":{"codehealthFindingId/v1":"2ccd0ff4e0230216f19fbcd851821ecb6b125c193ea41858a9073f53699180e9"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: DataTypeArchiveTransformer: TooManyMethods \u2014 31 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/DataTypeArchiveTransformer.java"},"region":{"startLine":53}}}],"partialFingerprints":{"codehealthFindingId/v1":"950cd1c9aba68722e0e5d01b3b9ce5f1864a4d6c39877d4a2834ea26ecad4e7e"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: ProgramRegisterContextDB: TooManyMethods \u2014 31 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/register/ProgramRegisterContextDB.java"},"region":{"startLine":41}}}],"partialFingerprints":{"codehealthFindingId/v1":"03f70422129c35cb47058294fd32210a39c9ff5c1f49cc597fd125cb3faf72e3"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: SourceFileManagerDB: TooManyMethods \u2014 31 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/sourcemap/SourceFileManagerDB.java"},"region":{"startLine":41}}}],"partialFingerprints":{"codehealthFindingId/v1":"8220de6943dd57edbace9d03190e181ff0a917c64e6c0ad0d2833c40e590688f"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: VariableSymbolDB: TooManyMethods \u2014 31 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/symbol/VariableSymbolDB.java"},"region":{"startLine":40}}}],"partialFingerprints":{"codehealthFindingId/v1":"9874ab92973373a92054ab9c8f689b486e398368cccf37251cc8b6ce7240ab3a"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: InstructionBlock: TooManyMethods \u2014 31 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/lang/InstructionBlock.java"},"region":{"startLine":29}}}],"partialFingerprints":{"codehealthFindingId/v1":"5c64205b370767d95528c1eed353a15a7c7fa1f76978e3b551db4d24b2fe315d"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: PcodeBlock: TooManyMethods \u2014 31 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/pcode/PcodeBlock.java"},"region":{"startLine":31}}}],"partialFingerprints":{"codehealthFindingId/v1":"ad3de11881878e182ea23e73559bc1a2f3e32aaf1f3891f4b72893570f68e325"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: JarResource: TooManyMethods \u2014 31 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Utility/src/main/java/generic/jar/JarResource.java"},"region":{"startLine":28}}}],"partialFingerprints":{"codehealthFindingId/v1":"e030a0166258937c35c62646f877ac6840b0b0dc4435c16a268e693921b5b0c0"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: ResourceFile: TooManyMethods \u2014 31 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Utility/src/main/java/generic/jar/ResourceFile.java"},"region":{"startLine":30}}}],"partialFingerprints":{"codehealthFindingId/v1":"529cda90c8572946ebb9f5c8e841152599492a60cf3ac400400f12c3b940aa34"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: ReflectionUtilities: TooManyMethods \u2014 31 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Utility/src/main/java/utilities/util/reflection/ReflectionUtilities.java"},"region":{"startLine":27}}}],"partialFingerprints":{"codehealthFindingId/v1":"3ee9b61d6041dc5c207b3bf74921acd4164926818dcd89b61592df94375cf283"}},{"ruleId":"D3","level":"warning","message":{"text":"TooManyMethods: JavaAnalyzer: TooManyMethods \u2014 31 methods. To reduce it, group the members that share the same data into a smaller type of their own and delegate to it, so no single type carries every responsibility."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Processors/JVM/src/main/java/ghidra/javaclass/analyzers/JavaAnalyzer.java"},"region":{"startLine":52}}}],"partialFingerprints":{"codehealthFindingId/v1":"32da579d683dc030ee8fe65e203d7da8a09823559606637d1a27dddc2c58f9bf"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: autocomplete/TextComponentAutocompleter.java: FileTooLong \u2014 516 significant lines (blank, comment-only and punctuation-only lines excluded), about 97% of them inside a single declaration: TextComponentAutocompleter (97-1164). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Docking/src/main/java/docking/widgets/autocomplete/TextComponentAutocompleter.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"1c1d7764b6df2eac8da96e92a5a316561eaef884b808c552252dcc4ed5a3eaa1"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: analysis/ArmAnalyzer.java: FileTooLong \u2014 515 significant lines (blank, comment-only and punctuation-only lines excluded), about 95% of them inside a single declaration: ArmAnalyzer (43-879). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Processors/ARM/src/main/java/ghidra/app/plugin/core/analysis/ArmAnalyzer.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"5da92b56971afed4e7c7326e8c22576582e609f276557d308f085fb9378ecfc4"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: functionfinding/FunctionStartRFParamsDialog.java: FileTooLong \u2014 514 significant lines (blank, comment-only and punctuation-only lines excluded), about 95% of them inside a single declaration: FunctionStartRFParamsDialog (54-684). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Extensions/MachineLearning/src/main/java/ghidra/machinelearning/functionfinding/FunctionStartRFParamsDialog.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"9f6253f93913858c06b4c7876209bd0fb88f2223788bdf3cb766b26f352dee68"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: docking/RootNode.java: FileTooLong \u2014 514 significant lines (blank, comment-only and punctuation-only lines excluded), about 97% of them inside a single declaration: RootNode (39-948). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Docking/src/main/java/docking/RootNode.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"ec0a4ab92058e9335de9f17de0b7374cd7fbd62957d6addbf46f08c4950cab6e"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: description/ExecutableRecord.java: FileTooLong \u2014 512 significant lines (blank, comment-only and punctuation-only lines excluded), about 97% of them inside a single declaration: ExecutableRecord (41-919). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/BSim/src/main/java/ghidra/features/bsim/query/description/ExecutableRecord.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"cca1ba3ef8b60988a58c491b98090bb7d2765d23861a5c6ee6c6df4b65a57b3e"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: duallisting/VTDualListingHighlightProvider.java: FileTooLong \u2014 510 significant lines (blank, comment-only and punctuation-only lines excluded), about 96% of them inside a single declaration: VTDualListingHighlightProvider (41-1015). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/VersionTracking/src/main/java/ghidra/feature/vt/gui/duallisting/VTDualListingHighlightProvider.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"d52be057d201ab404587a35e9a7796705ef975d63d62d9ed6edb15ecbafe352b"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: data/UnionDB.java: FileTooLong \u2014 510 significant lines (blank, comment-only and punctuation-only lines excluded), about 98% of them inside a single declaration: UnionDB (33-836). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/UnionDB.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"3bfb4c95bbd3c7f7a3da470f625ee38211831cf1f8fde69fd3895fb3eeedc964"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: sem/DefaultAssemblyResolvedPatterns.java: FileTooLong \u2014 509 significant lines (blank, comment-only and punctuation-only lines excluded), about 97% of them inside a single declaration: DefaultAssemblyResolvedPatterns (52-788). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/assembler/sleigh/sem/DefaultAssemblyResolvedPatterns.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"c0fdc0b2d34ae0d1058e83a2c90ab3464a034bd9eb61c45a6f606675f16345c2"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: symbol/DBTraceReferenceSpace.java: FileTooLong \u2014 508 significant lines (blank, comment-only and punctuation-only lines excluded), about 93% of them inside a single declaration: DBTraceReferenceSpace (53-771). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/symbol/DBTraceReferenceSpace.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"d06d62a58539ec392e2fec02b61beed0339d3526d77322a8d1655d0ef5cf420c"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: plugin/VTControllerImpl.java: FileTooLong \u2014 507 significant lines (blank, comment-only and punctuation-only lines excluded), about 92% of them inside a single declaration: VTControllerImpl (59-823). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/VersionTracking/src/main/java/ghidra/feature/vt/gui/plugin/VTControllerImpl.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"e0cc616e9e059bc6b95456dbacb8a1a02fc0739708a359c20b7f83e7e96066a2"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: ext4/Ext4SuperBlock.java: FileTooLong \u2014 503 significant lines (blank, comment-only and punctuation-only lines excluded), about 99% of them inside a single declaration: Ext4SuperBlock (24-747). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/ext4/Ext4SuperBlock.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"6d7a6233eb0272497d2197aba9a6c6dfd3c082e1674473f95d5361efaade1790"}},{"ruleId":"D3","level":"warning","message":{"text":"FileTooLong: sourcemap/SourceFileManagerDB.java: FileTooLong \u2014 502 significant lines (blank, comment-only and punctuation-only lines excluded), about 96% of them inside a single declaration: SourceFileManagerDB (41-803). Moving the declarations that sit BESIDE it into sibling files will not shorten this file. Extract from INSIDE that declaration instead: lift each cohesive group of its body \u2014 the parts that share the same inputs and are named together \u2014 into its own unit in a sibling file, and have the original call them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/sourcemap/SourceFileManagerDB.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"1b0e81aff82f6ec19bfb81cf214d6cb860dde4964e0e90c31fbe3114a43f2de8"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (22 lines \u00D7 2): GhidraBuild/BuildFiles/Doclets/src/main/java/ghidra/doclets/typestubs/PythonTypeStubDoclet.java:94-115 | GhidraBuild/BuildFiles/Doclets/src/main/java/ghidra/doclets/typestubs/PythonTypeStubDoclet.java:127-148 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060GhidraBuild/BuildFiles/Doclets/src/main/java/ghidra/doclets/typestubs/PythonTypeStubDoclet.java:94\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"GhidraBuild/BuildFiles/Doclets/src/main/java/ghidra/doclets/typestubs/PythonTypeStubDoclet.java"},"region":{"startLine":94}}}],"partialFingerprints":{"codehealthFindingId/v1":"72df7451ec7a2213b2f77c01ff0290b53ec242a91b305a5a2c7d138fd56d2ec9"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (22 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/StructureDB.java:1519-1542 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/StructureDataType.java:1655-1676 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/StructureDB.java:1519\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/StructureDB.java"},"region":{"startLine":1519}}}],"partialFingerprints":{"codehealthFindingId/v1":"ede4d525085e6e44088d51a36e6924f2901c492fe35cf989b59e2125304c0374"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (20 lines \u00D7 2): GhidraBuild/BuildFiles/Doclets/src/main/java/ghidra/doclets/json/JsonDoclet.java:73-92 | GhidraBuild/BuildFiles/Doclets/src/main/java/ghidra/doclets/typestubs/PythonTypeStubDoclet.java:67-86 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"GhidraBuild/BuildFiles/Doclets/src/main/java/ghidra/doclets/json/JsonDoclet.java"},"region":{"startLine":73}}}],"partialFingerprints":{"codehealthFindingId/v1":"c960716c39323dfd08d9f015c6e550bf43ca3c47bca85a9a5fc6e9ac679d0075"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (20 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/StructureDB.java:501-520 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/StructureDataType.java:881-900 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/StructureDB.java:501\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/StructureDB.java"},"region":{"startLine":501}}}],"partialFingerprints":{"codehealthFindingId/v1":"3c5bd3558a890dd20a350eddb9f8a59187167e3e766a0e378440d90c36527639"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (19 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcode/floatformat/FloatFormat.java:663-681 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcode/floatformat/FloatFormat.java:710-729 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Note that the copies do not run to the end of the range shown: their LAST lines are different code, not the same code under different names \u2014 the matched region ends inside that line. Extract the lines above it, and read the last line of each site separately."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcode/floatformat/FloatFormat.java"},"region":{"startLine":663}}}],"partialFingerprints":{"codehealthFindingId/v1":"e383bd1bba8431273befe231e3ec59144ba11a3460d0b61fbf40cdea1e3eb0d6"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (18 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/util/PseudoDisassembler.java:468-485 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/util/PseudoDisassembler.java:729-746 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/util/PseudoDisassembler.java:468\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. Note that the copies do not run to the end of the range shown: their LAST lines are different code, not the same code under different names \u2014 the matched region ends inside that line. Extract the lines above it, and read the last line of each site separately."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/util/PseudoDisassembler.java"},"region":{"startLine":468}}}],"partialFingerprints":{"codehealthFindingId/v1":"6deff34dd123b7f31a9e9c5756ccb2fcb3719aa85795c429be8bb444493b132d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (18 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcode/floatformat/BigFloat.java:663-680 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcode/floatformat/BigFloat.java:696-713 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcode/floatformat/BigFloat.java:663\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcode/floatformat/BigFloat.java"},"region":{"startLine":663}}}],"partialFingerprints":{"codehealthFindingId/v1":"b97e3eebf85ecc9c38bfc60b4f608624bb89c18c5597ed93c48d68b648c13269"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (18 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/StructureDB.java:1426-1443 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/StructureDataType.java:1571-1588 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/StructureDB.java:1426\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/StructureDB.java"},"region":{"startLine":1426}}}],"partialFingerprints":{"codehealthFindingId/v1":"ec3c5a19793acd7099b781ef57d972ec2482d2d32ac67b9fd6380d834cd1e679"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (18 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/function/FunctionTagAdapterV0.java:42-59 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/function/FunctionTagMappingAdapterV0.java:46-63 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/function/FunctionTagAdapterV0.java:42\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/function/FunctionTagAdapterV0.java"},"region":{"startLine":42}}}],"partialFingerprints":{"codehealthFindingId/v1":"6832672537da11424b260001c70aadadbfdd100d17a61d65962c2278e7fe75ec"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (18 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/map/AddressMapDB.java:364-381 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/map/AddressMapDB.java:660-677 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/map/AddressMapDB.java:364\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/map/AddressMapDB.java"},"region":{"startLine":364}}}],"partialFingerprints":{"codehealthFindingId/v1":"cb95069bb2c7405115c2dff625e957555f73edd29b1c1da3e355ed2c580ea32f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (18 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/block/IsolatedEntrySubModel.java:112-129 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/block/OverlapCodeSubModel.java:114-131 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/block/IsolatedEntrySubModel.java:112\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/block/IsolatedEntrySubModel.java"},"region":{"startLine":112}}}],"partialFingerprints":{"codehealthFindingId/v1":"1df626a6f93beeee32d03eb874c8bc0f239cd76a658b6f86ab28eb3598a37258"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/StructureDB.java:2173-2189 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/StructureDataType.java:1769-1785 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/StructureDB.java:2173\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/StructureDB.java"},"region":{"startLine":2173}}}],"partialFingerprints":{"codehealthFindingId/v1":"55a2908d7cf21cc76cdea64a683f554f2e3d9039653ab318d6b9f379d14dc8ea"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/DataTypeManagerDB.java:2971-2986 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/DataTypeManagerDB.java:3041-3056 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/DataTypeManagerDB.java:2971\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/DataTypeManagerDB.java"},"region":{"startLine":2971}}}],"partialFingerprints":{"codehealthFindingId/v1":"faee543f0fbcf94cfb88bed123b172aa54cadd33504b76df0f95558439e36681"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/DataTypeManagerDB.java:3596-3611 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/DataTypeManagerDB.java:3626-3641 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/DataTypeManagerDB.java:3596\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/DataTypeManagerDB.java"},"region":{"startLine":3596}}}],"partialFingerprints":{"codehealthFindingId/v1":"0d450891b0f3b215ad5d579a36463725abd4f51088b814eb103b67a2e2ed08d9"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (16 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/mem/FileBytes.java:275-290 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/mem/FileBytes.java:332-347 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/mem/FileBytes.java:275\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/mem/FileBytes.java"},"region":{"startLine":275}}}],"partialFingerprints":{"codehealthFindingId/v1":"1f5fc26c9832c3f3f7705822ffc8a03c311aec493b9425f3988abf7c5742cabd"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 3): Ghidra/Processors/PIC/src/main/java/ghidra/app/plugin/core/analysis/Pic12Analyzer.java:270-284 | Ghidra/Processors/PIC/src/main/java/ghidra/app/plugin/core/analysis/Pic17c7xxAnalyzer.java:487-501 | Ghidra/Processors/PIC/src/main/java/ghidra/app/plugin/core/analysis/Pic18Analyzer.java:484-498 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Processors/PIC/src/main/java/ghidra/app/plugin/core/analysis/Pic12Analyzer.java:270\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Processors/PIC/src/main/java/ghidra/app/plugin/core/analysis/Pic12Analyzer.java"},"region":{"startLine":270}}}],"partialFingerprints":{"codehealthFindingId/v1":"1b56e9cdfa34b4ee65c45a605397c501403068c6d6814cef4b91cd256c88ed41"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): GhidraBuild/LaunchSupport/src/main/java/ghidra/launch/JavaVersion.java:94-108 | Ghidra/Framework/Utility/src/main/java/ghidra/framework/ApplicationVersion.java:107-121 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice. Read the line range as the matched WINDOW rather than a finished unit: at \u0060GhidraBuild/LaunchSupport/src/main/java/ghidra/launch/JavaVersion.java:94\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"GhidraBuild/LaunchSupport/src/main/java/ghidra/launch/JavaVersion.java"},"region":{"startLine":94}}}],"partialFingerprints":{"codehealthFindingId/v1":"7eddbba9ded1fb282308ce4c23bb52b6d3c693f6913cb15fc22c226270e02a22"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): GhidraBuild/EclipsePlugins/GhidraDev/GhidraDevPlugin/src/main/java/ghidradev/ghidrascripteditor/preferences/GhidraScriptEditorPreferencePage.java:81-95 | GhidraBuild/EclipsePlugins/GhidraDev/GhidraDevPlugin/src/main/java/ghidradev/ghidrasymbollookup/preferences/GhidraSymbolLookupPreferencePage.java:96-110 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice. Read the line range as the matched WINDOW rather than a finished unit: at \u0060GhidraBuild/EclipsePlugins/GhidraDev/GhidraDevPlugin/src/main/java/ghidradev/ghidrascripteditor/preferences/GhidraScriptEditorPreferencePage.java:81\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"GhidraBuild/EclipsePlugins/GhidraDev/GhidraDevPlugin/src/main/java/ghidradev/ghidrascripteditor/preferences/GhidraScriptEditorPreferencePage.java"},"region":{"startLine":81}}}],"partialFingerprints":{"codehealthFindingId/v1":"034773e6a7306cb874a3e3cf41738ebace3453cdace12255263f1ddf5d4e10fc"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): GhidraBuild/EclipsePlugins/GhidraDev/GhidraDevPlugin/src/main/java/ghidradev/ghidrascripteditor/ScriptEditorInitializer.java:59-73 | GhidraBuild/EclipsePlugins/GhidraDev/GhidraDevPlugin/src/main/java/ghidradev/ghidrasymbollookup/SymbolLookupInitializer.java:59-73 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice. Read the line range as the matched WINDOW rather than a finished unit: at \u0060GhidraBuild/EclipsePlugins/GhidraDev/GhidraDevPlugin/src/main/java/ghidradev/ghidrascripteditor/ScriptEditorInitializer.java:59\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"GhidraBuild/EclipsePlugins/GhidraDev/GhidraDevPlugin/src/main/java/ghidradev/ghidrascripteditor/ScriptEditorInitializer.java"},"region":{"startLine":59}}}],"partialFingerprints":{"codehealthFindingId/v1":"5bd2d38f02581d59647fbb91ad537fa08daeb635117226d9096097352c478b47"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): Ghidra/Processors/PIC/src/main/java/ghidra/app/plugin/core/analysis/Pic12Analyzer.java:484-498 | Ghidra/Processors/PIC/src/main/java/ghidra/app/plugin/core/analysis/Pic17c7xxAnalyzer.java:726-740 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Processors/PIC/src/main/java/ghidra/app/plugin/core/analysis/Pic12Analyzer.java:484\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Processors/PIC/src/main/java/ghidra/app/plugin/core/analysis/Pic12Analyzer.java"},"region":{"startLine":484}}}],"partialFingerprints":{"codehealthFindingId/v1":"edcec292dd9c024a1d988e886af2dff14d0137a11bd645bccce2138fd057db96"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): Ghidra/Processors/ARM/src/main/java/ghidra/app/plugin/core/analysis/ArmAnalyzer.java:442-456 | Ghidra/Processors/68000/src/main/java/ghidra/app/plugin/core/analysis/Motorola68KAnalyzer.java:300-314 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Processors/ARM/src/main/java/ghidra/app/plugin/core/analysis/ArmAnalyzer.java:442\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Processors/ARM/src/main/java/ghidra/app/plugin/core/analysis/ArmAnalyzer.java"},"region":{"startLine":442}}}],"partialFingerprints":{"codehealthFindingId/v1":"e8ecda21f3d9e984f4aca00d2f7c3bae89fda43c0eeef9758cea154b17ad5258"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): Ghidra/Processors/AARCH64/src/main/java/ghidra/program/emulation/AARCH64EmulateInstructionStateModifier.java:320-334 | Ghidra/Processors/AARCH64/src/main/java/ghidra/program/emulation/AARCH64EmulateInstructionStateModifier.java:356-370 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Processors/AARCH64/src/main/java/ghidra/program/emulation/AARCH64EmulateInstructionStateModifier.java:320\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Processors/AARCH64/src/main/java/ghidra/program/emulation/AARCH64EmulateInstructionStateModifier.java"},"region":{"startLine":320}}}],"partialFingerprints":{"codehealthFindingId/v1":"98ade91a56c612b585f2c00348bc4051315cac86e45588cd8cfde4926c769747"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): Ghidra/Processors/AARCH64/src/main/java/ghidra/program/emulation/AARCH64EmulateInstructionStateModifier.java:461-475 | Ghidra/Processors/AARCH64/src/main/java/ghidra/program/emulation/AARCH64EmulateInstructionStateModifier.java:498-512 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Processors/AARCH64/src/main/java/ghidra/program/emulation/AARCH64EmulateInstructionStateModifier.java:461\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Processors/AARCH64/src/main/java/ghidra/program/emulation/AARCH64EmulateInstructionStateModifier.java"},"region":{"startLine":461}}}],"partialFingerprints":{"codehealthFindingId/v1":"b570d8c3f48a769795068bc378741da66a43a635050755a267dcf40d98bdb4e1"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): Ghidra/Framework/Utility/src/main/java/ghidra/GhidraApplicationLayout.java:55-69 | Ghidra/Framework/Utility/src/main/java/ghidra/GhidraApplicationLayout.java:96-110 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Utility/src/main/java/ghidra/GhidraApplicationLayout.java"},"region":{"startLine":55}}}],"partialFingerprints":{"codehealthFindingId/v1":"e7c0fd3fc8b63179cb5689e39725bcef8b23b55772fbf0404cf93a4388b9ce75"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/processors/sleigh/PcodeEmit.java:319-333 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/processors/sleigh/PcodeEmit.java:357-375 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/processors/sleigh/PcodeEmit.java:319\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/processors/sleigh/PcodeEmit.java"},"region":{"startLine":319}}}],"partialFingerprints":{"codehealthFindingId/v1":"8b97838e9c2b4b864d1417a96c7ec8133b1b6cc2add3f63e2f4313442a10469b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/CompositeDB.java:193-207 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/CompositeDataTypeImpl.java:121-135 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/CompositeDB.java:193\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/CompositeDB.java"},"region":{"startLine":193}}}],"partialFingerprints":{"codehealthFindingId/v1":"3698f54ba3b94bca2366cfe35103ac8f1b4dabbf768c7a2cd71f89b40f5d0c18"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/EnumDB.java:490-504 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/EnumDataType.java:491-505 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/EnumDB.java:490\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/EnumDB.java"},"region":{"startLine":490}}}],"partialFingerprints":{"codehealthFindingId/v1":"c0ca4b1753bde3a65c402f031a442f8ec7f23ded426b2e6e03cc028efb4ab3c6"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/StructureDB.java:670-684 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/StructureDataType.java:396-410 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/StructureDB.java:670\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/StructureDB.java"},"region":{"startLine":670}}}],"partialFingerprints":{"codehealthFindingId/v1":"d7ed2b1e4073b09abfcdfaa41848d5570c7a4e9af769c36f54f7fcf29412c3bf"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/StructureDB.java:1011-1026 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/StructureDataType.java:1004-1018 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/StructureDB.java:1011\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/StructureDB.java"},"region":{"startLine":1011}}}],"partialFingerprints":{"codehealthFindingId/v1":"fe63fbd6444c8d705fce6562320da8cac0137af49d65500b26d17c0f90ae4173"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/StructureDB.java:1045-1059 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/StructureDataType.java:1034-1048 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/StructureDB.java"},"region":{"startLine":1045}}}],"partialFingerprints":{"codehealthFindingId/v1":"03d3cadec732bcb31e0406b7f8065f401f2af9d1a300196d7cf0f63979f2b5b9"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/StructureDB.java:1972-1986 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/UnionDB.java:723-737 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/StructureDB.java:1972\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/StructureDB.java"},"region":{"startLine":1972}}}],"partialFingerprints":{"codehealthFindingId/v1":"fa4cc94dfe33f6bc1667903d7a0c186fd4dba1b5f1754e638dd274a8b80c3144"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/DataTypeArchiveContentHandler.java:83-97 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/DataTypeArchiveContentHandler.java:138-152 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/DataTypeArchiveContentHandler.java:83\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/DataTypeArchiveContentHandler.java"},"region":{"startLine":83}}}],"partialFingerprints":{"codehealthFindingId/v1":"ab6da2ac58224be0ea49471cb3f1f4703553c4d9d4e522166eb26e1f4be7e11d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/DataTypeArchiveContentHandler.java:268-282 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/ProgramContentHandler.java:283-297 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/DataTypeArchiveContentHandler.java:268\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/DataTypeArchiveContentHandler.java"},"region":{"startLine":268}}}],"partialFingerprints":{"codehealthFindingId/v1":"d5bef5d0707595b01cb6bd33a37e49de62c25d7b2c83e95dbcd759b8cc47a4df"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): Ghidra/Framework/Project/src/main/java/ghidra/framework/main/logviewer/ui/FVTable.java:284-298 | Ghidra/Framework/Project/src/main/java/ghidra/framework/main/logviewer/ui/FVTable.java:356-370 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/Project/src/main/java/ghidra/framework/main/logviewer/ui/FVTable.java:284\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Project/src/main/java/ghidra/framework/main/logviewer/ui/FVTable.java"},"region":{"startLine":284}}}],"partialFingerprints":{"codehealthFindingId/v1":"85707329ce8e0e511c478055f396ab20b78f1852ec3fdd70b81521c4495802d0"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): GhidraBuild/EclipsePlugins/GhidraDev/GhidraDevPlugin/src/main/java/ghidradev/ghidraprojectcreator/launchers/GhidraLaunchTabGroup.java:133-146 | GhidraBuild/EclipsePlugins/GhidraDev/GhidraDevPlugin/src/main/java/ghidradev/ghidraprojectcreator/launchers/PyGhidraLaunchTabGroup.java:131-144 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060GhidraBuild/EclipsePlugins/GhidraDev/GhidraDevPlugin/src/main/java/ghidradev/ghidraprojectcreator/launchers/GhidraLaunchTabGroup.java:133\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"GhidraBuild/EclipsePlugins/GhidraDev/GhidraDevPlugin/src/main/java/ghidradev/ghidraprojectcreator/launchers/GhidraLaunchTabGroup.java"},"region":{"startLine":133}}}],"partialFingerprints":{"codehealthFindingId/v1":"285b00afff034c6f818caa9cce6b650f679140286fc17e2151398a8719e4f690"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): Ghidra/Processors/Sparc/src/main/java/ghidra/app/plugin/core/analysis/SparcAnalyzer.java:129-142 | Ghidra/Processors/Hexagon/src/main/java/ghidra/app/plugin/core/analysis/HexagonAnalyzer.java:212-225 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Processors/Sparc/src/main/java/ghidra/app/plugin/core/analysis/SparcAnalyzer.java:129\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Processors/Sparc/src/main/java/ghidra/app/plugin/core/analysis/SparcAnalyzer.java"},"region":{"startLine":129}}}],"partialFingerprints":{"codehealthFindingId/v1":"769046dc64d02c1bf35019a3e33fa84057390f46716239d102e1ccc49eef455c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): Ghidra/Processors/PIC/src/main/java/ghidra/app/plugin/core/analysis/Pic17c7xxAnalyzer.java:331-344 | Ghidra/Processors/PIC/src/main/java/ghidra/app/plugin/core/analysis/Pic18Analyzer.java:317-330 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Processors/PIC/src/main/java/ghidra/app/plugin/core/analysis/Pic17c7xxAnalyzer.java:331\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Processors/PIC/src/main/java/ghidra/app/plugin/core/analysis/Pic17c7xxAnalyzer.java"},"region":{"startLine":331}}}],"partialFingerprints":{"codehealthFindingId/v1":"a17b58407afc1b3347b3886a0f0622eb84d14fb1e16b18b306462a2f1a4290ad"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): Ghidra/Processors/PIC/src/main/java/ghidra/app/plugin/core/analysis/Pic17c7xxAnalyzer.java:361-374 | Ghidra/Processors/PIC/src/main/java/ghidra/app/plugin/core/analysis/Pic18Analyzer.java:386-399 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Processors/PIC/src/main/java/ghidra/app/plugin/core/analysis/Pic17c7xxAnalyzer.java:361\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Processors/PIC/src/main/java/ghidra/app/plugin/core/analysis/Pic17c7xxAnalyzer.java"},"region":{"startLine":361}}}],"partialFingerprints":{"codehealthFindingId/v1":"12fb861d2d8f314533378e94cd757c0d5f17976ec1db3a4ec7f033b9934efd60"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): Ghidra/Processors/ARM/src/main/java/ghidra/app/plugin/core/analysis/ArmAnalyzer.java:253-266 | Ghidra/Processors/68000/src/main/java/ghidra/app/plugin/core/analysis/Motorola68KAnalyzer.java:148-166 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Processors/ARM/src/main/java/ghidra/app/plugin/core/analysis/ArmAnalyzer.java:253\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. Note that the copies do not run to the end of the range shown: their LAST lines are different code, not the same code under different names \u2014 the matched region ends inside that line. Extract the lines above it, and read the last line of each site separately."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Processors/ARM/src/main/java/ghidra/app/plugin/core/analysis/ArmAnalyzer.java"},"region":{"startLine":253}}}],"partialFingerprints":{"codehealthFindingId/v1":"6818125898a1ba5dd6e9842bf4223de0a9bee6cece9041878d70d24cf6917291"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): Ghidra/Processors/AARCH64/src/main/java/ghidra/program/emulation/AARCH64EmulateInstructionStateModifier.java:740-753 | Ghidra/Processors/AARCH64/src/main/java/ghidra/program/emulation/AARCH64EmulateInstructionStateModifier.java:809-822 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Processors/AARCH64/src/main/java/ghidra/program/emulation/AARCH64EmulateInstructionStateModifier.java:740\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Processors/AARCH64/src/main/java/ghidra/program/emulation/AARCH64EmulateInstructionStateModifier.java"},"region":{"startLine":740}}}],"partialFingerprints":{"codehealthFindingId/v1":"c447a5fed230dc7ba864d8624e3eec8f28de04f38fe02445a3d39cd0d65c8845"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/util/PseudoDisassembler.java:1097-1110 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/util/PseudoDisassembler.java:1135-1149 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/util/PseudoDisassembler.java:1097\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/util/PseudoDisassembler.java"},"region":{"startLine":1097}}}],"partialFingerprints":{"codehealthFindingId/v1":"39bb3a7cad6beded777baa56ea7c86036630e04c7510976a8b4889cfe80acf87"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slgh_compile/PcodeCompile.java:902-915 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slgh_compile/SleighCompile.java:66-79 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slgh_compile/PcodeCompile.java:902\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slgh_compile/PcodeCompile.java"},"region":{"startLine":902}}}],"partialFingerprints":{"codehealthFindingId/v1":"98bfaaf8e6270b0c13df1e49536ab3ba5ba5156afe06df600c120e1b39407f57"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/EnumDB.java:349-362 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/EnumDataType.java:366-379 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/EnumDB.java:349\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/EnumDB.java"},"region":{"startLine":349}}}],"partialFingerprints":{"codehealthFindingId/v1":"7f65e2380e7125669e52d9f0ed68d747bf0b3a606d8201fd974936196f79695b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/EnumDB.java:383-396 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/EnumDataType.java:398-411 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/EnumDB.java:383\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/EnumDB.java"},"region":{"startLine":383}}}],"partialFingerprints":{"codehealthFindingId/v1":"20ba997df870dcdaa1729e9c5fb0cab83d13f97400bbfaf8831de735c6addf4b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/StructureDB.java:443-456 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/StructureDataType.java:824-837 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/StructureDB.java"},"region":{"startLine":443}}}],"partialFingerprints":{"codehealthFindingId/v1":"e28fe2df428ddafb7aa7d1570680cbdc69bc0f51336c85ca10ab3a40747b85bd"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/StructureDB.java:551-564 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/StructureDataType.java:289-302 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/StructureDB.java:551\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/StructureDB.java"},"region":{"startLine":551}}}],"partialFingerprints":{"codehealthFindingId/v1":"8b0135651f28de90743c7600871a03e49de71a91c6e9e7fcc43d2169e31d7e56"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/StructureDB.java:632-645 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/StructureDataType.java:356-369 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/StructureDB.java:632\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/StructureDB.java"},"region":{"startLine":632}}}],"partialFingerprints":{"codehealthFindingId/v1":"85b2843498775c751f3b2a88bbf706251d01e58174c5750bbd086af9e62be62c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/StructureDB.java:1143-1156 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/StructureDataType.java:212-225 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/StructureDB.java:1143\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/StructureDB.java"},"region":{"startLine":1143}}}],"partialFingerprints":{"codehealthFindingId/v1":"96ecd9ba0bd05a027d82688ae5563c1c8a99ccd9c86824619114c05a70d5d2cd"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/StructureDB.java:1248-1261 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/StructureDataType.java:521-534 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/StructureDB.java"},"region":{"startLine":1248}}}],"partialFingerprints":{"codehealthFindingId/v1":"e7e5bc6c05c37e9d1334b9abc6cc10852ba4ef5296b771bebd6e83336fff7453"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/StructureDB.java:1550-1563 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/StructureDataType.java:1684-1697 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/StructureDB.java:1550\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/StructureDB.java"},"region":{"startLine":1550}}}],"partialFingerprints":{"codehealthFindingId/v1":"8ef970e6bc4903bb2393d4714347929b6cd3747ce627f0ade42187fb56e7b379"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/map/AddressKeyIterator.java:150-163 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/map/AddressKeyRecordIterator.java:147-160 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/map/AddressKeyIterator.java:150\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/map/AddressKeyIterator.java"},"region":{"startLine":150}}}],"partialFingerprints":{"codehealthFindingId/v1":"f69ba32dff2c564fe32b44f99baf09673c9328bd322dce39553cbc472bdc646a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/address/AddressObjectMap.java:170-183 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/address/AddressObjectMap.java:295-308 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/address/AddressObjectMap.java:170\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/address/AddressObjectMap.java"},"region":{"startLine":170}}}],"partialFingerprints":{"codehealthFindingId/v1":"e503a5ea8e2409f7e95b8e2b771583610ed0e59f6b6c9a439dc2b5443c742f7f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/block/IsolatedEntrySubModel.java:96-109 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/block/OverlapCodeSubModel.java:98-111 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/block/IsolatedEntrySubModel.java:96\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/block/IsolatedEntrySubModel.java"},"region":{"startLine":96}}}],"partialFingerprints":{"codehealthFindingId/v1":"2e2840cd40e43a714aa6b2616e92fd11ea9ff5dabdbd81667b12f7621a9e7703"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/CountedDynamicDataType.java:161-174 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/IndexedDynamicDataType.java:243-256 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/CountedDynamicDataType.java:161\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/CountedDynamicDataType.java"},"region":{"startLine":161}}}],"partialFingerprints":{"codehealthFindingId/v1":"519d2927d2c3e43a3fa2b948532c117ee1df958a40c14c21f8d976074edbdaba"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/StringDataInstance.java:588-601 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/StringDataInstance.java:855-868 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/StringDataInstance.java"},"region":{"startLine":588}}}],"partialFingerprints":{"codehealthFindingId/v1":"5d2429b9840f06d0b463dd5b693415de7ac54942661c220129c8d4fc039e89fe"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/pcode/DynamicHash.java:477-490 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/pcode/DynamicHash.java:540-553 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/pcode/DynamicHash.java:477\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/pcode/DynamicHash.java"},"region":{"startLine":477}}}],"partialFingerprints":{"codehealthFindingId/v1":"c7de711ce06918cefa56f619d2b23c0a6ff323af72af6cf8c28ae9da3b02a984"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 4): GhidraBuild/EclipsePlugins/GhidraDev/GhidraDevPlugin/src/main/java/ghidradev/ghidraprojectcreator/wizards/CreateGhidraModuleProjectWizard.java:96-108 | GhidraBuild/EclipsePlugins/GhidraDev/GhidraDevPlugin/src/main/java/ghidradev/ghidraprojectcreator/wizards/CreateGhidraScriptProjectWizard.java:90-102 | GhidraBuild/EclipsePlugins/GhidraDev/GhidraDevPlugin/src/main/java/ghidradev/ghidraprojectcreator/wizards/CreateGhidraScriptWizard.java:79-91 | GhidraBuild/EclipsePlugins/GhidraDev/GhidraDevPlugin/src/main/java/ghidradev/ghidraprojectcreator/wizards/ImportGhidraModuleSourceWizard.java:84-96 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060GhidraBuild/EclipsePlugins/GhidraDev/GhidraDevPlugin/src/main/java/ghidradev/ghidraprojectcreator/wizards/CreateGhidraModuleProjectWizard.java:96\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"GhidraBuild/EclipsePlugins/GhidraDev/GhidraDevPlugin/src/main/java/ghidradev/ghidraprojectcreator/wizards/CreateGhidraModuleProjectWizard.java"},"region":{"startLine":96}}}],"partialFingerprints":{"codehealthFindingId/v1":"157d80b517e00b12999156ef16560635b66e3b3143d93c22316c1b99ed9c3782"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 3): Ghidra/Processors/PowerPC/src/main/java/ghidra/app/plugin/core/analysis/PowerPCAddressAnalyzer.java:482-494 | Ghidra/Processors/ARM/src/main/java/ghidra/app/plugin/core/analysis/ArmAnalyzer.java:445-457 | Ghidra/Processors/68000/src/main/java/ghidra/app/plugin/core/analysis/Motorola68KAnalyzer.java:303-315 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere all 3 call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made 3 times. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Processors/PowerPC/src/main/java/ghidra/app/plugin/core/analysis/PowerPCAddressAnalyzer.java:482\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Processors/PowerPC/src/main/java/ghidra/app/plugin/core/analysis/PowerPCAddressAnalyzer.java"},"region":{"startLine":482}}}],"partialFingerprints":{"codehealthFindingId/v1":"3f85f0e3212b9ef1bac8382b5c3e8ccdd84a1b1b01c76c9f5ea77a4e5a9f161b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): GhidraBuild/EclipsePlugins/GhidraDev/GhidraDevPlugin/src/main/java/ghidradev/ghidraprojectcreator/launchers/GhidraLaunchTabGroup.java:67-79 | GhidraBuild/EclipsePlugins/GhidraDev/GhidraDevPlugin/src/main/java/ghidradev/ghidraprojectcreator/launchers/PyGhidraLaunchTabGroup.java:64-77 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060GhidraBuild/EclipsePlugins/GhidraDev/GhidraDevPlugin/src/main/java/ghidradev/ghidraprojectcreator/launchers/GhidraLaunchTabGroup.java:67\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"GhidraBuild/EclipsePlugins/GhidraDev/GhidraDevPlugin/src/main/java/ghidradev/ghidraprojectcreator/launchers/GhidraLaunchTabGroup.java"},"region":{"startLine":67}}}],"partialFingerprints":{"codehealthFindingId/v1":"8df8d2664165fc61df59c6acfa9a24e28617626472f30c962af7dc6b682d7722"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): GhidraBuild/EclipsePlugins/GhidraDev/GhidraDevPlugin/src/main/java/ghidradev/ghidraprojectcreator/launchers/GhidraLaunchTabGroup.java:182-194 | GhidraBuild/EclipsePlugins/GhidraDev/GhidraDevPlugin/src/main/java/ghidradev/ghidraprojectcreator/launchers/PyGhidraLaunchTabGroup.java:179-192 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060GhidraBuild/EclipsePlugins/GhidraDev/GhidraDevPlugin/src/main/java/ghidradev/ghidraprojectcreator/launchers/GhidraLaunchTabGroup.java:182\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"GhidraBuild/EclipsePlugins/GhidraDev/GhidraDevPlugin/src/main/java/ghidradev/ghidraprojectcreator/launchers/GhidraLaunchTabGroup.java"},"region":{"startLine":182}}}],"partialFingerprints":{"codehealthFindingId/v1":"7708d3246212255046f194cd023ec3697f7e785a0cfc57e4e3010ac3432370f6"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): GhidraBuild/EclipsePlugins/GhidraDev/GhidraDevPlugin/src/main/java/ghidradev/ghidraprojectcreator/launchers/GhidraLaunchTabGroup.java:225-237 | GhidraBuild/EclipsePlugins/GhidraDev/GhidraDevPlugin/src/main/java/ghidradev/ghidraprojectcreator/launchers/PyGhidraLaunchTabGroup.java:202-214 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060GhidraBuild/EclipsePlugins/GhidraDev/GhidraDevPlugin/src/main/java/ghidradev/ghidraprojectcreator/launchers/GhidraLaunchTabGroup.java:225\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"GhidraBuild/EclipsePlugins/GhidraDev/GhidraDevPlugin/src/main/java/ghidradev/ghidraprojectcreator/launchers/GhidraLaunchTabGroup.java"},"region":{"startLine":225}}}],"partialFingerprints":{"codehealthFindingId/v1":"a548ccab4820b03202073e11fa9bc6164e250c8e89859acaf6a9a5763839847f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): Ghidra/Processors/AARCH64/src/main/java/ghidra/program/emulation/AARCH64EmulateInstructionStateModifier.java:605-617 | Ghidra/Processors/AARCH64/src/main/java/ghidra/program/emulation/AARCH64EmulateInstructionStateModifier.java:649-661 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Processors/AARCH64/src/main/java/ghidra/program/emulation/AARCH64EmulateInstructionStateModifier.java:605\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Processors/AARCH64/src/main/java/ghidra/program/emulation/AARCH64EmulateInstructionStateModifier.java"},"region":{"startLine":605}}}],"partialFingerprints":{"codehealthFindingId/v1":"86462bc80a069afa28a373f241cac87b15ac51453d6caa92b9596bc6a848cce8"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): Ghidra/Processors/AARCH64/src/main/java/ghidra/program/emulation/AARCH64EmulateInstructionStateModifier.java:773-785 | Ghidra/Processors/AARCH64/src/main/java/ghidra/program/emulation/AARCH64EmulateInstructionStateModifier.java:842-854 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Processors/AARCH64/src/main/java/ghidra/program/emulation/AARCH64EmulateInstructionStateModifier.java:773\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Processors/AARCH64/src/main/java/ghidra/program/emulation/AARCH64EmulateInstructionStateModifier.java"},"region":{"startLine":773}}}],"partialFingerprints":{"codehealthFindingId/v1":"4a9c7757d12ea9624f6308dee5b707b440d69252ee5fd24b98532cc6df7daeda"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/assembler/sleigh/expr/LeftShiftExpressionSolver.java:112-124 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/assembler/sleigh/expr/RightShiftExpressionSolver.java:95-107 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/assembler/sleigh/expr/LeftShiftExpressionSolver.java:112\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/assembler/sleigh/expr/LeftShiftExpressionSolver.java"},"region":{"startLine":112}}}],"partialFingerprints":{"codehealthFindingId/v1":"3e70a76e8be5a8d8622372ef016c4dbfd07f50f0038529b12abb7dcdbb31e1f9"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghpattern/DisjointPattern.java:88-100 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghpattern/DisjointPattern.java:105-117 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghpattern/DisjointPattern.java:88\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghpattern/DisjointPattern.java"},"region":{"startLine":88}}}],"partialFingerprints":{"codehealthFindingId/v1":"38443b05030b3840f178bde8b12dda5a005c1361f0a5ab64b2f628c1c440c0cc"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/ArrayDB.java:278-290 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/PointerDB.java:344-357 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/ArrayDB.java:278\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/ArrayDB.java"},"region":{"startLine":278}}}],"partialFingerprints":{"codehealthFindingId/v1":"6f03df161beeeb4d625393453a0bf2819079ff43908defb9389e333357d02629"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/ArrayDB.java:414-426 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/PointerDB.java:439-451 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/ArrayDB.java:414\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/ArrayDB.java"},"region":{"startLine":414}}}],"partialFingerprints":{"codehealthFindingId/v1":"efd670bb18bb4ca70b08cbb03f4cd9636dd54f7270a271810ebc07685bbf8b82"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/DataTypeComponentDB.java:297-309 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/DataTypeComponentImpl.java:268-280 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/DataTypeComponentDB.java:297\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/DataTypeComponentDB.java"},"region":{"startLine":297}}}],"partialFingerprints":{"codehealthFindingId/v1":"7dafcdcd006daf88ad564d502923166dfc24afab634a6aacf577a4266246b6b5"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/DataTypeManagerDB.java:1108-1120 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/DataTypeManagerDB.java:1131-1143 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/DataTypeManagerDB.java:1108\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. Note that the copies do not run to the end of the range shown: their LAST lines are different code, not the same code under different names \u2014 the matched region ends inside that line. Extract the lines above it, and read the last line of each site separately."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/DataTypeManagerDB.java"},"region":{"startLine":1108}}}],"partialFingerprints":{"codehealthFindingId/v1":"78ca2c7d9b2e4ab45dbf6236b5f2a62bba1542ca54731b8e8f2314a19e0f94fd"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/DataTypeUtilities.java:396-408 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/TypedefDataType.java:99-111 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/DataTypeUtilities.java:396\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/DataTypeUtilities.java"},"region":{"startLine":396}}}],"partialFingerprints":{"codehealthFindingId/v1":"451d6026c52ea923711b538ecbb94246e796fed3d8ec84ab7922487659feea3b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/PointerDB.java:258-270 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/PointerDataType.java:704-716 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/PointerDB.java:258\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/PointerDB.java"},"region":{"startLine":258}}}],"partialFingerprints":{"codehealthFindingId/v1":"5fd0d1ff9f237b294d5bdfda48c453c2fa147e4cc06184bd42f62acea143da8a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/StructureDB.java:655-667 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/StructureDataType.java:379-392 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/StructureDB.java:655\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/StructureDB.java"},"region":{"startLine":655}}}],"partialFingerprints":{"codehealthFindingId/v1":"d118a87696d74dcf8e0e4af3a48fa73cf76da7da37ed68bb998945a9e8dcdf5d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/StructureDB.java:724-736 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/UnionDB.java:364-376 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/StructureDB.java:724\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/StructureDB.java"},"region":{"startLine":724}}}],"partialFingerprints":{"codehealthFindingId/v1":"d23cec5256b48c7639981acaed773aa002f7261a3ecfb17496cc68a193c5b8bd"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/StructureDB.java:1110-1122 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/StructureDataType.java:181-193 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/StructureDB.java:1110\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/StructureDB.java"},"region":{"startLine":1110}}}],"partialFingerprints":{"codehealthFindingId/v1":"c622c8eee9eb3a89f3d6972267c5c16665661018548fd4105f864f54d8ed22f2"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/StructureDB.java:1714-1726 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/StructureDataType.java:1344-1356 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/StructureDB.java:1714\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/StructureDB.java"},"region":{"startLine":1714}}}],"partialFingerprints":{"codehealthFindingId/v1":"1449bd2b74a3fba64368d20bacd50e83f359a9b1b4da95ac357bbb84212d7313"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/StructureDB.java:2048-2060 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/StructureDataType.java:1186-1198 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/StructureDB.java:2048\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. Note that the copies do not run to the end of the range shown: their LAST lines are different code, not the same code under different names \u2014 the matched region ends inside that line. Extract the lines above it, and read the last line of each site separately."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/StructureDB.java"},"region":{"startLine":2048}}}],"partialFingerprints":{"codehealthFindingId/v1":"bf2989545b1d759bc5deb14a648a390e055da494683b14130bce209964a1b001"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/StructureDB.java:2318-2330 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/StructureDataType.java:1427-1439 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/StructureDB.java:2318\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/StructureDB.java"},"region":{"startLine":2318}}}],"partialFingerprints":{"codehealthFindingId/v1":"e0e35808069ce857c2ce492e7497d1b685dff15169713da59db79f3a31f93d39"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/UnionDB.java:545-557 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/UnionDataType.java:359-371 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/UnionDB.java:545\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/UnionDB.java"},"region":{"startLine":545}}}],"partialFingerprints":{"codehealthFindingId/v1":"431f3fe7e544c39cb38342a40cdb949d4406bc1f31ea96451c7d1a8d112f7b17"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/symbol/SymbolManager.java:403-415 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/symbol/SymbolManager.java:434-446 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/symbol/SymbolManager.java:403\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/symbol/SymbolManager.java"},"region":{"startLine":403}}}],"partialFingerprints":{"codehealthFindingId/v1":"0b5059b3047cf9ab51c305bf496f7b91f1698bc08322670a10b8ca2c557688f3"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/address/AddressSet.java:443-455 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/address/ImmutableAddressSet.java:199-211 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/address/AddressSet.java:443\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/address/AddressSet.java"},"region":{"startLine":443}}}],"partialFingerprints":{"codehealthFindingId/v1":"cec45b7173742fe308c98697be2b928baabbdd788d372d9c00924ed87db5401e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/BitmapResource.java:510-522 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/BitmapResource.java:583-595 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/BitmapResource.java:510\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/BitmapResource.java"},"region":{"startLine":510}}}],"partialFingerprints":{"codehealthFindingId/v1":"3cc881585831588a5a0f3a923c9c1e6bcdf010d313fdeeb5111822f5b6ea6c34"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/util/AddressExpressionValue.java:103-116 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/util/AddressExpressionValue.java:143-155 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/util/AddressExpressionValue.java:103\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/util/AddressExpressionValue.java"},"region":{"startLine":103}}}],"partialFingerprints":{"codehealthFindingId/v1":"1f7cf07b1b6c2f81bdbde5c80d96c962f9597854bbe108165f693f5b2e89bca6"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): Ghidra/Framework/Project/src/main/java/ghidra/framework/data/GhidraFileData.java:770-782 | Ghidra/Framework/Project/src/main/java/ghidra/framework/data/GhidraFileData.java:843-855 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/Project/src/main/java/ghidra/framework/data/GhidraFileData.java:770\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Project/src/main/java/ghidra/framework/data/GhidraFileData.java"},"region":{"startLine":770}}}],"partialFingerprints":{"codehealthFindingId/v1":"10f81bb7daea0d271e7c40a229ca9ae78a6e1500913fc1b81f02b0d52ac23f8f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): Ghidra/Framework/Project/src/main/java/ghidra/framework/data/GhidraFileData.java:1336-1348 | Ghidra/Framework/Project/src/main/java/ghidra/framework/data/GhidraFileData.java:1421-1433 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/Project/src/main/java/ghidra/framework/data/GhidraFileData.java:1336\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. Note that the copies do not run to the end of the range shown: their LAST lines are different code, not the same code under different names \u2014 the matched region ends inside that line. Extract the lines above it, and read the last line of each site separately."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Project/src/main/java/ghidra/framework/data/GhidraFileData.java"},"region":{"startLine":1336}}}],"partialFingerprints":{"codehealthFindingId/v1":"779ca209c2fec5fbeb4c94d5a3c7f8d431bcfba54bb3ab2466eb0a5a9c2cd383"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): Ghidra/Framework/Project/src/main/java/ghidra/framework/data/GhidraFolder.java:454-466 | Ghidra/Framework/Project/src/main/java/ghidra/framework/data/LinkedGhidraSubFolder.java:143-155 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/Project/src/main/java/ghidra/framework/data/GhidraFolder.java:454\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Project/src/main/java/ghidra/framework/data/GhidraFolder.java"},"region":{"startLine":454}}}],"partialFingerprints":{"codehealthFindingId/v1":"29f79b0f46e17b89e468cf2263cf79bd36c73602f4de09dfe3310ee287986b4f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): Ghidra/Framework/Project/src/main/java/ghidra/framework/main/wizard/project/ProjectChooseRepositoryWizardModel.java:102-114 | Ghidra/Framework/Project/src/main/java/ghidra/framework/main/wizard/project/ProjectWizardModel.java:100-112 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/Project/src/main/java/ghidra/framework/main/wizard/project/ProjectChooseRepositoryWizardModel.java:102\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Project/src/main/java/ghidra/framework/main/wizard/project/ProjectChooseRepositoryWizardModel.java"},"region":{"startLine":102}}}],"partialFingerprints":{"codehealthFindingId/v1":"472082a9f8bfeb6aa4b79a5e055e49b5efb6926783cfcd1483c6887a0d9d978a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): Ghidra/Framework/Project/src/main/java/ghidra/framework/main/EditPluginPathDialog.java:209-221 | Ghidra/Framework/Project/src/main/java/ghidra/framework/main/EditPluginPathDialog.java:241-253 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/Project/src/main/java/ghidra/framework/main/EditPluginPathDialog.java:209\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Project/src/main/java/ghidra/framework/main/EditPluginPathDialog.java"},"region":{"startLine":209}}}],"partialFingerprints":{"codehealthFindingId/v1":"40b6462440e8ef40b4e84c929d84ae7434d7e3d22bb988b2bb859547ebd440fc"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 4): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/ArrayDBAdapter.java:91-102 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/EnumValueDBAdapter.java:118-129 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/FunctionParameterAdapter.java:126-137 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/PointerDBAdapter.java:101-112 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/ArrayDBAdapter.java:91\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/ArrayDBAdapter.java"},"region":{"startLine":91}}}],"partialFingerprints":{"codehealthFindingId/v1":"bc09232a62594dc3f0c198d4a64249d15005c1e6f2623c4b90a52e4c31ae3338"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 4): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/CompositeDBAdapter.java:166-177 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/EnumDBAdapter.java:123-134 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/FunctionDefinitionDBAdapter.java:162-173 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/TypedefDBAdapter.java:126-137 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/CompositeDBAdapter.java:166\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/CompositeDBAdapter.java"},"region":{"startLine":166}}}],"partialFingerprints":{"codehealthFindingId/v1":"b69c6d4e621a8930257429f2426382ddb1ef3af44408b17e3b548318cccbc551"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 3): Ghidra/Processors/AARCH64/src/main/java/ghidra/program/emulation/AARCH64EmulateInstructionStateModifier.java:271-282 | Ghidra/Processors/AARCH64/src/main/java/ghidra/program/emulation/AARCH64EmulateInstructionStateModifier.java:538-549 | Ghidra/Processors/AARCH64/src/main/java/ghidra/program/emulation/AARCH64EmulateInstructionStateModifier.java:688-699 \u2014 all 3 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Processors/AARCH64/src/main/java/ghidra/program/emulation/AARCH64EmulateInstructionStateModifier.java:271\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Processors/AARCH64/src/main/java/ghidra/program/emulation/AARCH64EmulateInstructionStateModifier.java"},"region":{"startLine":271}}}],"partialFingerprints":{"codehealthFindingId/v1":"5885f666c6c5d8ca0eb3076f1b7265e8a01b08229d638b4fd088df8494adcb2c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 3): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/FunctionDefinitionDB.java:432-443 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/StructureDB.java:1966-1977 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/UnionDB.java:717-728 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/FunctionDefinitionDB.java:432\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/FunctionDefinitionDB.java"},"region":{"startLine":432}}}],"partialFingerprints":{"codehealthFindingId/v1":"8843f07f1fbda0ba30d141f0f879d028b561052fd97c8ca24a165bbb695655da"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 3): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/ProgramContentHandler.java:83-94 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/ProgramContentHandler.java:136-147 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/ProgramContentHandler.java:195-206 \u2014 all 3 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/ProgramContentHandler.java:83\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/ProgramContentHandler.java"},"region":{"startLine":83}}}],"partialFingerprints":{"codehealthFindingId/v1":"828c93cd7393f03dc29740bbddf7df78f90465cdaf51743a776979521a5fe9f2"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 3): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/WideChar16DataType.java:112-123 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/WideChar32DataType.java:114-125 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/WideCharDataType.java:138-149 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/WideChar16DataType.java:112\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/WideChar16DataType.java"},"region":{"startLine":112}}}],"partialFingerprints":{"codehealthFindingId/v1":"c0c4ec944c072751dd60b6b9a0f3b462e0d47d416715e67c2917eabf82af0f5c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): GhidraBuild/EclipsePlugins/GhidraDev/GhidraDevPlugin/src/main/java/ghidradev/ghidraprojectcreator/wizards/ExportGhidraModuleWizard.java:165-176 | GhidraBuild/EclipsePlugins/GhidraDev/GhidraDevPlugin/src/main/java/ghidradev/ghidraprojectcreator/wizards/LinkGhidraWizard.java:108-119 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060GhidraBuild/EclipsePlugins/GhidraDev/GhidraDevPlugin/src/main/java/ghidradev/ghidraprojectcreator/wizards/ExportGhidraModuleWizard.java:165\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"GhidraBuild/EclipsePlugins/GhidraDev/GhidraDevPlugin/src/main/java/ghidradev/ghidraprojectcreator/wizards/ExportGhidraModuleWizard.java"},"region":{"startLine":165}}}],"partialFingerprints":{"codehealthFindingId/v1":"d2921156539ed617ffcc71485a553dcf9923bdbb2b8d9c81892124ad70a09b41"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): GhidraBuild/BuildFiles/Doclets/src/main/java/ghidra/doclets/typestubs/HtmlConverter.java:297-308 | GhidraBuild/BuildFiles/Doclets/src/main/java/ghidra/doclets/typestubs/HtmlConverter.java:325-336 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060GhidraBuild/BuildFiles/Doclets/src/main/java/ghidra/doclets/typestubs/HtmlConverter.java:297\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"GhidraBuild/BuildFiles/Doclets/src/main/java/ghidra/doclets/typestubs/HtmlConverter.java"},"region":{"startLine":297}}}],"partialFingerprints":{"codehealthFindingId/v1":"d9224875b26a651884b8c092bfc56e357ab711e8a864152c3684c747907bf61b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): Ghidra/Processors/PowerPC/src/main/java/ghidra/app/plugin/core/analysis/PowerPCAddressAnalyzer.java:314-325 | Ghidra/Processors/68000/src/main/java/ghidra/app/plugin/core/analysis/Motorola68KAnalyzer.java:150-166 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Processors/PowerPC/src/main/java/ghidra/app/plugin/core/analysis/PowerPCAddressAnalyzer.java:314\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Processors/PowerPC/src/main/java/ghidra/app/plugin/core/analysis/PowerPCAddressAnalyzer.java"},"region":{"startLine":314}}}],"partialFingerprints":{"codehealthFindingId/v1":"baa683d65a2aaba6c54d64645b665468d486bc0c47e4521f9badd7f01cbe47a4"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): Ghidra/Processors/PowerPC/src/main/java/ghidra/app/plugin/core/analysis/PowerPCAddressAnalyzer.java:740-751 | Ghidra/Processors/ARM/src/main/java/ghidra/app/plugin/core/analysis/ArmAnalyzer.java:736-747 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Processors/PowerPC/src/main/java/ghidra/app/plugin/core/analysis/PowerPCAddressAnalyzer.java:740\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Processors/PowerPC/src/main/java/ghidra/app/plugin/core/analysis/PowerPCAddressAnalyzer.java"},"region":{"startLine":740}}}],"partialFingerprints":{"codehealthFindingId/v1":"0278b11e4dcb501c30fd1fbb143c1aad2b55ffce2904b10fa967029e66156422"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): Ghidra/Processors/PIC/src/main/java/ghidra/app/plugin/core/analysis/Pic12Analyzer.java:537-548 | Ghidra/Processors/PIC/src/main/java/ghidra/app/plugin/core/analysis/Pic17c7xxAnalyzer.java:829-840 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Processors/PIC/src/main/java/ghidra/app/plugin/core/analysis/Pic12Analyzer.java:537\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Processors/PIC/src/main/java/ghidra/app/plugin/core/analysis/Pic12Analyzer.java"},"region":{"startLine":537}}}],"partialFingerprints":{"codehealthFindingId/v1":"65830e43bf8ce1e304ebe8440ccacd8a8f77bc30007fcb4536db2a5bee33e9ac"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): Ghidra/Processors/PIC/src/main/java/ghidra/app/plugin/core/analysis/Pic17c7xxAnalyzer.java:396-407 | Ghidra/Processors/PIC/src/main/java/ghidra/app/plugin/core/analysis/Pic18Analyzer.java:421-432 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Processors/PIC/src/main/java/ghidra/app/plugin/core/analysis/Pic17c7xxAnalyzer.java:396\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Processors/PIC/src/main/java/ghidra/app/plugin/core/analysis/Pic17c7xxAnalyzer.java"},"region":{"startLine":396}}}],"partialFingerprints":{"codehealthFindingId/v1":"8e9eaa3a4b62d034f71c78d0afbb042e7cad3cdd7455f258972b971c39a395bb"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): Ghidra/Processors/PIC/src/main/java/ghidra/app/plugin/core/analysis/Pic17c7xxAnalyzer.java:967-978 | Ghidra/Processors/PIC/src/main/java/ghidra/app/plugin/core/analysis/Pic18Analyzer.java:674-685 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Processors/PIC/src/main/java/ghidra/app/plugin/core/analysis/Pic17c7xxAnalyzer.java:967\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Processors/PIC/src/main/java/ghidra/app/plugin/core/analysis/Pic17c7xxAnalyzer.java"},"region":{"startLine":967}}}],"partialFingerprints":{"codehealthFindingId/v1":"84a7a0cdc31790a14d0bf54ab413566a97165df72d937cced1064226acf45c96"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): Ghidra/Processors/PIC/src/main/java/ghidra/app/plugin/core/analysis/Pic17c7xxAnalyzer.java:1007-1018 | Ghidra/Processors/PIC/src/main/java/ghidra/app/plugin/core/analysis/Pic18Analyzer.java:701-712 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Processors/PIC/src/main/java/ghidra/app/plugin/core/analysis/Pic17c7xxAnalyzer.java:1007\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Processors/PIC/src/main/java/ghidra/app/plugin/core/analysis/Pic17c7xxAnalyzer.java"},"region":{"startLine":1007}}}],"partialFingerprints":{"codehealthFindingId/v1":"641accf8f5459e9e40de7dbb93da6292be178abc9fe5b3c155773e898eca68ce"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): Ghidra/Processors/Loongarch/src/main/java/ghidra/app/plugin/core/analysis/LoongsonAnalyzer.java:101-113 | Ghidra/Processors/ARM/src/main/java/ghidra/app/plugin/core/analysis/ArmAnalyzer.java:236-247 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Processors/Loongarch/src/main/java/ghidra/app/plugin/core/analysis/LoongsonAnalyzer.java:101\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Processors/Loongarch/src/main/java/ghidra/app/plugin/core/analysis/LoongsonAnalyzer.java"},"region":{"startLine":101}}}],"partialFingerprints":{"codehealthFindingId/v1":"bb5f92cd1b60d5dd1b4e632f8401cf596d9f17427271c95aa4d06abbf0744132"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): Ghidra/Processors/Hexagon/src/main/java/ghidra/program/emulation/HexagonEmulateInstructionStateModifier.java:129-140 | Ghidra/Processors/Hexagon/src/main/java/ghidra/program/emulation/HexagonEmulateInstructionStateModifier.java:163-174 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Processors/Hexagon/src/main/java/ghidra/program/emulation/HexagonEmulateInstructionStateModifier.java"},"region":{"startLine":129}}}],"partialFingerprints":{"codehealthFindingId/v1":"1673cf3d91ac55fb12c269793080464d86e91b3fb62fdd7e3941ef2a79ddd95e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): Ghidra/Framework/Utility/src/main/java/utilities/util/reflection/ReflectionUtilities.java:679-690 | Ghidra/Framework/Utility/src/main/java/utilities/util/reflection/ReflectionUtilities.java:708-719 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/Utility/src/main/java/utilities/util/reflection/ReflectionUtilities.java:679\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Utility/src/main/java/utilities/util/reflection/ReflectionUtilities.java"},"region":{"startLine":679}}}],"partialFingerprints":{"codehealthFindingId/v1":"092f5dcf1f342a27bdd900c067c9d30e1281e47d36d218356edaa913fb633a4d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): Ghidra/Framework/Utility/src/main/java/utility/application/ApplicationUtilities.java:365-376 | Ghidra/Framework/Utility/src/main/java/utility/application/ApplicationUtilities.java:394-406 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/Utility/src/main/java/utility/application/ApplicationUtilities.java:365\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Utility/src/main/java/utility/application/ApplicationUtilities.java"},"region":{"startLine":365}}}],"partialFingerprints":{"codehealthFindingId/v1":"730da9d7528c60f0df9183da904ae5fbd16044429e70422f1bcf70d4975aedfd"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/util/PseudoData.java:288-299 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/code/DataDB.java:469-480 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/util/PseudoData.java:288\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/util/PseudoData.java"},"region":{"startLine":288}}}],"partialFingerprints":{"codehealthFindingId/v1":"4daa12aaa08010694007c3af76344b715e4e05abbf37075a0ae075c491d34312"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slgh_compile/ConsistencyChecker.java:572-583 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slgh_compile/ConsistencyChecker.java:592-603 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slgh_compile/ConsistencyChecker.java:572\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slgh_compile/ConsistencyChecker.java"},"region":{"startLine":572}}}],"partialFingerprints":{"codehealthFindingId/v1":"a0b8ca25be0135387208c97ab59b2bad5315b90dcfab25ce795ef9f4bbcb627c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/code/DataDBAdapter.java:102-113 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/code/InstDBAdapter.java:110-121 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/code/DataDBAdapter.java:102\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/code/DataDBAdapter.java"},"region":{"startLine":102}}}],"partialFingerprints":{"codehealthFindingId/v1":"457c52cfe02b046d8d80401725b49750d01891bed2e1e7aa4758743a1ae2742d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/CompositeDB.java:266-277 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/CompositeDataTypeImpl.java:234-245 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/CompositeDB.java:266\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/CompositeDB.java"},"region":{"startLine":266}}}],"partialFingerprints":{"codehealthFindingId/v1":"f012d057441f2ec9ae63c9840100effd69102e806a16f912cca4cfe62682c02e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/CompositeDB.java:448-459 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/CompositeDataTypeImpl.java:200-211 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/CompositeDB.java:448\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/CompositeDB.java"},"region":{"startLine":448}}}],"partialFingerprints":{"codehealthFindingId/v1":"a168b863d4c517599991fdaaa025528d7d5ce810e50a6db7acd064aac887a278"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/StructureDB.java:350-361 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/StructureDataType.java:734-745 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/StructureDB.java:350\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/StructureDB.java"},"region":{"startLine":350}}}],"partialFingerprints":{"codehealthFindingId/v1":"542af64e28a598b4dacb6ccaf018f0bbea8de542ebee9d17b59e8b9e86f06fa5"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/StructureDB.java:1230-1241 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/StructureDataType.java:504-515 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/StructureDB.java:1230\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. Note that the copies do not run to the end of the range shown: their LAST lines are different code, not the same code under different names \u2014 the matched region ends inside that line. Extract the lines above it, and read the last line of each site separately."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/StructureDB.java"},"region":{"startLine":1230}}}],"partialFingerprints":{"codehealthFindingId/v1":"4a030503d9a2c61ad34c66cd8a19245c1fd9d39c6efb4913c38d6af81be3a00f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/StructureDB.java:1278-1289 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/StructureDataType.java:551-562 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/StructureDB.java:1278\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/StructureDB.java"},"region":{"startLine":1278}}}],"partialFingerprints":{"codehealthFindingId/v1":"87da94a7bd6405d52dc25a4730f123f08259e521a97f7dc1ad53ad92da372ba1"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/StructureDB.java:1450-1461 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/StructureDataType.java:1595-1606 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/StructureDB.java:1450\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/StructureDB.java"},"region":{"startLine":1450}}}],"partialFingerprints":{"codehealthFindingId/v1":"28478c07dbd85b6073d4576f2912e64de079c296a43c1ae4b60039d6163edafd"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/StructureDB.java:1493-1504 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/StructureDataType.java:1631-1642 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/StructureDB.java:1493\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/StructureDB.java"},"region":{"startLine":1493}}}],"partialFingerprints":{"codehealthFindingId/v1":"6a10703db154210e6daa7a7ffcb5e3017d2412f79efbeff9d681eaeaa0c7effa"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/StructureDB.java:1861-1872 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/StructureDB.java:1922-1933 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/StructureDB.java:1861\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. Note that the copies do not run to the end of the range shown: their LAST lines are different code, not the same code under different names \u2014 the matched region ends inside that line. Extract the lines above it, and read the last line of each site separately."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/StructureDB.java"},"region":{"startLine":1861}}}],"partialFingerprints":{"codehealthFindingId/v1":"328a71bd32f78ed0badabeb5ff6f810c91d9d04bc53238f59c82a2dfaeb4790b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/StructureDB.java:1997-2008 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/StructureDataType.java:1077-1088 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/StructureDB.java:1997\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/StructureDB.java"},"region":{"startLine":1997}}}],"partialFingerprints":{"codehealthFindingId/v1":"540869dcb632725e948a2d346b558fcf28a2bdc696ee67ba2fc27f9f0fd93297"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/map/AddressIndexKeyIterator.java:102-113 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/map/AddressIndexPrimaryKeyIterator.java:103-114 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/map/AddressIndexKeyIterator.java:102\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. Note that the copies do not run to the end of the range shown: their LAST lines are different code, not the same code under different names \u2014 the matched region ends inside that line. Extract the lines above it, and read the last line of each site separately."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/map/AddressIndexKeyIterator.java"},"region":{"startLine":102}}}],"partialFingerprints":{"codehealthFindingId/v1":"8943f02d3d36d6f8be3e510ad7b01fd2a6d41875383fa2a6c345a730d9c691bb"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/map/AddressIndexKeyIterator.java:154-165 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/map/AddressIndexPrimaryKeyIterator.java:154-165 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/map/AddressIndexKeyIterator.java:154\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/map/AddressIndexKeyIterator.java"},"region":{"startLine":154}}}],"partialFingerprints":{"codehealthFindingId/v1":"61b05beebb340d91d741cce398ccc8e9dee10743691b8ada7417a2fb3fed79a1"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/mem/MemoryBlockDB.java:450-462 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/mem/MemoryBlockDB.java:499-510 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/mem/MemoryBlockDB.java:450\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/mem/MemoryBlockDB.java"},"region":{"startLine":450}}}],"partialFingerprints":{"codehealthFindingId/v1":"3f844cb0dfa16a73e3295d1d8db48b3b1f12537aeb1986a7967eaa1f0ad74e48"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/references/BigRefListV0.java:371-382 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/references/RefListV0.java:344-355 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/references/BigRefListV0.java:371\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/references/BigRefListV0.java"},"region":{"startLine":371}}}],"partialFingerprints":{"codehealthFindingId/v1":"a297a3c905b47322d51a7df14539f1d95f7560e0066bf43b2a276c91b8376fcf"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/sourcemap/SourceFileManagerDB.java:129-140 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/sourcemap/SourceFileManagerDB.java:218-229 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/sourcemap/SourceFileManagerDB.java:129\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. Note that the copies do not run to the end of the range shown: their LAST lines are different code, not the same code under different names \u2014 the matched region ends inside that line. Extract the lines above it, and read the last line of each site separately."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/sourcemap/SourceFileManagerDB.java"},"region":{"startLine":129}}}],"partialFingerprints":{"codehealthFindingId/v1":"51b1f8e1c6ce04afe8abd7f2f5c4747cd13fdd54a1d6227ec3f4a6bfe504a24f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/DataTypeArchiveContentHandler.java:311-322 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/ProgramContentHandler.java:323-334 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/DataTypeArchiveContentHandler.java:311\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/DataTypeArchiveContentHandler.java"},"region":{"startLine":311}}}],"partialFingerprints":{"codehealthFindingId/v1":"0813445094f2a4f08c4d850271775f7f751a3aee2ca0d2594748d99e52c58fee"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/ListingDB.java:512-523 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/ListingDB.java:530-541 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/ListingDB.java"},"region":{"startLine":512}}}],"partialFingerprints":{"codehealthFindingId/v1":"b489d8e7643863c0e9a5b102bc8041c542d278a9e2e5e599a510e5ace6127b34"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/SpecExtension.java:477-488 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/SpecExtension.java:507-518 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/SpecExtension.java:477\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/SpecExtension.java"},"region":{"startLine":477}}}],"partialFingerprints":{"codehealthFindingId/v1":"f6d99f1f477ffe7191d539319cc26bb9760809f18d862f7eb5de36f234c8fc5c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/address/AbstractAddressSpace.java:531-542 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/address/OverlayAddressSpace.java:210-221 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/address/AbstractAddressSpace.java"},"region":{"startLine":531}}}],"partialFingerprints":{"codehealthFindingId/v1":"1d6b046fcdfb976fdeaef03d61bf3939abd35046a83689918bb5ec8600b9ce1b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/StringRenderParser.java:276-287 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/StringRenderParser.java:288-299 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/StringRenderParser.java:276\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/StringRenderParser.java"},"region":{"startLine":276}}}],"partialFingerprints":{"codehealthFindingId/v1":"f600be483adaa1031055260bd343eb9a858ee23eb23a94bfdced6ce52af791c5"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/symbol/SymbolType.java:128-139 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/symbol/SymbolType.java:161-172 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/symbol/SymbolType.java:128\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/symbol/SymbolType.java"},"region":{"startLine":128}}}],"partialFingerprints":{"codehealthFindingId/v1":"346eb70a71947125e50eb14e210100c0189ccf5442228560f220fe7d5926b3d1"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 6): Ghidra/Processors/AARCH64/src/main/java/ghidra/program/emulation/AARCH64EmulateInstructionStateModifier.java:962-972 | Ghidra/Processors/AARCH64/src/main/java/ghidra/program/emulation/AARCH64EmulateInstructionStateModifier.java:1003-1013 | Ghidra/Processors/AARCH64/src/main/java/ghidra/program/emulation/AARCH64EmulateInstructionStateModifier.java:1108-1118 | Ghidra/Processors/AARCH64/src/main/java/ghidra/program/emulation/AARCH64EmulateInstructionStateModifier.java:1164-1177 | Ghidra/Processors/AARCH64/src/main/java/ghidra/program/emulation/AARCH64EmulateInstructionStateModifier.java:1207-1217 | Ghidra/Processors/AARCH64/src/main/java/ghidra/program/emulation/AARCH64EmulateInstructionStateModifier.java:1237-1247 \u2014 all 6 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Processors/AARCH64/src/main/java/ghidra/program/emulation/AARCH64EmulateInstructionStateModifier.java"},"region":{"startLine":962}}}],"partialFingerprints":{"codehealthFindingId/v1":"565e73053b0592118b22535252c1bacc71badfc2609466fd6e724283b56d083f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 5): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghpatexpress/GreaterEqualEquation.java:35-45 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghpatexpress/GreaterEquation.java:35-45 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghpatexpress/LessEqualEquation.java:35-45 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghpatexpress/LessEquation.java:35-45 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghpatexpress/NotEqualEquation.java:37-47 \u2014 before extracting anything, compare \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghpatexpress/GreaterEqualEquation.java\u0060 and \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghpatexpress/GreaterEquation.java\u0060 as WHOLE FILES: this scan already matched 4 separate duplicated blocks between them, totalling at least 35 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghpatexpress/GreaterEqualEquation.java:35\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghpatexpress/GreaterEqualEquation.java"},"region":{"startLine":35}}}],"partialFingerprints":{"codehealthFindingId/v1":"e16ed6b5f0761c9e6bdb8200aefe26f5190180638b8b23ea6eb9c7507daa3893"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 4): Ghidra/Processors/Hexagon/src/main/java/ghidra/program/emulation/HexagonEmulateInstructionStateModifier.java:355-365 | Ghidra/Processors/Hexagon/src/main/java/ghidra/program/emulation/HexagonEmulateInstructionStateModifier.java:396-406 | Ghidra/Processors/Hexagon/src/main/java/ghidra/program/emulation/HexagonEmulateInstructionStateModifier.java:642-652 | Ghidra/Processors/Hexagon/src/main/java/ghidra/program/emulation/HexagonEmulateInstructionStateModifier.java:675-685 \u2014 all 4 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Processors/Hexagon/src/main/java/ghidra/program/emulation/HexagonEmulateInstructionStateModifier.java"},"region":{"startLine":355}}}],"partialFingerprints":{"codehealthFindingId/v1":"bf87835b3f928f3d492a5c21aa4de0bfcc502ebe77bbeb2eea027f315eefc3db"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 4): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/properties/IntPropertyMapDB.java:115-125 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/properties/LongPropertyMapDB.java:115-125 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/properties/ObjectPropertyMapDB.java:376-386 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/properties/StringPropertyMapDB.java:109-119 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/properties/IntPropertyMapDB.java:115\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/properties/IntPropertyMapDB.java"},"region":{"startLine":115}}}],"partialFingerprints":{"codehealthFindingId/v1":"e9c7e1d1c728cbba4b5e585942a184538bf9061aea83ce97c5ddf14266f7932d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 3): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/processors/sleigh/SleighDebugLogger.java:1225-1235 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/util/PseudoInstruction.java:291-301 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/code/InstructionDB.java:344-357 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere all 3 call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made 3 times. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/processors/sleigh/SleighDebugLogger.java:1225\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/processors/sleigh/SleighDebugLogger.java"},"region":{"startLine":1225}}}],"partialFingerprints":{"codehealthFindingId/v1":"54efd8473bbf71867d0cded722cc14015de8a2e0702f1c5ac63417c7dd081ac5"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 3): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/EnumValueDBAdapterV1.java:53-63 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/FunctionDefinitionDBAdapterV2.java:66-76 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/FunctionParameterAdapterV1.java:63-73 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/EnumValueDBAdapterV1.java:53\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/EnumValueDBAdapterV1.java"},"region":{"startLine":53}}}],"partialFingerprints":{"codehealthFindingId/v1":"f39a43a47b911d6db2b09998331ff112019e5da140263cc5fb5e089290e60d22"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 3): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/map/AddressMapDB.java:150-160 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/map/AddressMapDBAdapterNoTable.java:99-109 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/address/AddressMapImpl.java:101-111 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere all 3 call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made 3 times. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/map/AddressMapDB.java:150\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/map/AddressMapDB.java"},"region":{"startLine":150}}}],"partialFingerprints":{"codehealthFindingId/v1":"7a04707f0d88bea2fc3ecf567a621c67a845ce1c41c7af8d26905218d21ab3c7"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): GhidraBuild/EclipsePlugins/GhidraDev/GhidraDevPlugin/src/main/java/ghidradev/ghidraprojectcreator/launchers/AbstractGhidraLaunchShortcut.java:94-104 | GhidraBuild/EclipsePlugins/GhidraDev/GhidraDevPlugin/src/main/java/ghidradev/ghidraprojectcreator/launchers/AbstractPyGhidraLaunchShortcut.java:93-103 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060GhidraBuild/EclipsePlugins/GhidraDev/GhidraDevPlugin/src/main/java/ghidradev/ghidraprojectcreator/launchers/AbstractGhidraLaunchShortcut.java:94\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. Note that the copies do not run to the end of the range shown: their LAST lines are different code, not the same code under different names \u2014 the matched region ends inside that line. Extract the lines above it, and read the last line of each site separately."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"GhidraBuild/EclipsePlugins/GhidraDev/GhidraDevPlugin/src/main/java/ghidradev/ghidraprojectcreator/launchers/AbstractGhidraLaunchShortcut.java"},"region":{"startLine":94}}}],"partialFingerprints":{"codehealthFindingId/v1":"dae3dc9eef7b9eacf785f3f6bb192c0179d599185c54a139df0f88f3627add22"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): Ghidra/Processors/PIC/src/main/java/ghidra/app/plugin/core/analysis/Pic12Analyzer.java:296-306 | Ghidra/Processors/PIC/src/main/java/ghidra/app/plugin/core/analysis/Pic18Analyzer.java:510-520 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Processors/PIC/src/main/java/ghidra/app/plugin/core/analysis/Pic12Analyzer.java:296\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Processors/PIC/src/main/java/ghidra/app/plugin/core/analysis/Pic12Analyzer.java"},"region":{"startLine":296}}}],"partialFingerprints":{"codehealthFindingId/v1":"e39304bbd985c72cf5783a1369c74874f67fda32ad10695959b85203c4d509a6"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): Ghidra/Processors/PIC/src/main/java/ghidra/app/plugin/core/analysis/Pic17c7xxAnalyzer.java:275-285 | Ghidra/Processors/PIC/src/main/java/ghidra/app/plugin/core/analysis/Pic18Analyzer.java:274-284 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Processors/PIC/src/main/java/ghidra/app/plugin/core/analysis/Pic17c7xxAnalyzer.java:275\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Processors/PIC/src/main/java/ghidra/app/plugin/core/analysis/Pic17c7xxAnalyzer.java"},"region":{"startLine":275}}}],"partialFingerprints":{"codehealthFindingId/v1":"c6c62c2ac9f288360170e7182d92657c7d718b4161c0c6f1ced3a8ec3601b984"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): Ghidra/Processors/PIC/src/main/java/ghidra/app/plugin/core/analysis/Pic17c7xxAnalyzer.java:469-479 | Ghidra/Processors/PIC/src/main/java/ghidra/app/plugin/core/analysis/Pic18Analyzer.java:466-476 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Processors/PIC/src/main/java/ghidra/app/plugin/core/analysis/Pic17c7xxAnalyzer.java:469\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Processors/PIC/src/main/java/ghidra/app/plugin/core/analysis/Pic17c7xxAnalyzer.java"},"region":{"startLine":469}}}],"partialFingerprints":{"codehealthFindingId/v1":"ff454d8147c9d08273beafc7db44f132ca9e0701a319d201f2abccccba149f60"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): Ghidra/Processors/NDS32/src/main/java/ghidra/app/plugin/core/analysis/NDS32Analyzer.java:139-149 | Ghidra/Processors/MIPS/src/main/java/ghidra/app/plugin/core/analysis/MipsAddressAnalyzer.java:241-252 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Processors/NDS32/src/main/java/ghidra/app/plugin/core/analysis/NDS32Analyzer.java:139\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Processors/NDS32/src/main/java/ghidra/app/plugin/core/analysis/NDS32Analyzer.java"},"region":{"startLine":139}}}],"partialFingerprints":{"codehealthFindingId/v1":"0a7199d5fa9e6728eaf2ca9a7911532eba655a2c014423d44ee018792a99f5d9"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): Ghidra/Processors/Loongarch/src/main/java/ghidra/app/plugin/core/analysis/LoongsonAnalyzer.java:74-84 | Ghidra/Processors/ARM/src/main/java/ghidra/app/plugin/core/analysis/ArmAnalyzer.java:158-168 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Processors/Loongarch/src/main/java/ghidra/app/plugin/core/analysis/LoongsonAnalyzer.java:74\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Processors/Loongarch/src/main/java/ghidra/app/plugin/core/analysis/LoongsonAnalyzer.java"},"region":{"startLine":74}}}],"partialFingerprints":{"codehealthFindingId/v1":"877c909e1ee217cf149475a4245ec1575aa71452223899e6a85cd317d117588e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): Ghidra/Processors/JVM/src/main/java/ghidra/javaclass/analyzers/JavaAnalyzer.java:587-597 | Ghidra/Processors/JVM/src/main/java/ghidra/javaclass/analyzers/JavaAnalyzer.java:611-621 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Processors/JVM/src/main/java/ghidra/javaclass/analyzers/JavaAnalyzer.java"},"region":{"startLine":587}}}],"partialFingerprints":{"codehealthFindingId/v1":"efb85061ec149b5afd3e9ae0710586fece31ff3f414cb1b9f22cec7f3bbf9aeb"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): Ghidra/Processors/AARCH64/src/main/java/ghidra/program/emulation/AARCH64EmulateInstructionStateModifier.java:1286-1296 | Ghidra/Processors/AARCH64/src/main/java/ghidra/program/emulation/AARCH64EmulateInstructionStateModifier.java:1299-1309 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Processors/AARCH64/src/main/java/ghidra/program/emulation/AARCH64EmulateInstructionStateModifier.java:1286\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Processors/AARCH64/src/main/java/ghidra/program/emulation/AARCH64EmulateInstructionStateModifier.java"},"region":{"startLine":1286}}}],"partialFingerprints":{"codehealthFindingId/v1":"208788f43079eabfe598e7634018ee860d86e51c20fd321f91abced32bbee911"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/processors/sleigh/SleighInstructionPrototype.java:815-826 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/processors/sleigh/SleighInstructionPrototype.java:847-857 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/processors/sleigh/SleighInstructionPrototype.java:815\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/processors/sleigh/SleighInstructionPrototype.java"},"region":{"startLine":815}}}],"partialFingerprints":{"codehealthFindingId/v1":"b962377d950f2b484170495a1c5fbb99ff00419dfcf828a37d07fb5308fe4bda"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcode/utils/Utils.java:71-81 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/utils/Utils.java:75-85 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcode/utils/Utils.java:71\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcode/utils/Utils.java"},"region":{"startLine":71}}}],"partialFingerprints":{"codehealthFindingId/v1":"841152c33061f71cbcfa46bc0b255909b55c2fa4a2fece5e343490f39f551ea3"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slgh_compile/ConsistencyChecker.java:1326-1336 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slgh_compile/ConsistencyChecker.java:1355-1365 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slgh_compile/ConsistencyChecker.java:1326\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slgh_compile/ConsistencyChecker.java"},"region":{"startLine":1326}}}],"partialFingerprints":{"codehealthFindingId/v1":"5cbbcefe701b1b5522cb65f326facdbf7ccd09e69b2024e5a5948e0a34bbfae7"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/CategoryDB.java:305-315 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/CategoryDB.java:331-341 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/CategoryDB.java:305\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/CategoryDB.java"},"region":{"startLine":305}}}],"partialFingerprints":{"codehealthFindingId/v1":"b160494de50f09de1b1f3f6638c318f5292bb0285f95b3c68986f0225f090a05"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/StructureDB.java:764-774 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/StructureDataType.java:457-468 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/StructureDB.java:764\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/StructureDB.java"},"region":{"startLine":764}}}],"partialFingerprints":{"codehealthFindingId/v1":"f4ce4498b5d600ea14fcda033bcd06e5fcebfb675ca9718219ed721d398b2ea1"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/StructureDB.java:1789-1800 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/UnionDB.java:699-709 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/StructureDB.java:1789\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/StructureDB.java"},"region":{"startLine":1789}}}],"partialFingerprints":{"codehealthFindingId/v1":"3b33ac0ce6757e5642ef591e3e250ad6d127de5e3188b258973a0d3c56359937"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/StructureDB.java:2113-2123 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/StructureDataType.java:1711-1721 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/StructureDB.java:2113\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/StructureDB.java"},"region":{"startLine":2113}}}],"partialFingerprints":{"codehealthFindingId/v1":"84fd94ac0e1c6a1ae18ad5496a9f2b5e7a0617cb54ea72cad526c64a1041c796"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/UnionDB.java:790-800 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/UnionDataType.java:527-537 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/UnionDB.java:790\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/UnionDB.java"},"region":{"startLine":790}}}],"partialFingerprints":{"codehealthFindingId/v1":"5405b9d9382d2adf4f1ed5741a18c357aefc0765349efab291b2b8483572ddc3"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/function/VariableDB.java:371-381 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/listing/VariableImpl.java:508-518 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/function/VariableDB.java:371\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/function/VariableDB.java"},"region":{"startLine":371}}}],"partialFingerprints":{"codehealthFindingId/v1":"893d1134b9b64afad9fe2db744ca7141c7b8cc58f313c9297d3a08c167d40261"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/references/ReferenceDBManager.java:607-617 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/references/ReferenceDBManager.java:631-641 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/references/ReferenceDBManager.java:607\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/references/ReferenceDBManager.java"},"region":{"startLine":607}}}],"partialFingerprints":{"codehealthFindingId/v1":"6b6c4e6b5c2fd9f38cc5afa99e498949a892b76f006112906f3abf9f72500779"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/symbol/SymbolManager.java:1049-1059 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/symbol/SymbolManager.java:1085-1095 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/symbol/SymbolManager.java:1049\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/symbol/SymbolManager.java"},"region":{"startLine":1049}}}],"partialFingerprints":{"codehealthFindingId/v1":"c8b64f3620558d9cce0e16ebd127aa442db3f0bd2176f942fe0f42d63dee148d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/symbol/SymbolManager.java:3072-3082 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/symbol/SymbolManager.java:3166-3176 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/symbol/SymbolManager.java:3072\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/symbol/SymbolManager.java"},"region":{"startLine":3072}}}],"partialFingerprints":{"codehealthFindingId/v1":"78f3195de3cc495227d42d2d698dc937768329635435084435238370ce25eda5"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/ProgramDB.java:1045-1055 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/ProgramDB.java:1077-1087 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/ProgramDB.java:1045\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. Note that the copies do not run to the end of the range shown: their LAST lines are different code, not the same code under different names \u2014 the matched region ends inside that line. Extract the lines above it, and read the last line of each site separately."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/ProgramDB.java"},"region":{"startLine":1045}}}],"partialFingerprints":{"codehealthFindingId/v1":"3bf2e34e13939348149eab94909a796deb899d2e0e7d2b09be360ce5a0441df4"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/disassemble/DisassemblerQueue.java:307-317 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/PointerDataType.java:680-690 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/disassemble/DisassemblerQueue.java:307\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/disassemble/DisassemblerQueue.java"},"region":{"startLine":307}}}],"partialFingerprints":{"codehealthFindingId/v1":"b63f1d9f040eea4c06722a32c602744b6dce00b29fb79ea50001de27a5128e59"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/block/SimpleDestReferenceIterator.java:237-247 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/block/SimpleSourceReferenceIterator.java:194-204 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/block/SimpleDestReferenceIterator.java"},"region":{"startLine":237}}}],"partialFingerprints":{"codehealthFindingId/v1":"871e08e958194884c0fbf37f08adb41506fb26f69854199378d31df6ac15e8dd"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/BitmapResource.java:327-337 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/BitmapResource.java:350-360 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/BitmapResource.java"},"region":{"startLine":327}}}],"partialFingerprints":{"codehealthFindingId/v1":"fc7add924740fbfba591dd57979586a380a3f2146d842023d646a3535d60d396"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/pcode/AddressXML.java:377-387 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/pcode/AddressXML.java:464-474 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/pcode/AddressXML.java:377\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/pcode/AddressXML.java"},"region":{"startLine":377}}}],"partialFingerprints":{"codehealthFindingId/v1":"b7c6796acb95fb5985896d6cb07f80aafda54e9cf6c962ce90de5d8b8b7799a8"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/pcode/XmlEncode.java:169-179 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/pcode/XmlEncode.java:203-213 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/pcode/XmlEncode.java"},"region":{"startLine":169}}}],"partialFingerprints":{"codehealthFindingId/v1":"2773c1da3cddff38ee798369833f88d4f205c3fe2c2e09750f5fb86bb5ef6767"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/util/OldLanguage.java:308-318 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/util/SimpleLanguageTranslator.java:376-386 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/util/OldLanguage.java:308\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/util/OldLanguage.java"},"region":{"startLine":308}}}],"partialFingerprints":{"codehealthFindingId/v1":"1702bcbb43c7b178c4cbfa90db7a0809b3735f744051905a47ae7d96786c3d69"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/util/RegisterValueStore.java:148-158 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/util/RegisterValueStore.java:204-214 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/util/RegisterValueStore.java:148\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/util/RegisterValueStore.java"},"region":{"startLine":148}}}],"partialFingerprints":{"codehealthFindingId/v1":"e806d06c2f59ec9870102348cdcb352d13854b61b8057b4f87cf60a1450f692d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/sleigh/grammar/BaseRecognizerOverride.java:37-47 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/sleigh/grammar/ParsingEnvironment.java:128-139 \u2014 before extracting anything, compare \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/sleigh/grammar/BaseRecognizerOverride.java\u0060 and \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/sleigh/grammar/ParsingEnvironment.java\u0060 as WHOLE FILES: this scan already matched 4 separate duplicated blocks between them, totalling at least 45 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/sleigh/grammar/BaseRecognizerOverride.java:37\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. Note that the copies do not run to the end of the range shown: their LAST lines are different code, not the same code under different names \u2014 the matched region ends inside that line. Extract the lines above it, and read the last line of each site separately."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/sleigh/grammar/BaseRecognizerOverride.java"},"region":{"startLine":37}}}],"partialFingerprints":{"codehealthFindingId/v1":"cdcfdde8408bb25273a27d192043ae1c6470f702e8854a39751b1a1ed9ad5d1d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/sleigh/grammar/BaseRecognizerOverride.java:63-73 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/sleigh/grammar/ParsingEnvironment.java:168-178 \u2014 before extracting anything, compare \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/sleigh/grammar/BaseRecognizerOverride.java\u0060 and \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/sleigh/grammar/ParsingEnvironment.java\u0060 as WHOLE FILES: this scan already matched 4 separate duplicated blocks between them, totalling at least 45 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/sleigh/grammar/BaseRecognizerOverride.java:63\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. Note that the copies do not run to the end of the range shown: their LAST lines are different code, not the same code under different names \u2014 the matched region ends inside that line. Extract the lines above it, and read the last line of each site separately."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/sleigh/grammar/BaseRecognizerOverride.java"},"region":{"startLine":63}}}],"partialFingerprints":{"codehealthFindingId/v1":"b826a598b0c74946e366464c539456af7b26bf101957abd1dc83cf4b904ce28c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): Ghidra/Framework/Project/src/main/java/ghidra/framework/data/GhidraFileData.java:728-739 | Ghidra/Framework/Project/src/main/java/ghidra/framework/data/GhidraFileData.java:804-814 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/Project/src/main/java/ghidra/framework/data/GhidraFileData.java:728\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Project/src/main/java/ghidra/framework/data/GhidraFileData.java"},"region":{"startLine":728}}}],"partialFingerprints":{"codehealthFindingId/v1":"da435ae6ad1e6fcac703f139fafbb84224d5e435cf8b0e88d943a0785cc204e2"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): Ghidra/Framework/Project/src/main/java/ghidra/framework/main/datatable/DomainFileInfo.java:53-63 | Ghidra/Framework/Project/src/main/java/ghidra/framework/main/datatree/DomainFileNode.java:274-284 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/Project/src/main/java/ghidra/framework/main/datatable/DomainFileInfo.java:53\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. Note that the copies do not run to the end of the range shown: their LAST lines are different code, not the same code under different names \u2014 the matched region ends inside that line. Extract the lines above it, and read the last line of each site separately."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Project/src/main/java/ghidra/framework/main/datatable/DomainFileInfo.java"},"region":{"startLine":53}}}],"partialFingerprints":{"codehealthFindingId/v1":"176b4a51d64f03fb1edd0c96aba1cd4b52d093d90877c9a20e5c6f43caaf7264"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): Ghidra/Framework/Project/src/main/java/ghidra/framework/main/logviewer/ui/FVSlider.java:360-370 | Ghidra/Framework/Project/src/main/java/ghidra/framework/main/logviewer/ui/FVTable.java:661-671 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/Project/src/main/java/ghidra/framework/main/logviewer/ui/FVSlider.java:360\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Project/src/main/java/ghidra/framework/main/logviewer/ui/FVSlider.java"},"region":{"startLine":360}}}],"partialFingerprints":{"codehealthFindingId/v1":"30596c6dbfbc5499ef9c40bab199d5858c1da71e576ccaa7f5b4639c6691e195"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): Ghidra/Framework/Project/src/main/java/ghidra/framework/main/logviewer/ui/FVTable.java:312-322 | Ghidra/Framework/Project/src/main/java/ghidra/framework/main/logviewer/ui/FVTable.java:448-459 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/Project/src/main/java/ghidra/framework/main/logviewer/ui/FVTable.java:312\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. Note that the copies do not run to the end of the range shown: their LAST lines are different code, not the same code under different names \u2014 the matched region ends inside that line. Extract the lines above it, and read the last line of each site separately."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Project/src/main/java/ghidra/framework/main/logviewer/ui/FVTable.java"},"region":{"startLine":312}}}],"partialFingerprints":{"codehealthFindingId/v1":"71d1fe5756a8ae73506b04496d222fc42c5ebc3e9788087844e0e32f42dd17e1"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (11 lines \u00D7 2): Ghidra/Framework/Project/src/main/java/ghidra/framework/main/projectdata/actions/VersionControlAddAction.java:111-121 | Ghidra/Framework/Project/src/main/java/ghidra/framework/main/projectdata/actions/VersionControlCheckInAction.java:133-143 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/Project/src/main/java/ghidra/framework/main/projectdata/actions/VersionControlAddAction.java:111\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Project/src/main/java/ghidra/framework/main/projectdata/actions/VersionControlAddAction.java"},"region":{"startLine":111}}}],"partialFingerprints":{"codehealthFindingId/v1":"0619079d7c2ef436a1927dd717a73f6a397d45bdb152624a1c681bcc7ad653b9"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 4): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcode/utils/AddressUtils.java:23-32 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/address/AddressUtils.java:23-32 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/utils/Utils.java:221-230 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/utils/Utils.java:237-246 \u2014 there are 4 copies across 3 file(s) \u2014 more copies than files, so at least one file holds the block twice. Extract it once into a single shared function every call site can reach and call it from all 4 sites; resolving a subset leaves the remainder to drift apart. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcode/utils/AddressUtils.java:23\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcode/utils/AddressUtils.java"},"region":{"startLine":23}}}],"partialFingerprints":{"codehealthFindingId/v1":"c94fcca6925b419c898994ae0b2cea6635857e0440a6431dd0c289f112337e72"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 4): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/symbol/SymbolDatabaseAdapterV2.java:274-283 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/symbol/SymbolDatabaseAdapterV3.java:327-336 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/symbol/SymbolDatabaseAdapterV4.java:297-306 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/symbol/SymbolDatabaseAdapterV5.java:314-323 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/symbol/SymbolDatabaseAdapterV2.java:274\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/symbol/SymbolDatabaseAdapterV2.java"},"region":{"startLine":274}}}],"partialFingerprints":{"codehealthFindingId/v1":"a413ece485d2831197fc8efd83a1b647f91af92befd77400a957f702e3c9cb4d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 3): GhidraBuild/BuildFiles/Doclets/src/main/java/ghidra/doclets/typestubs/JavadocConverter.java:585-594 | GhidraBuild/BuildFiles/Doclets/src/main/java/ghidra/doclets/typestubs/PythonTypeStubMethod.java:215-224 | GhidraBuild/BuildFiles/Doclets/src/main/java/ghidra/doclets/typestubs/PythonTypeStubMethod.java:406-415 \u2014 there are 3 copies across 2 file(s) \u2014 more copies than files, so at least one file holds the block twice. Extract it once into a single shared function every call site can reach and call it from all 3 sites; resolving a subset leaves the remainder to drift apart. Read the line range as the matched WINDOW rather than a finished unit: at \u0060GhidraBuild/BuildFiles/Doclets/src/main/java/ghidra/doclets/typestubs/JavadocConverter.java:585\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"GhidraBuild/BuildFiles/Doclets/src/main/java/ghidra/doclets/typestubs/JavadocConverter.java"},"region":{"startLine":585}}}],"partialFingerprints":{"codehealthFindingId/v1":"cac1d03b66a385175c53d4eaa3bd8b5dd2fcd4bfe5c3f4eb83b7e9f1ce32664e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 3): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slgh_compile/ConsistencyChecker.java:211-220 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slgh_compile/ConsistencyChecker.java:231-242 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slgh_compile/ConsistencyChecker.java:290-299 \u2014 all 3 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slgh_compile/ConsistencyChecker.java"},"region":{"startLine":211}}}],"partialFingerprints":{"codehealthFindingId/v1":"5e11cb086664e4c2f88584e910cc184f04e11ead55a2483fa7f05c595b922a65"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 3): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/ArrayDBAdapterV1.java:64-73 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/PointerDBAdapterV2.java:49-58 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/TypedefDBAdapterV2.java:69-78 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/ArrayDBAdapterV1.java:64\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/ArrayDBAdapterV1.java"},"region":{"startLine":64}}}],"partialFingerprints":{"codehealthFindingId/v1":"959244742f564bf557d33a8c80861c0971fabaf58dcb12882979212ff6758043"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 3): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/function/FunctionAdapterV1.java:76-85 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/function/FunctionAdapterV2.java:59-68 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/function/FunctionAdapterV3.java:58-67 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/function/FunctionAdapterV1.java:76\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/function/FunctionAdapterV1.java"},"region":{"startLine":76}}}],"partialFingerprints":{"codehealthFindingId/v1":"1782a6a87286d20ded3df3a550ea7ea26788609abf3ae101b42bfb9d82d2e3ea"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 3): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/DataTypeArchiveContentHandler.java:71-80 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/DataTypeArchiveContentHandler.java:125-134 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/DataTypeArchiveContentHandler.java:180-189 \u2014 all 3 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/DataTypeArchiveContentHandler.java:71\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. Note that the copies do not run to the end of the range shown: their LAST lines are different code, not the same code under different names \u2014 the matched region ends inside that line. Extract the lines above it, and read the last line of each site separately."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/DataTypeArchiveContentHandler.java"},"region":{"startLine":71}}}],"partialFingerprints":{"codehealthFindingId/v1":"9efd30b9ddf0c5b2e982f9a06e724f83da0b1be03cce1ecc3cb2555ace9d7923"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 3): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/ProgramContentHandler.java:70-79 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/ProgramContentHandler.java:121-130 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/ProgramContentHandler.java:174-183 \u2014 all 3 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/ProgramContentHandler.java:70\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. Note that the copies do not run to the end of the range shown: their LAST lines are different code, not the same code under different names \u2014 the matched region ends inside that line. Extract the lines above it, and read the last line of each site separately."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/ProgramContentHandler.java"},"region":{"startLine":70}}}],"partialFingerprints":{"codehealthFindingId/v1":"5850498575285c41c771ffc0e4270b83e5019b1c22b371af362156fc11dc4d04"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): Ghidra/Processors/PowerPC/src/main/java/ghidra/app/plugin/core/analysis/PowerPCAddressAnalyzer.java:371-380 | Ghidra/Processors/MIPS/src/main/java/ghidra/app/plugin/core/analysis/MipsAddressAnalyzer.java:731-740 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Processors/PowerPC/src/main/java/ghidra/app/plugin/core/analysis/PowerPCAddressAnalyzer.java:371\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Processors/PowerPC/src/main/java/ghidra/app/plugin/core/analysis/PowerPCAddressAnalyzer.java"},"region":{"startLine":371}}}],"partialFingerprints":{"codehealthFindingId/v1":"edd5ca234343893e156d17497e820ce5b6e35df4499770579fdc4309024df220"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): Ghidra/Processors/JVM/src/main/java/ghidra/app/util/pcodeInject/PcodeOpEmitter.java:236-245 | Ghidra/Processors/JVM/src/main/java/ghidra/app/util/pcodeInject/PcodeOpEmitter.java:296-305 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Processors/JVM/src/main/java/ghidra/app/util/pcodeInject/PcodeOpEmitter.java:236\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Processors/JVM/src/main/java/ghidra/app/util/pcodeInject/PcodeOpEmitter.java"},"region":{"startLine":236}}}],"partialFingerprints":{"codehealthFindingId/v1":"e781c7d2478bd2d68f2ef1461ccbb88e30867c29090b229f0dc9c7de84034b73"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): Ghidra/Processors/Hexagon/src/main/java/ghidra/program/emulation/HexagonEmulateInstructionStateModifier.java:242-251 | Ghidra/Processors/Hexagon/src/main/java/ghidra/program/emulation/HexagonEmulateInstructionStateModifier.java:285-294 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Processors/Hexagon/src/main/java/ghidra/program/emulation/HexagonEmulateInstructionStateModifier.java"},"region":{"startLine":242}}}],"partialFingerprints":{"codehealthFindingId/v1":"336a7d334f8bef2b0ed68ccf4b2c115a77e835ff9fb1b688944aabddff80f58c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/assembler/sleigh/expr/LeftShiftExpressionSolver.java:50-59 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/assembler/sleigh/expr/RightShiftExpressionSolver.java:51-60 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/assembler/sleigh/expr/LeftShiftExpressionSolver.java:50\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/assembler/sleigh/expr/LeftShiftExpressionSolver.java"},"region":{"startLine":50}}}],"partialFingerprints":{"codehealthFindingId/v1":"78ccf163955fd016dfa582a7c72c0e0db9969b6487f29f6bf5a64c8c18762137"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/processors/sleigh/pattern/CombinePattern.java:55-65 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghpattern/CombinePattern.java:152-161 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/processors/sleigh/pattern/CombinePattern.java:55\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/processors/sleigh/pattern/CombinePattern.java"},"region":{"startLine":55}}}],"partialFingerprints":{"codehealthFindingId/v1":"792c808f00f7cacfe6812047744e71acb67fa9470afd5aa5e4a1af08c23d343d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/processors/sleigh/pattern/CombinePattern.java:77-86 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghpattern/CombinePattern.java:135-144 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/processors/sleigh/pattern/CombinePattern.java:77\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/processors/sleigh/pattern/CombinePattern.java"},"region":{"startLine":77}}}],"partialFingerprints":{"codehealthFindingId/v1":"1a69ca13a7d6a0e21fe8ada1f28202e027b37d5d100ec6499caf1fc75bf2a767"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/processors/sleigh/pattern/CombinePattern.java:109-118 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghpattern/CombinePattern.java:93-102 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/processors/sleigh/pattern/CombinePattern.java:109\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/processors/sleigh/pattern/CombinePattern.java"},"region":{"startLine":109}}}],"partialFingerprints":{"codehealthFindingId/v1":"44f1daadd942669fb01804674c3ca674bc4c03195fdef123bf8e9998b894e8c1"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/processors/sleigh/pattern/PatternBlock.java:233-242 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/processors/sleigh/pattern/PatternBlock.java:258-267 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/processors/sleigh/pattern/PatternBlock.java:233\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/processors/sleigh/pattern/PatternBlock.java"},"region":{"startLine":233}}}],"partialFingerprints":{"codehealthFindingId/v1":"9947393637d0b20f18107983a79b1fb59041ad0b0bc33ef4a56b91f6608368c9"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/processors/sleigh/Constructor.java:244-253 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/processors/sleigh/Constructor.java:272-281 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/processors/sleigh/Constructor.java:244\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/processors/sleigh/Constructor.java"},"region":{"startLine":244}}}],"partialFingerprints":{"codehealthFindingId/v1":"dda8c67594d2b4bd2f31c63f96b7849f36fa5afd7f943dc30148277ca202778b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/processors/sleigh/SleighInstructionPrototype.java:1007-1016 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/processors/sleigh/SleighInstructionPrototype.java:1047-1056 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/processors/sleigh/SleighInstructionPrototype.java"},"region":{"startLine":1007}}}],"partialFingerprints":{"codehealthFindingId/v1":"6cb348e2030542f92c77a54d9bf716d9c53883f5eaf4bee93afe5a718bcf6ef1"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/util/PseudoData.java:209-218 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/code/DataDB.java:301-310 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/util/PseudoData.java:209\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/util/PseudoData.java"},"region":{"startLine":209}}}],"partialFingerprints":{"codehealthFindingId/v1":"862328f185ffb35596c6ca5e8bb5cdd41ddc1109f7bf65441a5613aa83bf05ad"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/util/PseudoInstruction.java:492-501 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/code/InstructionDB.java:482-491 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/util/PseudoInstruction.java:492\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/util/PseudoInstruction.java"},"region":{"startLine":492}}}],"partialFingerprints":{"codehealthFindingId/v1":"1baf88847d250512c218c0a61840903a60eb60520b75adf67d1e6a7ff2956351"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcode/floatformat/FloatFormat.java:682-691 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcode/floatformat/FloatFormat.java:730-739 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcode/floatformat/FloatFormat.java:682\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. Note that the copies do not run to the end of the range shown: their LAST lines are different code, not the same code under different names \u2014 the matched region ends inside that line. Extract the lines above it, and read the last line of each site separately."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcode/floatformat/FloatFormat.java"},"region":{"startLine":682}}}],"partialFingerprints":{"codehealthFindingId/v1":"c4d269c51a497811038e43df412bd0480c5779b58d68cd692b8e0860aadeac78"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slgh_compile/SleighCompile.java:1271-1282 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slgh_compile/SleighCompile.java:1296-1305 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slgh_compile/SleighCompile.java:1271\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slgh_compile/SleighCompile.java"},"region":{"startLine":1271}}}],"partialFingerprints":{"codehealthFindingId/v1":"2e2cd240a966d711187709141318246000f6cb16ab52fcfa0034a9167e12f9a1"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghpattern/CombinePattern.java:138-147 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghpattern/InstructionPattern.java:161-170 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghpattern/CombinePattern.java:138\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghpattern/CombinePattern.java"},"region":{"startLine":138}}}],"partialFingerprints":{"codehealthFindingId/v1":"cc8bc72b9ffa2cc2851442f789ea633299b35b526db40d02b54dfa0ad7ecf51f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/EnumDB.java:427-436 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/EnumDataType.java:439-448 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/EnumDB.java:427\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/EnumDB.java"},"region":{"startLine":427}}}],"partialFingerprints":{"codehealthFindingId/v1":"be5e934fdae133b15a09f8683f246f76779a2d57331bd2b5966367ede59bf8b7"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/StructureDB.java:257-267 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/StructureDataType.java:662-671 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/StructureDB.java:257\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/StructureDB.java"},"region":{"startLine":257}}}],"partialFingerprints":{"codehealthFindingId/v1":"6a5175fc6487d04489e4c767b71d748a27ee48d496a600ae278d1d64a74971d0"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/StructureDB.java:466-475 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/StructureDataType.java:847-856 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/StructureDB.java:466\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/StructureDB.java"},"region":{"startLine":466}}}],"partialFingerprints":{"codehealthFindingId/v1":"8d8c75d05cf3745bc90a027c3cc370e96c03b1aee1bc30d91620ec2981a63efb"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/StructureDB.java:893-902 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/StructureDataType.java:1246-1255 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/StructureDB.java:893\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/StructureDB.java"},"region":{"startLine":893}}}],"partialFingerprints":{"codehealthFindingId/v1":"0bab83ac175e6d6721dd6382bde87ac63ef22d8f08ae3f4bd4ca55e87ab59aec"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/StructureDB.java:1084-1093 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/StructureDataType.java:158-167 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/StructureDB.java:1084\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/StructureDB.java"},"region":{"startLine":1084}}}],"partialFingerprints":{"codehealthFindingId/v1":"94f3546b5da3d838332d6f5f38029d6a5d7ee0acafefb7672b2baa01426b16f2"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/StructureDB.java:1174-1183 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/StructureDataType.java:242-251 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it. Note that the copies do not run to the end of the range shown: their LAST lines are different code, not the same code under different names \u2014 the matched region ends inside that line. Extract the lines above it, and read the last line of each site separately."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/StructureDB.java"},"region":{"startLine":1174}}}],"partialFingerprints":{"codehealthFindingId/v1":"28be7c5d8ad97217437c685f251b8639168689b637eae620bf43ed5f4ef83277"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/StructureDB.java:1776-1785 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/UnionDB.java:684-693 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/StructureDB.java:1776\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/StructureDB.java"},"region":{"startLine":1776}}}],"partialFingerprints":{"codehealthFindingId/v1":"f0f1bf3406d9619938049c0150accedff5966e94320d1e3232a374cb371cfa58"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/StructureDB.java:2160-2169 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/StructureDataType.java:1756-1765 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/StructureDB.java:2160\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/StructureDB.java"},"region":{"startLine":2160}}}],"partialFingerprints":{"codehealthFindingId/v1":"7060735f2f3963b97db261e93148b8fbfc2deaaf2ddcabd33edf97af4f715844"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/StructureDB.java:2295-2304 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/StructureDataType.java:1411-1420 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/StructureDB.java:2295\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. Note that the copies do not run to the end of the range shown: their LAST lines are different code, not the same code under different names \u2014 the matched region ends inside that line. Extract the lines above it, and read the last line of each site separately."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/StructureDB.java"},"region":{"startLine":2295}}}],"partialFingerprints":{"codehealthFindingId/v1":"571c30bc0feca6e77561e5fc5d0c355dd702e642ffd47683af25c0a9d9c5da21"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/function/FunctionVariables.java:219-228 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/function/FunctionVariables.java:283-292 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/function/FunctionVariables.java:219\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/function/FunctionVariables.java"},"region":{"startLine":219}}}],"partialFingerprints":{"codehealthFindingId/v1":"cdabec68a58a800a2945812b5bd1678238982cf98ee90b41f96ff5d4656f3c94"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/module/FragmentDB.java:165-174 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/module/ModuleDB.java:594-603 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/module/FragmentDB.java"},"region":{"startLine":165}}}],"partialFingerprints":{"codehealthFindingId/v1":"f15a6a7772a94e4bc99c7382363a40ce33d1b0464a039f12ae9e92481068e945"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/module/ModuleManager.java:355-364 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/symbol/NamespaceManager.java:306-315 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice. Note that the copies do not run to the end of the range shown: their LAST lines are different code, not the same code under different names \u2014 the matched region ends inside that line. Extract the lines above it, and read the last line of each site separately."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/module/ModuleManager.java"},"region":{"startLine":355}}}],"partialFingerprints":{"codehealthFindingId/v1":"4e62cc79b8320c035df7d5d1708768d2bb9370556cb0cff8adfaf7e4a24d4baf"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/properties/ObjectPropertyMapDB.java:277-287 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/properties/PropertyMapDB.java:166-175 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/properties/ObjectPropertyMapDB.java:277\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/properties/ObjectPropertyMapDB.java"},"region":{"startLine":277}}}],"partialFingerprints":{"codehealthFindingId/v1":"9161d3e0585f91c93110aa5324b9d994201c4e885c15afd8743f26a1dbbfe054"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/references/BigRefListV0.java:149-158 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/references/BigRefListV0.java:171-181 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/references/BigRefListV0.java:149\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/references/BigRefListV0.java"},"region":{"startLine":149}}}],"partialFingerprints":{"codehealthFindingId/v1":"ebaa854c15f843d01f09bfcc31866e2aca7cfa7b63358fb1191de550779e7c37"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/symbol/SymbolDatabaseAdapterV1.java:157-166 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/symbol/SymbolDatabaseAdapterV2.java:337-346 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/symbol/SymbolDatabaseAdapterV1.java:157\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/symbol/SymbolDatabaseAdapterV1.java"},"region":{"startLine":157}}}],"partialFingerprints":{"codehealthFindingId/v1":"4bd1a243fb2797c74fc8842d641d03236dc4fbe814b671ef7daa4d8514aac505"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/DataTypeArchiveDB.java:553-562 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/ProgramDB.java:2398-2407 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/DataTypeArchiveDB.java:553\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/DataTypeArchiveDB.java"},"region":{"startLine":553}}}],"partialFingerprints":{"codehealthFindingId/v1":"6f0c50277bda0538d6fcc91c8a6d1870e7caec71c345ac9fec24420fcd8917e0"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/OverlaySpaceDBAdapterV1.java:112-121 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/OverlaySpaceDBAdapterV1.java:131-140 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/OverlaySpaceDBAdapterV1.java:112\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/OverlaySpaceDBAdapterV1.java"},"region":{"startLine":112}}}],"partialFingerprints":{"codehealthFindingId/v1":"79932d7e25ebe8d94e2056b6a34cb62da6b364aaf6a24f6637921abb049bfd3b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/ProgramDBChangeSet.java:690-699 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/util/charset/CharsetInfo.java:54-63 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice. Note what the matched lines are: every one of them assigns one field to another, so the block is a hand-written mapper between two data shapes rather than behaviour with a helper inside it. Extracting one shared function only works if both sites map the SAME pair of types in the same direction \u2014 check that first, because inverse or differently-typed mappers have no single function they can both call. Where they do not, the moves that exist are a generated or reflective mapper, a common embedded/base type the fields live on once, or accepting the run and covering it with a test that fails when a field is added to one side only."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/ProgramDBChangeSet.java"},"region":{"startLine":690}}}],"partialFingerprints":{"codehealthFindingId/v1":"c1ccce46935741974ef6f6a75c0e2c9241db6b1c179d1c3488e42bdb328e0f25"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/address/AddressSet.java:994-1003 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/address/AddressSet.java:1082-1091 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/address/AddressSet.java:994\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/address/AddressSet.java"},"region":{"startLine":994}}}],"partialFingerprints":{"codehealthFindingId/v1":"7196a8f59b6ca96a2894df465bdfd5a41d3ac33e07dccf862a2705221c592b3f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/address/SegmentedAddressSpace.java:180-189 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/address/SegmentedAddressSpace.java:211-220 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/address/SegmentedAddressSpace.java:180\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/address/SegmentedAddressSpace.java"},"region":{"startLine":180}}}],"partialFingerprints":{"codehealthFindingId/v1":"a9a444a8279463007af6cd2131e5ab60c00d4be66ada663b128fc987af1425c2"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/AbstractPointerTypedefBuiltIn.java:119-128 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/PointerTypedef.java:174-183 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/AbstractPointerTypedefBuiltIn.java:119\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/AbstractPointerTypedefBuiltIn.java"},"region":{"startLine":119}}}],"partialFingerprints":{"codehealthFindingId/v1":"d6b35dbcc2671ce46e6403cb6b34f0367ab46cb4d968997e549343bce1c2e730"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/BitmapResource.java:551-560 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/BitmapResource.java:624-633 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/BitmapResource.java:551\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/BitmapResource.java"},"region":{"startLine":551}}}],"partialFingerprints":{"codehealthFindingId/v1":"6487ed37212854d2861f014327e6ddbdebfdfce0a39daba6b0a761133da0e14a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/DialogResourceDataType.java:142-151 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/DialogResourceDataType.java:165-174 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/DialogResourceDataType.java:142\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/DialogResourceDataType.java"},"region":{"startLine":142}}}],"partialFingerprints":{"codehealthFindingId/v1":"522dc3768b38e642ba6d9610ff52c2f17f8dcb6b5f04716219f57920690a823d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/StructureDataType.java:1374-1383 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/UnionDataType.java:563-572 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/StructureDataType.java:1374\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/StructureDataType.java"},"region":{"startLine":1374}}}],"partialFingerprints":{"codehealthFindingId/v1":"43200b86083012c2bfc55592e13ec3fc81db6290d324bbf64c75eb1f95c074da"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/lang/protorules/ExtraStack.java:53-63 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/lang/protorules/GotoStack.java:38-47 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/lang/protorules/ExtraStack.java:53\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/lang/protorules/ExtraStack.java"},"region":{"startLine":53}}}],"partialFingerprints":{"codehealthFindingId/v1":"c0f9b000086737a0de93188f45d7fbc2b8c725f0a91d09172bc4bf38307ac0fd"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/lang/protorules/MultiSlotAssign.java:228-237 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/lang/protorules/MultiSlotDualAssign.java:286-295 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/lang/protorules/MultiSlotAssign.java"},"region":{"startLine":228}}}],"partialFingerprints":{"codehealthFindingId/v1":"62eecc304bfbb14d44c2a7b36a3cfbe56cb680eac26e3fef5c6b6290304436e6"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/lang/protorules/MultiSlotAssign.java:279-288 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/lang/protorules/MultiSlotDualAssign.java:333-342 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/lang/protorules/MultiSlotAssign.java:279\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. Note that the copies do not run to the end of the range shown: their LAST lines are different code, not the same code under different names \u2014 the matched region ends inside that line. Extract the lines above it, and read the last line of each site separately."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/lang/protorules/MultiSlotAssign.java"},"region":{"startLine":279}}}],"partialFingerprints":{"codehealthFindingId/v1":"dfefd141b6b50b04c751bf2b00878c837500aa33f95df659961056fd86185601"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/lang/RegisterValue.java:379-388 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/lang/RegisterValue.java:540-549 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/lang/RegisterValue.java:379\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/lang/RegisterValue.java"},"region":{"startLine":379}}}],"partialFingerprints":{"codehealthFindingId/v1":"93ee1081ec61205f48a1ca93c71159a0b45104fb4f88833565ce1220f393d9f2"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/pcode/AddressXML.java:193-202 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/pcode/AddressXML.java:243-252 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/pcode/AddressXML.java:193\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/pcode/AddressXML.java"},"region":{"startLine":193}}}],"partialFingerprints":{"codehealthFindingId/v1":"6904ad11782043402a1f3126b41bfd875b437fabc9e2d2e629801035fc1e8306"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/pcode/DynamicHash.java:288-297 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/pcode/DynamicHash.java:332-342 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/pcode/DynamicHash.java:288\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/pcode/DynamicHash.java"},"region":{"startLine":288}}}],"partialFingerprints":{"codehealthFindingId/v1":"e64eb8a0550bfe767be22692fe246a4599afa35b27d40db947830acb7a719c13"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/pcode/HighFunctionDBUtil.java:391-400 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/pcode/HighFunctionDBUtil.java:443-452 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/pcode/HighFunctionDBUtil.java:391\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/pcode/HighFunctionDBUtil.java"},"region":{"startLine":391}}}],"partialFingerprints":{"codehealthFindingId/v1":"8f326198a73b9bf34a7176aa80015f036a73c03bfea56f4228c74842e622a3fa"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/pcode/HighFunctionShellSymbol.java:43-52 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/pcode/HighLabelSymbol.java:39-48 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/pcode/HighFunctionShellSymbol.java:43\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/pcode/HighFunctionShellSymbol.java"},"region":{"startLine":43}}}],"partialFingerprints":{"codehealthFindingId/v1":"6e9cb6add1405d8263c84c0b786a957277d027c10d3c8ffc156122ed5346f103"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/pcode/HighGlobal.java:53-62 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/pcode/HighOther.java:69-78 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/pcode/HighGlobal.java:53\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/pcode/HighGlobal.java"},"region":{"startLine":53}}}],"partialFingerprints":{"codehealthFindingId/v1":"75cc7f0e8b56311bd614ea1d4398e2988010120ca7eff3899c4194f765ad8ec2"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/util/SimpleDiffUtility.java:677-686 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/util/SimpleDiffUtility.java:779-788 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/util/SimpleDiffUtility.java:677\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/util/SimpleDiffUtility.java"},"region":{"startLine":677}}}],"partialFingerprints":{"codehealthFindingId/v1":"33e2ceecbd4695c2cfa1bc75fc15127746ab8c950f35c7e6307b5c5431a343d4"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/sleigh/grammar/BaseRecognizerOverride.java:75-84 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/sleigh/grammar/ParsingEnvironment.java:194-205 \u2014 before extracting anything, compare \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/sleigh/grammar/BaseRecognizerOverride.java\u0060 and \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/sleigh/grammar/ParsingEnvironment.java\u0060 as WHOLE FILES: this scan already matched 4 separate duplicated blocks between them, totalling at least 45 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/sleigh/grammar/BaseRecognizerOverride.java:75\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. Note that the copies do not run to the end of the range shown: their LAST lines are different code, not the same code under different names \u2014 the matched region ends inside that line. Extract the lines above it, and read the last line of each site separately."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/sleigh/grammar/BaseRecognizerOverride.java"},"region":{"startLine":75}}}],"partialFingerprints":{"codehealthFindingId/v1":"0eae5729b855efabc4c8aeccd500a075866be1bcfd280daefd4aa837efe90e4d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): Ghidra/Framework/Project/src/main/java/ghidra/framework/main/datatree/PasteFileTask.java:184-193 | Ghidra/Framework/Project/src/main/java/ghidra/framework/main/datatree/PasteFileTask.java:209-218 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/Project/src/main/java/ghidra/framework/main/datatree/PasteFileTask.java:184\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Project/src/main/java/ghidra/framework/main/datatree/PasteFileTask.java"},"region":{"startLine":184}}}],"partialFingerprints":{"codehealthFindingId/v1":"f058fd4d735cf4649f915b7b7be91841f77bf5db85188d978d8d0a7037ee3330"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 5): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghpatexpress/GreaterEqualEquation.java:48-56 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghpatexpress/GreaterEquation.java:48-56 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghpatexpress/LessEqualEquation.java:48-56 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghpatexpress/LessEquation.java:48-56 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghpatexpress/NotEqualEquation.java:50-58 \u2014 before extracting anything, compare \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghpatexpress/GreaterEqualEquation.java\u0060 and \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghpatexpress/GreaterEquation.java\u0060 as WHOLE FILES: this scan already matched 4 separate duplicated blocks between them, totalling at least 35 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghpatexpress/GreaterEqualEquation.java:48\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghpatexpress/GreaterEqualEquation.java"},"region":{"startLine":48}}}],"partialFingerprints":{"codehealthFindingId/v1":"d149cd1faa42eab9aead3d7773836e1b8cebe395a31fe47ca1976d934ba269cc"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 3): Ghidra/Processors/AARCH64/src/main/java/ghidra/program/emulation/AARCH64EmulateInstructionStateModifier.java:699-708 | Ghidra/Processors/AARCH64/src/main/java/ghidra/program/emulation/AARCH64EmulateInstructionStateModifier.java:735-743 | Ghidra/Processors/AARCH64/src/main/java/ghidra/program/emulation/AARCH64EmulateInstructionStateModifier.java:804-812 \u2014 all 3 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Processors/AARCH64/src/main/java/ghidra/program/emulation/AARCH64EmulateInstructionStateModifier.java"},"region":{"startLine":699}}}],"partialFingerprints":{"codehealthFindingId/v1":"93f62d126b19bb31d5cced3030a4090af0578adf2a1d4d81650eea144f2e7346"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 3): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slgh_compile/ConsistencyChecker.java:172-180 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slgh_compile/ConsistencyChecker.java:202-210 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slgh_compile/ConsistencyChecker.java:222-230 \u2014 all 3 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slgh_compile/ConsistencyChecker.java"},"region":{"startLine":172}}}],"partialFingerprints":{"codehealthFindingId/v1":"d72e05fd851a0a1bc892448604a7fdcebcdaf28fafcb2a2404def78228b4785d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 3): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/code/CodeManager.java:1690-1698 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/code/CodeManager.java:1722-1730 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/code/CodeManager.java:1752-1760 \u2014 all 3 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/code/CodeManager.java:1690\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/code/CodeManager.java"},"region":{"startLine":1690}}}],"partialFingerprints":{"codehealthFindingId/v1":"b19541cb4c7f33b5f9cb9f35b52deb492dd7f4e45bb925f656e6f0daf9237ca2"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 3): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/references/RefListV0.java:378-386 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/references/RefListV0.java:420-428 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/references/RefListV0.java:477-485 \u2014 all 3 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/references/RefListV0.java"},"region":{"startLine":378}}}],"partialFingerprints":{"codehealthFindingId/v1":"ae19e5e91ae1c6e95960ec134ebf78324de3333af8868fb7b3c26cb867cfb0ba"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): GhidraBuild/EclipsePlugins/GhidraDev/GhidraDevPlugin/src/main/java/ghidradev/ghidrascripteditor/preferences/GhidraScriptEditorPreferencePage.java:101-109 | GhidraBuild/EclipsePlugins/GhidraDev/GhidraDevPlugin/src/main/java/ghidradev/ghidrasymbollookup/preferences/GhidraSymbolLookupPreferencePage.java:116-124 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice. Read the line range as the matched WINDOW rather than a finished unit: at \u0060GhidraBuild/EclipsePlugins/GhidraDev/GhidraDevPlugin/src/main/java/ghidradev/ghidrascripteditor/preferences/GhidraScriptEditorPreferencePage.java:101\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"GhidraBuild/EclipsePlugins/GhidraDev/GhidraDevPlugin/src/main/java/ghidradev/ghidrascripteditor/preferences/GhidraScriptEditorPreferencePage.java"},"region":{"startLine":101}}}],"partialFingerprints":{"codehealthFindingId/v1":"a9a0f9acc4565c093d56b87b4bbfefb8f7519f1e116c7d899687c50c5a0dc275"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): GhidraBuild/EclipsePlugins/GhidraDev/GhidraDevPlugin/src/main/java/ghidradev/ghidrascripteditor/preferences/GhidraScriptEditorPreferencePage.java:119-127 | GhidraBuild/EclipsePlugins/GhidraDev/GhidraDevPlugin/src/main/java/ghidradev/ghidrasymbollookup/preferences/GhidraSymbolLookupPreferencePage.java:134-142 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice. Read the line range as the matched WINDOW rather than a finished unit: at \u0060GhidraBuild/EclipsePlugins/GhidraDev/GhidraDevPlugin/src/main/java/ghidradev/ghidrascripteditor/preferences/GhidraScriptEditorPreferencePage.java:119\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"GhidraBuild/EclipsePlugins/GhidraDev/GhidraDevPlugin/src/main/java/ghidradev/ghidrascripteditor/preferences/GhidraScriptEditorPreferencePage.java"},"region":{"startLine":119}}}],"partialFingerprints":{"codehealthFindingId/v1":"1f969e4689510b48e83faddc9324b78da221a2459c0bd4ae6c1d2619a35f0f98"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): GhidraBuild/BuildFiles/Doclets/src/main/java/ghidra/doclets/json/JsonDoclet.java:114-122 | GhidraBuild/BuildFiles/Doclets/src/main/java/ghidra/doclets/typestubs/PythonTypeStubDoclet.java:176-184 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice. Read the line range as the matched WINDOW rather than a finished unit: at \u0060GhidraBuild/BuildFiles/Doclets/src/main/java/ghidra/doclets/json/JsonDoclet.java:114\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"GhidraBuild/BuildFiles/Doclets/src/main/java/ghidra/doclets/json/JsonDoclet.java"},"region":{"startLine":114}}}],"partialFingerprints":{"codehealthFindingId/v1":"1e414781d80a62d7a208f34b759e2d72760d922f199c71d66c64661965d12929"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): GhidraBuild/BuildFiles/Doclets/src/main/java/ghidra/doclets/typestubs/GhidraBuiltinsBuilder.java:194-202 | GhidraBuild/BuildFiles/Doclets/src/main/java/ghidra/doclets/typestubs/PythonTypeStubPackage.java:151-159 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"GhidraBuild/BuildFiles/Doclets/src/main/java/ghidra/doclets/typestubs/GhidraBuiltinsBuilder.java"},"region":{"startLine":194}}}],"partialFingerprints":{"codehealthFindingId/v1":"c0414d34ec3e6eedc21976b25c963f34e48df1d8a8db679b402638fc0ed96e09"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): GhidraBuild/BuildFiles/Doclets/src/main/java/ghidra/doclets/typestubs/PythonTypeStubType.java:684-692 | GhidraBuild/BuildFiles/Doclets/src/main/java/ghidra/doclets/typestubs/PythonTypeStubType.java:701-709 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"GhidraBuild/BuildFiles/Doclets/src/main/java/ghidra/doclets/typestubs/PythonTypeStubType.java"},"region":{"startLine":684}}}],"partialFingerprints":{"codehealthFindingId/v1":"87bb8c4629ed3f54f009d79dd2589d6495724f4a5d32766c9a6f7e0be594b20b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): Ghidra/Processors/PowerPC/src/main/java/ghidra/app/plugin/core/analysis/PowerPCAddressAnalyzer.java:259-267 | Ghidra/Processors/68000/src/main/java/ghidra/app/plugin/core/analysis/Motorola68KAnalyzer.java:130-138 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Processors/PowerPC/src/main/java/ghidra/app/plugin/core/analysis/PowerPCAddressAnalyzer.java:259\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Processors/PowerPC/src/main/java/ghidra/app/plugin/core/analysis/PowerPCAddressAnalyzer.java"},"region":{"startLine":259}}}],"partialFingerprints":{"codehealthFindingId/v1":"c5fc7953b1615ad4a350249c264bfb89f39e37c1fa9b47189cb6771a54cf90f5"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): Ghidra/Processors/PIC/src/main/java/ghidra/app/plugin/core/analysis/Pic12Analyzer.java:387-396 | Ghidra/Processors/PIC/src/main/java/ghidra/app/plugin/core/analysis/Pic17c7xxAnalyzer.java:610-618 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Processors/PIC/src/main/java/ghidra/app/plugin/core/analysis/Pic12Analyzer.java:387\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Processors/PIC/src/main/java/ghidra/app/plugin/core/analysis/Pic12Analyzer.java"},"region":{"startLine":387}}}],"partialFingerprints":{"codehealthFindingId/v1":"552ae0eb59fcf25a791e94a1769708f922c0322e092d966103c95feb8f15aa43"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): Ghidra/Processors/PIC/src/main/java/ghidra/app/plugin/core/analysis/Pic17c7xxAnalyzer.java:896-904 | Ghidra/Processors/PIC/src/main/java/ghidra/app/plugin/core/analysis/Pic17c7xxAnalyzer.java:909-917 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Processors/PIC/src/main/java/ghidra/app/plugin/core/analysis/Pic17c7xxAnalyzer.java:896\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. Note that the copies do not run to the end of the range shown: their LAST lines are different code, not the same code under different names \u2014 the matched region ends inside that line. Extract the lines above it, and read the last line of each site separately."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Processors/PIC/src/main/java/ghidra/app/plugin/core/analysis/Pic17c7xxAnalyzer.java"},"region":{"startLine":896}}}],"partialFingerprints":{"codehealthFindingId/v1":"015f2b522b7abe7d088882576bb781910981355263e41610a689297a8044c54b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): Ghidra/Processors/Hexagon/src/main/java/ghidra/app/plugin/core/analysis/HexagonPrologEpilogAnalyzer.java:157-165 | Ghidra/Processors/Hexagon/src/main/java/ghidra/app/plugin/core/analysis/HexagonPrologEpilogAnalyzer.java:193-201 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Processors/Hexagon/src/main/java/ghidra/app/plugin/core/analysis/HexagonPrologEpilogAnalyzer.java:157\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. Note that the copies do not run to the end of the range shown: their LAST lines are different code, not the same code under different names \u2014 the matched region ends inside that line. Extract the lines above it, and read the last line of each site separately."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Processors/Hexagon/src/main/java/ghidra/app/plugin/core/analysis/HexagonPrologEpilogAnalyzer.java"},"region":{"startLine":157}}}],"partialFingerprints":{"codehealthFindingId/v1":"ff81ec650afe58b08b8d4b7a83e03a2f141c96e801d4463d142a45a0549f35ab"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): Ghidra/Processors/Hexagon/src/main/java/ghidra/program/emulation/HexagonEmulateInstructionStateModifier.java:428-436 | Ghidra/Processors/Hexagon/src/main/java/ghidra/program/emulation/HexagonEmulateInstructionStateModifier.java:610-618 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Processors/Hexagon/src/main/java/ghidra/program/emulation/HexagonEmulateInstructionStateModifier.java"},"region":{"startLine":428}}}],"partialFingerprints":{"codehealthFindingId/v1":"c5b535d68f376f89e4ca51713211385dd9960450dd67428b3830139cb7062b2f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): Ghidra/Processors/AARCH64/src/main/java/ghidra/program/emulation/AARCH64EmulateInstructionStateModifier.java:587-595 | Ghidra/Processors/AARCH64/src/main/java/ghidra/program/emulation/AARCH64EmulateInstructionStateModifier.java:631-639 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Processors/AARCH64/src/main/java/ghidra/program/emulation/AARCH64EmulateInstructionStateModifier.java:587\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Processors/AARCH64/src/main/java/ghidra/program/emulation/AARCH64EmulateInstructionStateModifier.java"},"region":{"startLine":587}}}],"partialFingerprints":{"codehealthFindingId/v1":"7e41cde0952710bc8fe2853395a8fcfbc1a6d8241612466877ab27daadd5f5de"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): Ghidra/Framework/Utility/src/main/java/utilities/util/FileUtilities.java:537-545 | Ghidra/Framework/Utility/src/main/java/utilities/util/FileUtilities.java:574-582 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/Utility/src/main/java/utilities/util/FileUtilities.java:537\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. Note that the copies do not run to the end of the range shown: their LAST lines are different code, not the same code under different names \u2014 the matched region ends inside that line. Extract the lines above it, and read the last line of each site separately."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Utility/src/main/java/utilities/util/FileUtilities.java"},"region":{"startLine":537}}}],"partialFingerprints":{"codehealthFindingId/v1":"873f9fbcdd3c5036b293400d2e49fd67cfd0762463f618c310825e0d87728e40"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/assembler/sleigh/expr/OrExpressionSolver.java:131-139 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/assembler/sleigh/expr/OrExpressionSolver.java:145-153 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/assembler/sleigh/expr/OrExpressionSolver.java:131\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. Note that the copies do not run to the end of the range shown: their LAST lines are different code, not the same code under different names \u2014 the matched region ends inside that line. Extract the lines above it, and read the last line of each site separately."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/assembler/sleigh/expr/OrExpressionSolver.java"},"region":{"startLine":131}}}],"partialFingerprints":{"codehealthFindingId/v1":"ef3f3eee584557dcaabdba9a3ac464f362904ba621ca63951a929ef310bcc2d5"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/assembler/sleigh/expr/OrExpressionSolver.java:335-343 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/assembler/sleigh/expr/OrExpressionSolver.java:351-359 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/assembler/sleigh/expr/OrExpressionSolver.java:335\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/assembler/sleigh/expr/OrExpressionSolver.java"},"region":{"startLine":335}}}],"partialFingerprints":{"codehealthFindingId/v1":"e378c32601b42b8bab7c758c62fdd30a487a619ef51bb2925d62aca8cd323a34"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/assembler/sleigh/parse/AssemblyParser.java:386-394 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/assembler/sleigh/parse/AssemblyParser.java:456-464 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/assembler/sleigh/parse/AssemblyParser.java"},"region":{"startLine":386}}}],"partialFingerprints":{"codehealthFindingId/v1":"4319403aff76d1e983012c1c5a4306b7e6ed523973ef4c94fe737f6829c0b4f3"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/assembler/sleigh/sem/AssemblyPatternBlock.java:210-218 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/assembler/sleigh/sem/AssemblyPatternBlock.java:244-252 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/assembler/sleigh/sem/AssemblyPatternBlock.java"},"region":{"startLine":210}}}],"partialFingerprints":{"codehealthFindingId/v1":"5f66f1ce6c9486dbf48f056396da59f987c26dda03ecf7b8c213af084deb568a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/processors/sleigh/SleighInstructionPrototype.java:602-610 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/processors/sleigh/SleighInstructionPrototype.java:660-668 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/processors/sleigh/SleighInstructionPrototype.java:602\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/processors/sleigh/SleighInstructionPrototype.java"},"region":{"startLine":602}}}],"partialFingerprints":{"codehealthFindingId/v1":"132faf596222d99696fa24870505b79505dcfd4a20ab00e06aaa446422edf266"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/util/sourcelanguage/DataArchiveUtils.java:64-72 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/util/sourcelanguage/SpecExtensionUtils.java:89-97 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/util/sourcelanguage/DataArchiveUtils.java:64\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/util/sourcelanguage/DataArchiveUtils.java"},"region":{"startLine":64}}}],"partialFingerprints":{"codehealthFindingId/v1":"5b99a2f4a53b5f84936e64b06b0241d1356e0b5967df8cfa138b547884f2af15"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/util/PseudoData.java:388-396 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/code/DataDB.java:581-589 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/util/PseudoData.java:388\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/util/PseudoData.java"},"region":{"startLine":388}}}],"partialFingerprints":{"codehealthFindingId/v1":"49a5fa801594642da17aaa0e2ccb2e5201f5da9ab9da81787ea15ad04c50b7bf"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/address/RangeList.java:62-70 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/address/RangeList.java:98-106 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/address/RangeList.java:62\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/address/RangeList.java"},"region":{"startLine":62}}}],"partialFingerprints":{"codehealthFindingId/v1":"c8e881535d396b3e988e19b92bf635ac39a0ea0b571a29ec8e4eae2149f9f8e5"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slgh_compile/ConsistencyChecker.java:186-194 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slgh_compile/ConsistencyChecker.java:251-259 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slgh_compile/ConsistencyChecker.java:186\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. Note that the copies do not run to the end of the range shown: their LAST lines are different code, not the same code under different names \u2014 the matched region ends inside that line. Extract the lines above it, and read the last line of each site separately."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slgh_compile/ConsistencyChecker.java"},"region":{"startLine":186}}}],"partialFingerprints":{"codehealthFindingId/v1":"9a94b3268f24464188498499bc609c1d68ec4e61ee934cc40d026f96c2cf4aeb"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghpatexpress/TokenPattern.java:135-143 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghpatexpress/TokenPattern.java:155-163 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghpatexpress/TokenPattern.java:135\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. Note that the copies do not run to the end of the range shown: their LAST lines are different code, not the same code under different names \u2014 the matched region ends inside that line. Extract the lines above it, and read the last line of each site separately."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghpatexpress/TokenPattern.java"},"region":{"startLine":135}}}],"partialFingerprints":{"codehealthFindingId/v1":"662ad5ae69f0706d9fab9bf3dd3dc22863996a99ad1f56ebb27af539353d62de"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/code/PrototypeManager.java:369-377 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/code/PrototypeManager.java:475-483 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/code/PrototypeManager.java:369\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it. Note that the copies do not run to the end of the range shown: their LAST lines are different code, not the same code under different names \u2014 the matched region ends inside that line. Extract the lines above it, and read the last line of each site separately."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/code/PrototypeManager.java"},"region":{"startLine":369}}}],"partialFingerprints":{"codehealthFindingId/v1":"6ca33cbb97ba6df37802768b12c5227d0681e407172b1700d931c04d40c22092"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/StructureDB.java:215-224 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/StructureDataType.java:632-640 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/StructureDB.java:215\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/StructureDB.java"},"region":{"startLine":215}}}],"partialFingerprints":{"codehealthFindingId/v1":"529e11b0d31c5340dac657154fe299608206d5ed8a782165cf9f38ae9cc3b021"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/StructureDB.java:974-982 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/StructureDataType.java:971-979 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/StructureDB.java:974\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/StructureDB.java"},"region":{"startLine":974}}}],"partialFingerprints":{"codehealthFindingId/v1":"f16a5797b8e787b1c63efe12cde9d9b6646fba171ed89f4e038ef3197ddea7a7"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/StructureDB.java:1623-1631 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/UnionDB.java:314-322 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/StructureDB.java"},"region":{"startLine":1623}}}],"partialFingerprints":{"codehealthFindingId/v1":"9f3813ae2781183b4abaa1a3de27536f07d728c942d1d8b6a491540af07ccf20"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/StructureDB.java:1699-1707 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/StructureDataType.java:1328-1336 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/StructureDB.java:1699\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/StructureDB.java"},"region":{"startLine":1699}}}],"partialFingerprints":{"codehealthFindingId/v1":"9b7e2fff5fbd618d15ae9814536d21d27e285faad0019cf749d50b3e748fdc6a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/StructureDB.java:2418-2426 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/StructureDataType.java:1922-1930 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/StructureDB.java:2418\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. Note that the copies do not run to the end of the range shown: their LAST lines are different code, not the same code under different names \u2014 the matched region ends inside that line. Extract the lines above it, and read the last line of each site separately."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/StructureDB.java"},"region":{"startLine":2418}}}],"partialFingerprints":{"codehealthFindingId/v1":"9fa5280cd9896a98af786a232e393259a9e02467b570da36058dcf0ea9d3b687"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/UnionDB.java:620-628 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/UnionDataType.java:410-418 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/UnionDB.java:620\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/UnionDB.java"},"region":{"startLine":620}}}],"partialFingerprints":{"codehealthFindingId/v1":"4a2b64f7340b6e0f7359315cd579c2f9c5ddd8fe38e12b7db62fa91c54305358"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/external/OldExtRefAdapter.java:82-90 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/references/OldStackRefDBAdpater.java:81-89 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/external/OldExtRefAdapter.java:82\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/external/OldExtRefAdapter.java"},"region":{"startLine":82}}}],"partialFingerprints":{"codehealthFindingId/v1":"a521a36bf0faea6f6e1a4b9c41c2d64d6134d14b0af1289d09935d10bcbf4b1d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/map/AddressMapDB.java:904-912 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/address/AddressMapImpl.java:248-256 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/map/AddressMapDB.java:904\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/map/AddressMapDB.java"},"region":{"startLine":904}}}],"partialFingerprints":{"codehealthFindingId/v1":"5f68dd34fe76c6a1e04cd01a3388b394df69fb7898af80f80e8ee8d8de26a082"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/mem/MemoryMapDB.java:1057-1065 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/mem/MemoryMapDB.java:1107-1115 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/mem/MemoryMapDB.java:1057\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/mem/MemoryMapDB.java"},"region":{"startLine":1057}}}],"partialFingerprints":{"codehealthFindingId/v1":"4764477e372f30fc434100e4f74112bffaa091e0a80ae30144a77ed93953fc2d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/mem/MemoryMapDBAdapterV0.java:135-143 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/mem/MemoryMapDBAdapterV2.java:102-110 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/mem/MemoryMapDBAdapterV0.java"},"region":{"startLine":135}}}],"partialFingerprints":{"codehealthFindingId/v1":"e655bac209a48250958bc73c09bc4de24c440d453098ef9e80fb7ed37888b198"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/mem/MemoryMapDBAdapterV0.java:165-173 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/mem/MemoryMapDBAdapterV2.java:133-141 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/mem/MemoryMapDBAdapterV0.java:165\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/mem/MemoryMapDBAdapterV0.java"},"region":{"startLine":165}}}],"partialFingerprints":{"codehealthFindingId/v1":"108811f42bedda100f9897c287839fa4069c03edecac86f09941a5a6baa780be"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/oldfunction/OldStackFrameDB.java:449-457 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/oldfunction/OldStackFrameDB.java:502-510 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/oldfunction/OldStackFrameDB.java:449\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/oldfunction/OldStackFrameDB.java"},"region":{"startLine":449}}}],"partialFingerprints":{"codehealthFindingId/v1":"0ce4959bedfe94d0cd4b83a7b5efcce008e083b7a492e5895dedbc90cfaebb6a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/oldfunction/OldStackFrameDB.java:470-478 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/oldfunction/OldStackFrameDB.java:497-505 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/oldfunction/OldStackFrameDB.java:470\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/oldfunction/OldStackFrameDB.java"},"region":{"startLine":470}}}],"partialFingerprints":{"codehealthFindingId/v1":"e1c2ff726ba9227d290f3f9303bc9da2f7e8fa8f66f9c7b6bf6219b09c5327a7"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/references/BigRefListV0.java:471-479 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/references/RefListV0.java:634-642 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/references/BigRefListV0.java:471\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/references/BigRefListV0.java"},"region":{"startLine":471}}}],"partialFingerprints":{"codehealthFindingId/v1":"341e5e8548a470b22af235ddb1f72a66207323febf2b8a5055a8bb0f3df763c7"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/references/FromAdapterSharedTable.java:62-70 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/references/ToAdapterSharedTable.java:62-70 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/references/FromAdapterSharedTable.java:62\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/references/FromAdapterSharedTable.java"},"region":{"startLine":62}}}],"partialFingerprints":{"codehealthFindingId/v1":"05b439a74b7dc00a193b59cbf0b32b045fc76b84fe26b5412ec99930ec908634"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/references/FromAdapterSharedTable.java:92-100 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/references/ToAdapterSharedTable.java:91-99 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/references/FromAdapterSharedTable.java:92\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/references/FromAdapterSharedTable.java"},"region":{"startLine":92}}}],"partialFingerprints":{"codehealthFindingId/v1":"2591f73edccd7859950ba5ee2d26bf6ef915a2e16bf41c457579a7ef16baa786"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/util/SharedRangeMapDB.java:127-136 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/util/SharedRangeMapDB.java:353-361 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/util/SharedRangeMapDB.java:127\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/util/SharedRangeMapDB.java"},"region":{"startLine":127}}}],"partialFingerprints":{"codehealthFindingId/v1":"1c3804abe295c1d50ad63415e9cbcbdffe6624f2c8d448862cb08250b7bf454d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/DataTypeArchiveDBChangeSet.java:290-298 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/ProgramDBChangeSet.java:545-553 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/DataTypeArchiveDBChangeSet.java:290\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/DataTypeArchiveDBChangeSet.java"},"region":{"startLine":290}}}],"partialFingerprints":{"codehealthFindingId/v1":"9c9f577ba53870111a205e5e7644ffc8ed2bd5b21d9e29dfd46265f1b055190b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/DataTypeArchiveDBChangeSet.java:324-332 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/ProgramDBChangeSet.java:618-626 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/DataTypeArchiveDBChangeSet.java:324\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/DataTypeArchiveDBChangeSet.java"},"region":{"startLine":324}}}],"partialFingerprints":{"codehealthFindingId/v1":"83a4357f4e1d683743a881debe027e538107e14f031e6985b1b9289134a86a3f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/address/AddressSet.java:950-958 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/address/AddressSet.java:1009-1017 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/address/AddressSet.java:950\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/address/AddressSet.java"},"region":{"startLine":950}}}],"partialFingerprints":{"codehealthFindingId/v1":"20a028d16751ccbbd809a44384cbb439ec212844e3ade1ef64e30fd9ffcda323"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/lang/protorules/ConsumeExtra.java:90-98 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/lang/protorules/ConsumeRemaining.java:83-91 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/lang/protorules/ConsumeExtra.java:90\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/lang/protorules/ConsumeExtra.java"},"region":{"startLine":90}}}],"partialFingerprints":{"codehealthFindingId/v1":"6bc43d42f4401a1d4d72a5c03d3aa8cad5610383858babb66fc57225358c5e90"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/lang/InjectContext.java:48-56 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/lang/InjectContext.java:65-73 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/lang/InjectContext.java:48\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/lang/InjectContext.java"},"region":{"startLine":48}}}],"partialFingerprints":{"codehealthFindingId/v1":"87900de86286ed9c00379bb639e0be69100b5e7292219f443b995812e7ee4876"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/lang/RegisterTranslator.java:72-80 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/lang/RegisterTranslator.java:88-96 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/lang/RegisterTranslator.java:72\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/lang/RegisterTranslator.java"},"region":{"startLine":72}}}],"partialFingerprints":{"codehealthFindingId/v1":"32202f0b6cea55674d99bf28a75ba064054a8057b4fed646745e270bd17dc095"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/listing/VariableImpl.java:551-559 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/listing/VariableUtilities.java:390-399 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/listing/VariableImpl.java:551\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/listing/VariableImpl.java"},"region":{"startLine":551}}}],"partialFingerprints":{"codehealthFindingId/v1":"f29dac458ce1df4defd9795fddcfe1d7771adb38492bd53fbe8f24ffdca9a8c8"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/listing/VariableImpl.java:618-626 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/listing/VariableUtilities.java:471-479 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/listing/VariableImpl.java:618\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. Note that the copies do not run to the end of the range shown: their LAST lines are different code, not the same code under different names \u2014 the matched region ends inside that line. Extract the lines above it, and read the last line of each site separately."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/listing/VariableImpl.java"},"region":{"startLine":618}}}],"partialFingerprints":{"codehealthFindingId/v1":"da81780460594afc25010f684864193846fc6db0fb68bff084d148efeb111291"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/sleigh/grammar/BaseRecognizerOverride.java:107-115 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/sleigh/grammar/ParsingEnvironment.java:234-243 \u2014 before extracting anything, compare \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/sleigh/grammar/BaseRecognizerOverride.java\u0060 and \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/sleigh/grammar/ParsingEnvironment.java\u0060 as WHOLE FILES: this scan already matched 4 separate duplicated blocks between them, totalling at least 45 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/sleigh/grammar/BaseRecognizerOverride.java"},"region":{"startLine":107}}}],"partialFingerprints":{"codehealthFindingId/v1":"10fa091d4f28b264c8a2afa641f022b944ccc7f51fb2f429e81a357b40a23129"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): Ghidra/Framework/Project/src/main/java/ghidra/framework/main/logviewer/ui/FVTable.java:414-422 | Ghidra/Framework/Project/src/main/java/ghidra/framework/main/logviewer/ui/FVTable.java:489-498 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/Project/src/main/java/ghidra/framework/main/logviewer/ui/FVTable.java:414\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Project/src/main/java/ghidra/framework/main/logviewer/ui/FVTable.java"},"region":{"startLine":414}}}],"partialFingerprints":{"codehealthFindingId/v1":"e6910a6019b1c751bc46907f80125f6046a2861d7f9d877f0408f694e1d70b3c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 5): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slgh_compile/ConsistencyChecker.java:89-96 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slgh_compile/ConsistencyChecker.java:208-215 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slgh_compile/ConsistencyChecker.java:228-235 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slgh_compile/ConsistencyChecker.java:248-255 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slgh_compile/ConsistencyChecker.java:268-275 \u2014 all 5 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slgh_compile/ConsistencyChecker.java:89\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. Note that the copies do not run to the end of the range shown: their LAST lines are different code, not the same code under different names \u2014 the matched region ends inside that line. Extract the lines above it, and read the last line of each site separately."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slgh_compile/ConsistencyChecker.java"},"region":{"startLine":89}}}],"partialFingerprints":{"codehealthFindingId/v1":"089d50414ed1a9c660af9a35ed698112a92c5c049486cccdef9c179d7e6db811"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 5): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/symbol/SymbolDatabaseAdapterV1.java:62-69 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/symbol/SymbolDatabaseAdapterV2.java:63-70 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/symbol/SymbolDatabaseAdapterV3.java:85-92 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/symbol/SymbolDatabaseAdapterV4.java:87-94 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/symbol/SymbolDatabaseAdapterV5.java:79-86 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/symbol/SymbolDatabaseAdapterV1.java:62\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/symbol/SymbolDatabaseAdapterV1.java"},"region":{"startLine":62}}}],"partialFingerprints":{"codehealthFindingId/v1":"db4c42a46c056e147c7a851510ac72ebbd18a71f39df6fb514f5b0fa1cd4f9d2"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 4): Ghidra/Processors/JVM/src/main/java/ghidra/app/util/pcodeInject/ReferenceMethods.java:128-135 | Ghidra/Processors/JVM/src/main/java/ghidra/app/util/pcodeInject/ReferenceMethods.java:137-144 | Ghidra/Processors/JVM/src/main/java/ghidra/app/util/pcodeInject/ReferenceMethods.java:146-153 | Ghidra/Processors/JVM/src/main/java/ghidra/app/util/pcodeInject/ReferenceMethods.java:155-162 \u2014 all 4 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Processors/JVM/src/main/java/ghidra/app/util/pcodeInject/ReferenceMethods.java"},"region":{"startLine":128}}}],"partialFingerprints":{"codehealthFindingId/v1":"df1ebe7794b807ab770476eb09838032a1d9fb51ac16668abed1000fc3beea22"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 4): Ghidra/Processors/JVM/src/main/java/ghidra/app/util/pcodeInject/ReferenceMethods.java:275-282 | Ghidra/Processors/JVM/src/main/java/ghidra/app/util/pcodeInject/ReferenceMethods.java:285-292 | Ghidra/Processors/JVM/src/main/java/ghidra/app/util/pcodeInject/ReferenceMethods.java:295-302 | Ghidra/Processors/JVM/src/main/java/ghidra/app/util/pcodeInject/ReferenceMethods.java:305-312 \u2014 all 4 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Processors/JVM/src/main/java/ghidra/app/util/pcodeInject/ReferenceMethods.java"},"region":{"startLine":275}}}],"partialFingerprints":{"codehealthFindingId/v1":"6d040836c726114b6c7ff23e8380c74e0a3b700ca9d7d00f37831fd9f44d3e24"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 4): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slgh_compile/ConsistencyChecker.java:149-156 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slgh_compile/ConsistencyChecker.java:172-179 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slgh_compile/ConsistencyChecker.java:202-209 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slgh_compile/ConsistencyChecker.java:222-229 \u2014 all 4 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slgh_compile/ConsistencyChecker.java"},"region":{"startLine":149}}}],"partialFingerprints":{"codehealthFindingId/v1":"47eb50ea49ef1536d6097256550463908f767dae2f45d097a16937959e04d47c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 4): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghpatexpress/TokenPattern.java:120-127 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghpatexpress/TokenPattern.java:135-142 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghpatexpress/TokenPattern.java:146-153 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghpatexpress/TokenPattern.java:155-162 \u2014 all 4 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghpatexpress/TokenPattern.java:120\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. Note that the copies do not run to the end of the range shown: their LAST lines are different code, not the same code under different names \u2014 the matched region ends inside that line. Extract the lines above it, and read the last line of each site separately."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghpatexpress/TokenPattern.java"},"region":{"startLine":120}}}],"partialFingerprints":{"codehealthFindingId/v1":"335f8d8abe27cb86aa3b78b6752419f3ab84671f187e5b818410234c499b55c8"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 4): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/symbol/SymbolDatabaseAdapterV2.java:266-273 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/symbol/SymbolDatabaseAdapterV3.java:319-326 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/symbol/SymbolDatabaseAdapterV4.java:289-296 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/symbol/SymbolDatabaseAdapterV5.java:306-313 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/symbol/SymbolDatabaseAdapterV2.java:266\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/symbol/SymbolDatabaseAdapterV2.java"},"region":{"startLine":266}}}],"partialFingerprints":{"codehealthFindingId/v1":"409a49f60b26126e686f564a1bbb0eaae38e3108b84c8bde6cc626398f0681af"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 3): Ghidra/Processors/PIC/src/main/java/ghidra/app/plugin/core/analysis/Pic12Analyzer.java:329-336 | Ghidra/Processors/PIC/src/main/java/ghidra/app/plugin/core/analysis/Pic17c7xxAnalyzer.java:554-561 | Ghidra/Processors/PIC/src/main/java/ghidra/app/plugin/core/analysis/Pic18Analyzer.java:557-564 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Processors/PIC/src/main/java/ghidra/app/plugin/core/analysis/Pic12Analyzer.java:329\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. Note that the copies do not run to the end of the range shown: their LAST lines are different code, not the same code under different names \u2014 the matched region ends inside that line. Extract the lines above it, and read the last line of each site separately."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Processors/PIC/src/main/java/ghidra/app/plugin/core/analysis/Pic12Analyzer.java"},"region":{"startLine":329}}}],"partialFingerprints":{"codehealthFindingId/v1":"c33f3c712f3976c0ef42abb4a9b14fd402b76f3bd4d414f76267b008f8b2c416"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 3): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slgh_compile/ConsistencyChecker.java:122-129 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slgh_compile/ConsistencyChecker.java:178-185 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slgh_compile/ConsistencyChecker.java:319-326 \u2014 all 3 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slgh_compile/ConsistencyChecker.java:122\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. Note that the copies do not run to the end of the range shown: their LAST lines are different code, not the same code under different names \u2014 the matched region ends inside that line. Extract the lines above it, and read the last line of each site separately."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slgh_compile/ConsistencyChecker.java"},"region":{"startLine":122}}}],"partialFingerprints":{"codehealthFindingId/v1":"0fa0199fba7dfe43c964301e072a7c336cead0682ad46506ec299364503d6623"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 3): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/mem/MemoryMapDB.java:1325-1332 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/mem/MemoryMapDB.java:1392-1399 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/mem/MemoryMapDB.java:1459-1466 \u2014 all 3 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/mem/MemoryMapDB.java:1325\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/mem/MemoryMapDB.java"},"region":{"startLine":1325}}}],"partialFingerprints":{"codehealthFindingId/v1":"f1d4253039598a07820e698eb2a7400a171c558cd686e03e83984419f206590b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 3): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/mem/MemoryMapDB.java:1341-1348 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/mem/MemoryMapDB.java:1408-1415 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/mem/MemoryMapDB.java:1475-1482 \u2014 all 3 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/mem/MemoryMapDB.java:1341\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/mem/MemoryMapDB.java"},"region":{"startLine":1341}}}],"partialFingerprints":{"codehealthFindingId/v1":"fc0a7f2cfe2de8c91e0140a76b6a07f81fc79a6ecf31c46fe5ac62816088a8f4"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): GhidraBuild/LaunchSupport/src/main/java/ghidra/launch/JavaVersion.java:182-189 | GhidraBuild/LaunchSupport/src/main/java/ghidra/launch/JavaVersion.java:193-200 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060GhidraBuild/LaunchSupport/src/main/java/ghidra/launch/JavaVersion.java:182\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"GhidraBuild/LaunchSupport/src/main/java/ghidra/launch/JavaVersion.java"},"region":{"startLine":182}}}],"partialFingerprints":{"codehealthFindingId/v1":"6f921577243c427af286fa93b4367ba5f7c0739aed7079175daa848b6c142bb7"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): Ghidra/Processors/x86/src/main/java/ghidra/app/plugin/core/analysis/X86Analyzer.java:65-72 | Ghidra/Processors/PowerPC/src/main/java/ghidra/app/plugin/core/analysis/PowerPCAddressAnalyzer.java:214-222 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Processors/x86/src/main/java/ghidra/app/plugin/core/analysis/X86Analyzer.java:65\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Processors/x86/src/main/java/ghidra/app/plugin/core/analysis/X86Analyzer.java"},"region":{"startLine":65}}}],"partialFingerprints":{"codehealthFindingId/v1":"c55f3924b4c50b8aa1a296cff4cfc5e7f56a23b18e881e93ceef1b390ad39a98"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): Ghidra/Processors/MIPS/src/main/java/ghidra/app/plugin/core/analysis/MipsPreAnalyzer.java:309-316 | Ghidra/Processors/MIPS/src/main/java/ghidra/app/plugin/core/analysis/MipsPreAnalyzer.java:321-328 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Processors/MIPS/src/main/java/ghidra/app/plugin/core/analysis/MipsPreAnalyzer.java:309\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Processors/MIPS/src/main/java/ghidra/app/plugin/core/analysis/MipsPreAnalyzer.java"},"region":{"startLine":309}}}],"partialFingerprints":{"codehealthFindingId/v1":"8876416a46447f8d706f7142d3a4064b1dd5dd05eeacd879d3c6e81ae90f8392"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): Ghidra/Processors/JVM/src/main/java/ghidra/app/util/pcodeInject/InjectPayloadJavaParameters.java:221-228 | Ghidra/Processors/Dalvik/src/main/java/ghidra/dalvik/dex/inject/InjectPayloadDexParameters.java:195-202 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Processors/JVM/src/main/java/ghidra/app/util/pcodeInject/InjectPayloadJavaParameters.java"},"region":{"startLine":221}}}],"partialFingerprints":{"codehealthFindingId/v1":"578b673c8db68f6d6136236ab34a00979089c70f4ec51a7f17c382a5fea360a9"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): Ghidra/Processors/JVM/src/main/java/ghidra/app/util/pcodeInject/ReferenceMethods.java:62-69 | Ghidra/Processors/JVM/src/main/java/ghidra/app/util/pcodeInject/ReferenceMethods.java:86-93 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Processors/JVM/src/main/java/ghidra/app/util/pcodeInject/ReferenceMethods.java"},"region":{"startLine":62}}}],"partialFingerprints":{"codehealthFindingId/v1":"281718ed03969bdb53558b642f560cb1b8eb7c95d2369079cf6c17321f13ac97"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): Ghidra/Processors/JVM/src/main/java/ghidra/app/util/pcodeInject/ReferenceMethods.java:70-77 | Ghidra/Processors/JVM/src/main/java/ghidra/app/util/pcodeInject/ReferenceMethods.java:78-85 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Processors/JVM/src/main/java/ghidra/app/util/pcodeInject/ReferenceMethods.java"},"region":{"startLine":70}}}],"partialFingerprints":{"codehealthFindingId/v1":"a0843ea262d78c31b2dc7b412a1f4a12792602fc8cb7c5ee6e9c48478d25cb64"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): Ghidra/Processors/JVM/src/main/java/ghidra/app/util/pcodeInject/ReferenceMethods.java:202-209 | Ghidra/Processors/JVM/src/main/java/ghidra/app/util/pcodeInject/ReferenceMethods.java:229-236 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Processors/JVM/src/main/java/ghidra/app/util/pcodeInject/ReferenceMethods.java"},"region":{"startLine":202}}}],"partialFingerprints":{"codehealthFindingId/v1":"cab294ae94dc4f2b1235ab8473befffa0c9f2da5ba40f7708ce50a0097fe5465"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): Ghidra/Processors/JVM/src/main/java/ghidra/app/util/pcodeInject/ReferenceMethods.java:211-218 | Ghidra/Processors/JVM/src/main/java/ghidra/app/util/pcodeInject/ReferenceMethods.java:220-227 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Processors/JVM/src/main/java/ghidra/app/util/pcodeInject/ReferenceMethods.java"},"region":{"startLine":211}}}],"partialFingerprints":{"codehealthFindingId/v1":"4e86ba463e539a088638b58a062e6a5692e5e37807789f972cb5aade48495456"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): Ghidra/Processors/JVM/src/main/java/ghidra/javaclass/analyzers/JavaAnalyzer.java:495-502 | Ghidra/Processors/JVM/src/main/java/ghidra/javaclass/analyzers/JavaAnalyzer.java:508-515 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Processors/JVM/src/main/java/ghidra/javaclass/analyzers/JavaAnalyzer.java"},"region":{"startLine":495}}}],"partialFingerprints":{"codehealthFindingId/v1":"edfaf7adb5a127a9d948ea2db091d757d93b43f60f94d984d0c4396a6ab1c19b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): Ghidra/Processors/JVM/src/main/java/ghidra/javaclass/format/FieldInfoJava.java:54-61 | Ghidra/Processors/JVM/src/main/java/ghidra/javaclass/format/MethodInfoJava.java:56-63 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Processors/JVM/src/main/java/ghidra/javaclass/format/FieldInfoJava.java:54\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Processors/JVM/src/main/java/ghidra/javaclass/format/FieldInfoJava.java"},"region":{"startLine":54}}}],"partialFingerprints":{"codehealthFindingId/v1":"98db8d802b2ff79b824451e15a00e2cab9b6916d8eff4b7b7cd39e86094ec1ed"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): Ghidra/Processors/JVM/src/main/java/ghidra/javaclass/format/FieldInfoJava.java:157-164 | Ghidra/Processors/JVM/src/main/java/ghidra/javaclass/format/MethodInfoJava.java:325-332 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Processors/JVM/src/main/java/ghidra/javaclass/format/FieldInfoJava.java:157\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Processors/JVM/src/main/java/ghidra/javaclass/format/FieldInfoJava.java"},"region":{"startLine":157}}}],"partialFingerprints":{"codehealthFindingId/v1":"c7b7140c981ce67901359992ea2cd23f79b060f8563e30da3bc8d1153f351d0c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): Ghidra/Processors/AARCH64/src/main/java/ghidra/program/emulation/AARCH64EmulateInstructionStateModifier.java:287-294 | Ghidra/Processors/AARCH64/src/main/java/ghidra/program/emulation/AARCH64EmulateInstructionStateModifier.java:560-567 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Processors/AARCH64/src/main/java/ghidra/program/emulation/AARCH64EmulateInstructionStateModifier.java:287\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Processors/AARCH64/src/main/java/ghidra/program/emulation/AARCH64EmulateInstructionStateModifier.java"},"region":{"startLine":287}}}],"partialFingerprints":{"codehealthFindingId/v1":"d7d635094b8120fa8959fb8bcb8db7a193769fb6851f41474477d794af5adcb6"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): Ghidra/Processors/AARCH64/src/main/java/ghidra/program/emulation/AARCH64EmulateInstructionStateModifier.java:755-762 | Ghidra/Processors/AARCH64/src/main/java/ghidra/program/emulation/AARCH64EmulateInstructionStateModifier.java:824-831 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Processors/AARCH64/src/main/java/ghidra/program/emulation/AARCH64EmulateInstructionStateModifier.java:755\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Processors/AARCH64/src/main/java/ghidra/program/emulation/AARCH64EmulateInstructionStateModifier.java"},"region":{"startLine":755}}}],"partialFingerprints":{"codehealthFindingId/v1":"843563a47340085b8216c1d0a51f14274b12cb6928f36e0263dd010dd0eb75d6"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): Ghidra/Framework/Utility/src/main/java/ghidra/xml/AbstractXmlPullParser.java:151-158 | Ghidra/Framework/Utility/src/main/java/ghidra/xml/AbstractXmlPullParser.java:193-200 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Utility/src/main/java/ghidra/xml/AbstractXmlPullParser.java"},"region":{"startLine":151}}}],"partialFingerprints":{"codehealthFindingId/v1":"cc0431a6a18e8c755999c5f1afc0b513e294541c227dc359a06920a8741aea4e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/assembler/sleigh/expr/ContextFieldSolver.java:41-48 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/assembler/sleigh/expr/TokenFieldSolver.java:41-48 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/assembler/sleigh/expr/ContextFieldSolver.java"},"region":{"startLine":41}}}],"partialFingerprints":{"codehealthFindingId/v1":"84a756e4588d5187ed27912c191f54ff8882ecf0bcf04267a0d820ec16f9c743"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/assembler/sleigh/expr/MultExpressionSolver.java:151-159 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/assembler/sleigh/expr/MultExpressionSolver.java:170-177 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/assembler/sleigh/expr/MultExpressionSolver.java"},"region":{"startLine":151}}}],"partialFingerprints":{"codehealthFindingId/v1":"4b93bab8ba432ba829ab8baa242a49b80afc6b02acdff8ecb5195844964505e0"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/core/data/ProgramProviderContext.java:39-47 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/core/data/ProgramStructureProviderContext.java:77-84 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/core/data/ProgramProviderContext.java:39\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/core/data/ProgramProviderContext.java"},"region":{"startLine":39}}}],"partialFingerprints":{"codehealthFindingId/v1":"2cc02b881eedde98d72047933bc240e76242b598ab1d065c244af2b989a797d0"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/processors/sleigh/SleighParserContext.java:308-315 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/processors/sleigh/SleighParserContext.java:338-346 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/processors/sleigh/SleighParserContext.java"},"region":{"startLine":308}}}],"partialFingerprints":{"codehealthFindingId/v1":"f18528b03c02fe0994f3e3cb53db7c64401e118708010c05b677487169dcda38"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/sleighbase/SleighBase.java:104-111 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/sleighbase/SleighBase.java:122-129 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/sleighbase/SleighBase.java:104\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/sleighbase/SleighBase.java"},"region":{"startLine":104}}}],"partialFingerprints":{"codehealthFindingId/v1":"3b3a02eee8b9a6f0e19271f1411bca175c979bec3b42a980ca111faecda16213"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slgh_compile/PcodeCompile.java:302-309 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slgh_compile/PcodeCompile.java:318-325 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slgh_compile/PcodeCompile.java"},"region":{"startLine":302}}}],"partialFingerprints":{"codehealthFindingId/v1":"3c2dadc053757df559c8eff1ead14b94182ddf825c9e63206293cf54db77466c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slgh_compile/SleighCompile.java:686-693 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/lang/PcodeParser.java:197-205 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slgh_compile/SleighCompile.java:686\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slgh_compile/SleighCompile.java"},"region":{"startLine":686}}}],"partialFingerprints":{"codehealthFindingId/v1":"0e51920b46bcd69f6f2c4fcfdef0278362002e98ef905990946272721d456b65"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slgh_compile/SleighCompile.java:1134-1142 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slgh_compile/SleighCompile.java:1157-1164 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slgh_compile/SleighCompile.java"},"region":{"startLine":1134}}}],"partialFingerprints":{"codehealthFindingId/v1":"2aa5d10f4348162d9bb6632da9ef981a650df70d8826e7798f6ea9f1e7933b97"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghpatexpress/EquationAnd.java:65-72 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghpatexpress/EquationOr.java:65-72 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghpatexpress/EquationAnd.java:65\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghpatexpress/EquationAnd.java"},"region":{"startLine":65}}}],"partialFingerprints":{"codehealthFindingId/v1":"f9e877b54742eb06bd83bb1d049081c46bd65d0ad527335a4adc9d597a791373"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/bookmark/BookmarkDBAdapter.java:112-119 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/bookmark/BookmarkDBAdapter.java:133-140 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/bookmark/BookmarkDBAdapter.java:112\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/bookmark/BookmarkDBAdapter.java"},"region":{"startLine":112}}}],"partialFingerprints":{"codehealthFindingId/v1":"f2a4bac42f9b481ebad400ee670bdcdd87560ae418cd289cfa9c2325bf0a7a3c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/code/CodeManager.java:1775-1782 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/code/CodeManager.java:1794-1801 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/code/CodeManager.java:1775\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/code/CodeManager.java"},"region":{"startLine":1775}}}],"partialFingerprints":{"codehealthFindingId/v1":"544b5cb80420ae87cc232081c064e4335c205b878557fefd2afb9585cdbde025"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/code/DataDBAdapter.java:91-98 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/code/InstDBAdapter.java:99-106 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/code/DataDBAdapter.java:91\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/code/DataDBAdapter.java"},"region":{"startLine":91}}}],"partialFingerprints":{"codehealthFindingId/v1":"e78cfaed4f8902e01c732948ee1cf2f33dea0abda18d8c9f319bcc947638de1f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/DataTypeArchiveTransformerPanel.java:70-77 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/DataTypeArchiveTransformerPanel.java:104-111 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/DataTypeArchiveTransformerPanel.java"},"region":{"startLine":70}}}],"partialFingerprints":{"codehealthFindingId/v1":"1498d545d2aad97562c0cd382f0ba39473bbc76751c8d0df141262b12bcbb730"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/DataTypeComponentDB.java:281-288 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/DataTypeComponentImpl.java:247-254 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/DataTypeComponentDB.java:281\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/DataTypeComponentDB.java"},"region":{"startLine":281}}}],"partialFingerprints":{"codehealthFindingId/v1":"1f169db0fa25c20e8a240c546b204af12cf9088ea070b8be51dca259a39b6701"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/DataTypeComponentDB.java:335-342 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/DataTypeComponentImpl.java:295-302 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/DataTypeComponentDB.java:335\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/DataTypeComponentDB.java"},"region":{"startLine":335}}}],"partialFingerprints":{"codehealthFindingId/v1":"e266cba5c7429d7623a4ab4d467d074f5360a4c191c356f79a5c6299fa365e34"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/StructureDB.java:1129-1136 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/StructureDataType.java:197-205 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/StructureDB.java:1129\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/StructureDB.java"},"region":{"startLine":1129}}}],"partialFingerprints":{"codehealthFindingId/v1":"780afc095a45948820c25c388338dad4bc443f0a50aafb43e28ececeb353899e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/TypedefDB.java:389-396 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/TypedefDataType.java:345-352 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/TypedefDB.java:389\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. Note that the copies do not run to the end of the range shown: their LAST lines are different code, not the same code under different names \u2014 the matched region ends inside that line. Extract the lines above it, and read the last line of each site separately."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/TypedefDB.java"},"region":{"startLine":389}}}],"partialFingerprints":{"codehealthFindingId/v1":"a170d4f63db1f25665b49f545441fc2ec9b304e633607afe8e2e69a639a29fc7"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/map/NormalizedAddressSet.java:400-408 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/util/AbstractAddressSetView.java:129-136 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/map/NormalizedAddressSet.java"},"region":{"startLine":400}}}],"partialFingerprints":{"codehealthFindingId/v1":"c82ea59792262007087431b053882406ac6b89559090d49c713f9256561ebdac"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/mem/FileBytes.java:291-298 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/mem/FileBytes.java:348-355 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/mem/FileBytes.java:291\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/mem/FileBytes.java"},"region":{"startLine":291}}}],"partialFingerprints":{"codehealthFindingId/v1":"3f2eb2a9147066fae3de2cfa4b498eb8565c7235f2c3189dc9566d03313e2dd5"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/oldfunction/OldFunctionDBAdapterV1.java:54-61 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/oldfunction/OldStackVariableDBAdapterV1.java:57-64 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/oldfunction/OldFunctionDBAdapterV1.java:54\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/oldfunction/OldFunctionDBAdapterV1.java"},"region":{"startLine":54}}}],"partialFingerprints":{"codehealthFindingId/v1":"ac50682aaf10d66df1545208b4d70779dda9ebcb4c95a0b058bfa256845f206a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/references/ToAdapter.java:108-115 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/references/ToAdapter.java:125-132 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/references/ToAdapter.java:108\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. Note that the copies do not run to the end of the range shown: their LAST lines are different code, not the same code under different names \u2014 the matched region ends inside that line. Extract the lines above it, and read the last line of each site separately."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/references/ToAdapter.java"},"region":{"startLine":108}}}],"partialFingerprints":{"codehealthFindingId/v1":"7dbda3ab0faaf14f0f97eb70d6df14aa917b81c64cdf5c7a4ae1600ae3bd5e1e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/sourcemap/SourceFileManagerDB.java:236-243 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/sourcemap/SourceFileManagerDB.java:264-271 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/sourcemap/SourceFileManagerDB.java"},"region":{"startLine":236}}}],"partialFingerprints":{"codehealthFindingId/v1":"051883a762d3975f08f50608515a97f7e2ed0ae9b036f9c2017a64cc4dd4d288"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/symbol/EquateManager.java:162-169 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/symbol/EquateManager.java:184-191 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/symbol/EquateManager.java:162\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/symbol/EquateManager.java"},"region":{"startLine":162}}}],"partialFingerprints":{"codehealthFindingId/v1":"b2e9c2ee40a29b6faeadd3840ab0ebc321c5a535e1edbf2bc8f081cfec59f404"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/symbol/SymbolDatabaseAdapterV2.java:200-207 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/symbol/SymbolDatabaseAdapterV3.java:222-229 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/symbol/SymbolDatabaseAdapterV2.java:200\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/symbol/SymbolDatabaseAdapterV2.java"},"region":{"startLine":200}}}],"partialFingerprints":{"codehealthFindingId/v1":"d74b7a431839583ec8f93edc1b3956c977920447cf70644d013c7b44c813d062"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/util/AddressRangeMapDB.java:190-197 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/util/AddressRangeMapDB.java:503-510 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/util/AddressRangeMapDB.java"},"region":{"startLine":190}}}],"partialFingerprints":{"codehealthFindingId/v1":"991b3ff34bab9c904045dd5cc8a8295e30a3e54180cc9057caf1a1b62d25a30b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/disassemble/Disassembler.java:148-155 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/disassemble/Disassembler.java:212-221 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/disassemble/Disassembler.java:148\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it. Note that the copies do not run to the end of the range shown: their LAST lines are different code, not the same code under different names \u2014 the matched region ends inside that line. Extract the lines above it, and read the last line of each site separately."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/disassemble/Disassembler.java"},"region":{"startLine":148}}}],"partialFingerprints":{"codehealthFindingId/v1":"1c970406e1cface1e0507656f5cea6eda0636b5730eadfc660546b81a2eca0ef"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/BitmapResource.java:381-388 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/BitmapResource.java:395-403 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/BitmapResource.java"},"region":{"startLine":381}}}],"partialFingerprints":{"codehealthFindingId/v1":"1de5d68bb3ad632da410969aeca5301e682357408a2e8bd25aed56cec7d54889"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/DataTypeImpl.java:162-169 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/DataTypeImpl.java:217-224 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/DataTypeImpl.java:162\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/DataTypeImpl.java"},"region":{"startLine":162}}}],"partialFingerprints":{"codehealthFindingId/v1":"5bb25dae56e09ead3b48d9f7f040055d8e346c674e753d527bb253c09d1405ab"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/DataTypeInstance.java:124-131 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/DataTypeInstance.java:182-190 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/DataTypeInstance.java:124\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/DataTypeInstance.java"},"region":{"startLine":124}}}],"partialFingerprints":{"codehealthFindingId/v1":"18963f905cbe8d8f4fe2b8c38fb702e12c5c890af7b1c857c359f9c947c3795a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/EnumDataType.java:57-64 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/EnumDataType.java:70-78 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/EnumDataType.java:57\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/EnumDataType.java"},"region":{"startLine":57}}}],"partialFingerprints":{"codehealthFindingId/v1":"7ad9b927f60e1c9e9f757477539f7eff522c3c46d9121b44923833b7c39f17ae"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/RGB16ColorDataType.java:157-164 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/RGB32ColorDataType.java:162-169 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/RGB16ColorDataType.java:157\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/RGB16ColorDataType.java"},"region":{"startLine":157}}}],"partialFingerprints":{"codehealthFindingId/v1":"712f4885c5063c1394e3d3c352e00356939635b49d9650673f1c36195fcd7149"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/RGB16EncodingSettingsDefinition.java:99-106 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/RGB32EncodingSettingsDefinition.java:100-107 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/RGB16EncodingSettingsDefinition.java"},"region":{"startLine":99}}}],"partialFingerprints":{"codehealthFindingId/v1":"08395ce4c7cfe655d9a963815bb8e0c3bc1dc915a7d95558a18bbd69bfb54d59"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/lang/protorules/ConsumeRemaining.java:79-86 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/lang/protorules/MultiSlotAssign.java:128-135 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/lang/protorules/ConsumeRemaining.java:79\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/lang/protorules/ConsumeRemaining.java"},"region":{"startLine":79}}}],"partialFingerprints":{"codehealthFindingId/v1":"06c179ad5893552fe07ae24ad127e33f3345192cf243f33e69c342e2eb8ddebc"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/lang/ParamListRegisterOut.java:36-43 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/lang/ParamListStandardOut.java:42-50 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/lang/ParamListRegisterOut.java:36\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/lang/ParamListRegisterOut.java"},"region":{"startLine":36}}}],"partialFingerprints":{"codehealthFindingId/v1":"67984f1cf370bd18b618ffc1eb1ef9ecce0054671985186182d334a18b09bacc"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/listing/VariableImpl.java:629-636 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/listing/VariableUtilities.java:484-491 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/listing/VariableImpl.java:629\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/listing/VariableImpl.java"},"region":{"startLine":629}}}],"partialFingerprints":{"codehealthFindingId/v1":"f582da04f6dec5a6396ba05225cc9234f717f85684c49ab2a73374f108463277"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/pcode/LocalSymbolMap.java:174-182 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/pcode/LocalSymbolMap.java:224-231 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/pcode/LocalSymbolMap.java:174\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/pcode/LocalSymbolMap.java"},"region":{"startLine":174}}}],"partialFingerprints":{"codehealthFindingId/v1":"3cbc3233c3ce18efc479419c2d0154b0792f615614ce27edc6557061d3b409ce"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/pcode/PcodeDataTypeManager.java:681-688 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/pcode/PcodeDataTypeManager.java:697-704 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/pcode/PcodeDataTypeManager.java:681\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/pcode/PcodeDataTypeManager.java"},"region":{"startLine":681}}}],"partialFingerprints":{"codehealthFindingId/v1":"6dc9979cb115f5242d1dd4f9f79cf4120fc353d97624158d304ef8cda9bdbeb8"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 6): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghpatexpress/EqualEquation.java:34-40 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghpatexpress/GreaterEqualEquation.java:34-40 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghpatexpress/GreaterEquation.java:34-40 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghpatexpress/LessEqualEquation.java:34-40 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghpatexpress/LessEquation.java:34-40 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghpatexpress/NotEqualEquation.java:36-42 \u2014 before extracting anything, compare \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghpatexpress/GreaterEqualEquation.java\u0060 and \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghpatexpress/GreaterEquation.java\u0060 as WHOLE FILES: this scan already matched 4 separate duplicated blocks between them, totalling at least 35 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghpatexpress/EqualEquation.java"},"region":{"startLine":34}}}],"partialFingerprints":{"codehealthFindingId/v1":"e546e2f5e4c865c0ee214b5a3772798b0c6fa7142e4d912a6d3279352fdc6eea"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 6): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghpatexpress/EqualEquation.java:46-52 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghpatexpress/GreaterEqualEquation.java:49-56 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghpatexpress/GreaterEquation.java:49-56 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghpatexpress/LessEqualEquation.java:49-56 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghpatexpress/LessEquation.java:49-56 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghpatexpress/NotEqualEquation.java:51-58 \u2014 before extracting anything, compare \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghpatexpress/GreaterEqualEquation.java\u0060 and \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghpatexpress/GreaterEquation.java\u0060 as WHOLE FILES: this scan already matched 4 separate duplicated blocks between them, totalling at least 35 lines, which is the signature of one file having been copied from the other rather than of a helper waiting to be extracted. If that is what happened, the fix is to keep one copy and have the other call it (or delete it), which resolves this row and its siblings together \u2014 extracting one helper per block leaves the fork in place. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghpatexpress/EqualEquation.java:46\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghpatexpress/EqualEquation.java"},"region":{"startLine":46}}}],"partialFingerprints":{"codehealthFindingId/v1":"ce140979411bf59eaac91f69d204626140e1ca9dec70c9137da1c2203811c94a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 4): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/reloc/RelocationDBAdapterV1.java:89-95 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/reloc/RelocationDBAdapterV2.java:90-96 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/reloc/RelocationDBAdapterV3.java:93-99 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/reloc/RelocationDBAdapterV4.java:93-99 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/reloc/RelocationDBAdapterV1.java"},"region":{"startLine":89}}}],"partialFingerprints":{"codehealthFindingId/v1":"fe3558df34efe3dad25435666145257d8752f7209ff49aac88e965092f88a915"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 3): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/references/FromAdapter.java:112-118 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/references/ToAdapter.java:108-115 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/references/ToAdapter.java:126-132 \u2014 there are 3 copies across 2 file(s) \u2014 more copies than files, so at least one file holds the block twice. Extract it once into a single shared function every call site can reach and call it from all 3 sites; resolving a subset leaves the remainder to drift apart. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/references/FromAdapter.java:112\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. Note that the copies do not run to the end of the range shown: their LAST lines are different code, not the same code under different names \u2014 the matched region ends inside that line. Extract the lines above it, and read the last line of each site separately."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/references/FromAdapter.java"},"region":{"startLine":112}}}],"partialFingerprints":{"codehealthFindingId/v1":"f50aec42c27c997c1f52899ae8793309b4cb4a4e1d479677ba98add2e63bcd50"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 3): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/DataTypeImpl.java:144-150 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/DataTypeImpl.java:161-167 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/DataTypeImpl.java:216-222 \u2014 all 3 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/DataTypeImpl.java:144\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/DataTypeImpl.java"},"region":{"startLine":144}}}],"partialFingerprints":{"codehealthFindingId/v1":"862aedd88509d9a4459904aaeb5252b04d1dd8ef6d1dfc6d1f8ee21c0e110f2c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): GhidraBuild/EclipsePlugins/GhidraDev/GhidraDevPlugin/src/main/java/ghidradev/ghidraprojectcreator/launchers/GhidraLaunchDelegate.java:99-105 | GhidraBuild/EclipsePlugins/GhidraDev/GhidraDevPlugin/src/main/java/ghidradev/ghidraprojectcreator/launchers/PyGhidraLaunchDelegate.java:101-107 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"GhidraBuild/EclipsePlugins/GhidraDev/GhidraDevPlugin/src/main/java/ghidradev/ghidraprojectcreator/launchers/GhidraLaunchDelegate.java"},"region":{"startLine":99}}}],"partialFingerprints":{"codehealthFindingId/v1":"85ef98d0503c431c79ab13390889ad5f026478af3c509ebb1c6c41c3b79dd06c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): GhidraBuild/EclipsePlugins/GhidraDev/GhidraDevPlugin/src/main/java/ghidradev/ghidraprojectcreator/utils/GhidraScriptUtils.java:142-148 | GhidraBuild/EclipsePlugins/GhidraDev/GhidraDevPlugin/src/main/java/ghidradev/ghidraprojectcreator/utils/GhidraScriptUtils.java:161-167 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"GhidraBuild/EclipsePlugins/GhidraDev/GhidraDevPlugin/src/main/java/ghidradev/ghidraprojectcreator/utils/GhidraScriptUtils.java"},"region":{"startLine":142}}}],"partialFingerprints":{"codehealthFindingId/v1":"a87c17951880b2f12a694f598cb3b4b7c504b81699ee9eba0315ee3c7737d21a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): Ghidra/Processors/Xtensa/src/main/java/ghidra/program/emulation/XtensaEmulateInstructionStateModifier.java:71-78 | Ghidra/Processors/Xtensa/src/main/java/ghidra/program/emulation/XtensaEmulateInstructionStateModifier.java:113-119 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Processors/Xtensa/src/main/java/ghidra/program/emulation/XtensaEmulateInstructionStateModifier.java:71\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. Note that the copies do not run to the end of the range shown: their LAST lines are different code, not the same code under different names \u2014 the matched region ends inside that line. Extract the lines above it, and read the last line of each site separately."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Processors/Xtensa/src/main/java/ghidra/program/emulation/XtensaEmulateInstructionStateModifier.java"},"region":{"startLine":71}}}],"partialFingerprints":{"codehealthFindingId/v1":"999834f222ebb438a6b31abdd935d4f01caf80e4b8ff1e3257ee746a033635eb"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): Ghidra/Processors/PowerPC/src/main/java/ghidra/app/plugin/core/analysis/PowerPCAddressAnalyzer.java:428-434 | Ghidra/Processors/68000/src/main/java/ghidra/app/plugin/core/analysis/Motorola68KAnalyzer.java:212-218 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Processors/PowerPC/src/main/java/ghidra/app/plugin/core/analysis/PowerPCAddressAnalyzer.java:428\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Processors/PowerPC/src/main/java/ghidra/app/plugin/core/analysis/PowerPCAddressAnalyzer.java"},"region":{"startLine":428}}}],"partialFingerprints":{"codehealthFindingId/v1":"36cdb6982f04b0dfe82f8c37e6fc95bf37c93a33e235815a2d90807385305e57"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): Ghidra/Processors/PIC/src/main/java/ghidra/app/plugin/core/analysis/Pic12Analyzer.java:567-573 | Ghidra/Processors/PIC/src/main/java/ghidra/app/plugin/core/analysis/Pic12Analyzer.java:629-635 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Processors/PIC/src/main/java/ghidra/app/plugin/core/analysis/Pic12Analyzer.java:567\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Processors/PIC/src/main/java/ghidra/app/plugin/core/analysis/Pic12Analyzer.java"},"region":{"startLine":567}}}],"partialFingerprints":{"codehealthFindingId/v1":"5b37c024287bfb48179ce49fe5b436c7315afdc2b92830c5959a3ad080f30cc4"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): Ghidra/Processors/JVM/src/main/java/ghidra/app/util/pcodeInject/PcodeOpEmitter.java:154-160 | Ghidra/Processors/JVM/src/main/java/ghidra/app/util/pcodeInject/PcodeOpEmitter.java:172-178 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Processors/JVM/src/main/java/ghidra/app/util/pcodeInject/PcodeOpEmitter.java"},"region":{"startLine":154}}}],"partialFingerprints":{"codehealthFindingId/v1":"912b0139eaeef3938fc6890a7b3abf11840843c798e8663a611a073684d62fec"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): Ghidra/Processors/JVM/src/main/java/ghidra/app/util/pcodeInject/PcodeOpEmitter.java:188-194 | Ghidra/Processors/JVM/src/main/java/ghidra/app/util/pcodeInject/PcodeOpEmitter.java:206-212 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Processors/JVM/src/main/java/ghidra/app/util/pcodeInject/PcodeOpEmitter.java"},"region":{"startLine":188}}}],"partialFingerprints":{"codehealthFindingId/v1":"5946d8c96cd7afe7bf43bb612261c0c5c71441fb43206fd918423aa526489e1c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): Ghidra/Processors/JVM/src/main/java/ghidra/javaclass/analyzers/JavaAnalyzer.java:353-359 | Ghidra/Processors/JVM/src/main/java/ghidra/javaclass/analyzers/JavaAnalyzer.java:372-378 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Processors/JVM/src/main/java/ghidra/javaclass/analyzers/JavaAnalyzer.java:353\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Processors/JVM/src/main/java/ghidra/javaclass/analyzers/JavaAnalyzer.java"},"region":{"startLine":353}}}],"partialFingerprints":{"codehealthFindingId/v1":"aaa28c231a661758df2617f39cc07430ab9453db950d07e7cb5964cf6a1fad2b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): Ghidra/Processors/JVM/src/main/java/ghidra/javaclass/analyzers/JvmSwitchAnalyzer.java:148-154 | Ghidra/Processors/JVM/src/main/java/ghidra/javaclass/analyzers/JvmSwitchAnalyzer.java:190-196 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Note that the copies do not run to the end of the range shown: their LAST lines are different code, not the same code under different names \u2014 the matched region ends inside that line. Extract the lines above it, and read the last line of each site separately."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Processors/JVM/src/main/java/ghidra/javaclass/analyzers/JvmSwitchAnalyzer.java"},"region":{"startLine":148}}}],"partialFingerprints":{"codehealthFindingId/v1":"d027a4ea2a855f4d6c253e0dc403b588f55524363a674c53abc2a52abf6ef37b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): Ghidra/Processors/AARCH64/src/main/java/ghidra/program/emulation/AARCH64EmulateInstructionStateModifier.java:353-359 | Ghidra/Processors/AARCH64/src/main/java/ghidra/program/emulation/AARCH64EmulateInstructionStateModifier.java:495-501 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Processors/AARCH64/src/main/java/ghidra/program/emulation/AARCH64EmulateInstructionStateModifier.java:353\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Processors/AARCH64/src/main/java/ghidra/program/emulation/AARCH64EmulateInstructionStateModifier.java"},"region":{"startLine":353}}}],"partialFingerprints":{"codehealthFindingId/v1":"e0919eaad2301c780d2492cbd85e341f3432f285c4fe2307ae4fe5935b87c557"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): Ghidra/Processors/AARCH64/src/main/java/ghidra/program/emulation/AARCH64EmulateInstructionStateModifier.java:449-455 | Ghidra/Processors/AARCH64/src/main/java/ghidra/program/emulation/AARCH64EmulateInstructionStateModifier.java:486-492 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Processors/AARCH64/src/main/java/ghidra/program/emulation/AARCH64EmulateInstructionStateModifier.java"},"region":{"startLine":449}}}],"partialFingerprints":{"codehealthFindingId/v1":"b6288a3b94732e3f95d610bd7cc9abb08b7c8dce500d3a7c2c6c284a1d5b2d9c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): Ghidra/Processors/AARCH64/src/main/java/ghidra/program/emulation/AARCH64EmulateInstructionStateModifier.java:928-934 | Ghidra/Processors/AARCH64/src/main/java/ghidra/program/emulation/AARCH64EmulateInstructionStateModifier.java:1546-1552 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Processors/AARCH64/src/main/java/ghidra/program/emulation/AARCH64EmulateInstructionStateModifier.java:928\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Processors/AARCH64/src/main/java/ghidra/program/emulation/AARCH64EmulateInstructionStateModifier.java"},"region":{"startLine":928}}}],"partialFingerprints":{"codehealthFindingId/v1":"9865b83dd721a6886d4aac72b92add1c291d5ee2b697e5f437ebd6879ef1c0e0"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): Ghidra/Framework/Utility/src/main/java/utilities/util/reflection/ReflectionUtilities.java:478-484 | Ghidra/Framework/Utility/src/main/java/utilities/util/reflection/ReflectionUtilities.java:513-519 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/Utility/src/main/java/utilities/util/reflection/ReflectionUtilities.java:478\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Utility/src/main/java/utilities/util/reflection/ReflectionUtilities.java"},"region":{"startLine":478}}}],"partialFingerprints":{"codehealthFindingId/v1":"846356e422d7f3aef20d3bd3cec3b6b41021e365bc4105101bb43f12cae19d9d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/assembler/sleigh/expr/MaskedLong.java:911-919 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/assembler/sleigh/expr/MaskedLong.java:940-946 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/assembler/sleigh/expr/MaskedLong.java:911\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/assembler/sleigh/expr/MaskedLong.java"},"region":{"startLine":911}}}],"partialFingerprints":{"codehealthFindingId/v1":"34290287d19d19cf926716421f815a3a840d3ec7a45a905b904c0e8f12c64462"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/assembler/sleigh/sem/AssemblyPatternBlock.java:228-234 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/assembler/sleigh/sem/AssemblyPatternBlock.java:260-266 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/assembler/sleigh/sem/AssemblyPatternBlock.java:228\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/assembler/sleigh/sem/AssemblyPatternBlock.java"},"region":{"startLine":228}}}],"partialFingerprints":{"codehealthFindingId/v1":"f3d07c01bc76e5fe1f3f3ad1d8fecd01098d1e18f38ef336f1b7c120b3f0e4a9"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/processors/generic/MemoryBlockDefinition.java:229-235 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/processors/generic/MemoryBlockDefinition.java:240-246 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/processors/generic/MemoryBlockDefinition.java"},"region":{"startLine":229}}}],"partialFingerprints":{"codehealthFindingId/v1":"1aab3658794190aedc9d78464d28978467f58243ec6ef6573e2ae8fbfded5df0"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/processors/sleigh/PcodeEmit.java:256-262 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/processors/sleigh/PcodeEmit.java:351-357 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/processors/sleigh/PcodeEmit.java:256\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/processors/sleigh/PcodeEmit.java"},"region":{"startLine":256}}}],"partialFingerprints":{"codehealthFindingId/v1":"1f922d9aca51f8aa98a942428e5b3ce22ce6a2f4fde964f91f3c6c08656478fa"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/processors/sleigh/PcodeEmit.java:282-288 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/processors/sleigh/PcodeEmit.java:389-395 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/processors/sleigh/PcodeEmit.java"},"region":{"startLine":282}}}],"partialFingerprints":{"codehealthFindingId/v1":"9413f130a78ae0e5d97e10a194106061477e6f183ef136b68eafc6825f8ef515"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/processors/sleigh/PcodeEmit.java:523-529 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/processors/sleigh/PcodeEmit.java:557-563 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Note that the copies do not run to the end of the range shown: their LAST lines are different code, not the same code under different names \u2014 the matched region ends inside that line. Extract the lines above it, and read the last line of each site separately."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/processors/sleigh/PcodeEmit.java"},"region":{"startLine":523}}}],"partialFingerprints":{"codehealthFindingId/v1":"079bc44d757e76e5ea83689cd9daf1a5d4d95d1b88694cb5cddd9776b290c54c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/processors/sleigh/SleighDebugLogger.java:682-688 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/processors/sleigh/SleighDebugLogger.java:734-740 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/processors/sleigh/SleighDebugLogger.java:682\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/processors/sleigh/SleighDebugLogger.java"},"region":{"startLine":682}}}],"partialFingerprints":{"codehealthFindingId/v1":"38f44afb8bff5ae6c7c81f3b89c267a576f8690617b4f5da0051dadb93804971"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/util/sourcelanguage/SourceLanguageService.java:120-126 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/util/sourcelanguage/SourceLanguageService.java:200-206 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/util/sourcelanguage/SourceLanguageService.java:120\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. Note that the copies do not run to the end of the range shown: their LAST lines are different code, not the same code under different names \u2014 the matched region ends inside that line. Extract the lines above it, and read the last line of each site separately."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/util/sourcelanguage/SourceLanguageService.java"},"region":{"startLine":120}}}],"partialFingerprints":{"codehealthFindingId/v1":"5637474c724c2070b729f67d9d0d890ac63a1ed5fcfc1b0789ae7283254d2dab"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slgh_compile/SleighCompile.java:1846-1853 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/sleigh/grammar/SleighParserRun.java:30-36 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slgh_compile/SleighCompile.java"},"region":{"startLine":1846}}}],"partialFingerprints":{"codehealthFindingId/v1":"cdfbcb4991ca76a6b0223f143cc1cfe6f65d60596242240154479b0c7dedc649"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghpattern/PatternBlock.java:254-260 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghpattern/PatternBlock.java:282-289 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghpattern/PatternBlock.java"},"region":{"startLine":254}}}],"partialFingerprints":{"codehealthFindingId/v1":"f7af6807c303560510dc1b3b0d545ce7cf11da143fa823f98304b8bf130f56ce"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/code/ProtoDBAdapterV0.java:105-111 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/code/ProtoDBAdapterV0.java:153-159 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/code/ProtoDBAdapterV0.java:105\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/code/ProtoDBAdapterV0.java"},"region":{"startLine":105}}}],"partialFingerprints":{"codehealthFindingId/v1":"6e1079583706dc70151fd6b9eedc943dc559fc2a50ff273e14473013be5c9fd0"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/DataTypeManagerDB.java:4270-4276 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/DataTypeManagerDB.java:4302-4308 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/DataTypeManagerDB.java:4270\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/DataTypeManagerDB.java"},"region":{"startLine":4270}}}],"partialFingerprints":{"codehealthFindingId/v1":"493f407f35b440747fdef96f59a31d9171bf902cd35333529f862be4ccb1b63a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/function/FunctionDB.java:645-651 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/function/FunctionDB.java:664-670 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/function/FunctionDB.java:645\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. Note that the copies do not run to the end of the range shown: their LAST lines are different code, not the same code under different names \u2014 the matched region ends inside that line. Extract the lines above it, and read the last line of each site separately."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/function/FunctionDB.java"},"region":{"startLine":645}}}],"partialFingerprints":{"codehealthFindingId/v1":"56f20a477fce7aff461ea915cbc52e926bc57a929156503754da87957035830f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/map/AddressMapDB.java:440-447 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/address/AddressMapImpl.java:135-141 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/map/AddressMapDB.java:440\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/map/AddressMapDB.java"},"region":{"startLine":440}}}],"partialFingerprints":{"codehealthFindingId/v1":"8671d7ea8418b93b557f10733bdbd6f8754888d093aa3fbe42cb8fea0a52d0a2"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/module/ModuleDB.java:751-757 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/module/ModuleDB.java:778-784 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/module/ModuleDB.java:751\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/module/ModuleDB.java"},"region":{"startLine":751}}}],"partialFingerprints":{"codehealthFindingId/v1":"12800120745d0b57ad02c84150c4b35326f735592e68ef2fc8c289de66f1b8e2"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/references/RefListV0.java:362-368 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/references/RefListV0.java:406-412 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/references/RefListV0.java:362\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/references/RefListV0.java"},"region":{"startLine":362}}}],"partialFingerprints":{"codehealthFindingId/v1":"bb4ab3319c91ef96df811bef36a7949df5fed93a0c4e736ade4e0bdb9dc22108"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/symbol/SymbolManager.java:1745-1751 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/symbol/SymbolManager.java:1802-1808 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/symbol/SymbolManager.java:1745\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/symbol/SymbolManager.java"},"region":{"startLine":1745}}}],"partialFingerprints":{"codehealthFindingId/v1":"8910b14ef77ec65c730fdcc4a9df6343ab9984ab81df7d3045644b432f84d5a5"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/DataTypeArchiveDBChangeSet.java:335-341 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/ProgramDBChangeSet.java:644-650 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/DataTypeArchiveDBChangeSet.java"},"region":{"startLine":335}}}],"partialFingerprints":{"codehealthFindingId/v1":"c5d952294f0df1b6d5ad4dde0988128f1f707e2196b7f7e1ce18e63bd5443da6"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/correlate/HashStore.java:341-347 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/correlate/HashStore.java:357-363 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/correlate/HashStore.java"},"region":{"startLine":341}}}],"partialFingerprints":{"codehealthFindingId/v1":"3bd4815621508141399244730c9079f8495a82dbcc6ddb20d2b2e88abab80aac"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/lang/InjectPayloadSleigh.java:382-388 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/lang/InjectPayloadSleigh.java:392-398 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/lang/InjectPayloadSleigh.java:382\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/lang/InjectPayloadSleigh.java"},"region":{"startLine":382}}}],"partialFingerprints":{"codehealthFindingId/v1":"e454ebfee76c630cad033c72f0b1345b25525d4dd5ebc0d713b6ac01a38a5f77"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/lang/ProcessorContextView.java:85-91 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/util/InstructionUtils.java:199-205 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/lang/ProcessorContextView.java:85\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. Note that the copies do not run to the end of the range shown: their LAST lines are different code, not the same code under different names \u2014 the matched region ends inside that line. Extract the lines above it, and read the last line of each site separately."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/lang/ProcessorContextView.java"},"region":{"startLine":85}}}],"partialFingerprints":{"codehealthFindingId/v1":"f86874b82d901be1b9b5a45727485aa5a40fe399963e076d5faeb15c567467cc"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/pcode/PcodeBlock.java:254-260 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/pcode/PcodeBlock.java:272-278 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/pcode/PcodeBlock.java"},"region":{"startLine":254}}}],"partialFingerprints":{"codehealthFindingId/v1":"2cea8ad9c3e64e1c9c687f8246758f8d66f1c217b91977d1e4bac3adc190cc2f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/pcode/VarnodeBank.java:44-50 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/pcode/VarnodeBank.java:102-108 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/pcode/VarnodeBank.java:44\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/pcode/VarnodeBank.java"},"region":{"startLine":44}}}],"partialFingerprints":{"codehealthFindingId/v1":"2faf3a1aa2bbf6b4cb7257f670cebb4ccb030a37786dcfb24a1295a98cae12eb"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): Ghidra/Framework/Project/src/main/java/ghidra/framework/main/logviewer/ui/FVSlider.java:338-344 | Ghidra/Framework/Project/src/main/java/ghidra/framework/main/logviewer/ui/FVTable.java:607-613 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/Project/src/main/java/ghidra/framework/main/logviewer/ui/FVSlider.java:338\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. Note that the copies do not run to the end of the range shown: their LAST lines are different code, not the same code under different names \u2014 the matched region ends inside that line. Extract the lines above it, and read the last line of each site separately."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Project/src/main/java/ghidra/framework/main/logviewer/ui/FVSlider.java"},"region":{"startLine":338}}}],"partialFingerprints":{"codehealthFindingId/v1":"37878812e79779f8a7d13a1a5dda2437da8451d3a4e31d0caad6d087aaa9b1d2"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 4): Ghidra/Processors/JVM/src/main/java/ghidra/javaclass/analyzers/JavaAnalyzer.java:337-343 | Ghidra/Processors/JVM/src/main/java/ghidra/javaclass/analyzers/JavaAnalyzer.java:358-363 | Ghidra/Processors/JVM/src/main/java/ghidra/javaclass/analyzers/JavaAnalyzer.java:377-382 | Ghidra/Processors/JVM/src/main/java/ghidra/javaclass/analyzers/JavaAnalyzer.java:387-392 \u2014 all 4 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Processors/JVM/src/main/java/ghidra/javaclass/analyzers/JavaAnalyzer.java:337\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Processors/JVM/src/main/java/ghidra/javaclass/analyzers/JavaAnalyzer.java"},"region":{"startLine":337}}}],"partialFingerprints":{"codehealthFindingId/v1":"fc2c33357eb6fa497ee780862d1d1d48a319e4340dff334b72ca897de091b9b5"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 3): Ghidra/Processors/PIC/src/main/java/ghidra/app/plugin/core/analysis/Pic17c7xxAnalyzer.java:920-925 | Ghidra/Processors/PIC/src/main/java/ghidra/app/plugin/core/analysis/Pic17c7xxAnalyzer.java:1000-1005 | Ghidra/Processors/PIC/src/main/java/ghidra/app/plugin/core/analysis/Pic17c7xxAnalyzer.java:1078-1083 \u2014 all 3 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Processors/PIC/src/main/java/ghidra/app/plugin/core/analysis/Pic17c7xxAnalyzer.java:920\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Processors/PIC/src/main/java/ghidra/app/plugin/core/analysis/Pic17c7xxAnalyzer.java"},"region":{"startLine":920}}}],"partialFingerprints":{"codehealthFindingId/v1":"eb5e9302dd13385eeffce66e0503500b8c9b4721ff3b5ca44ef72784905ac755"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 3): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/code/CommentsDBAdapter.java:123-128 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/code/DataDBAdapter.java:88-93 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/code/InstDBAdapter.java:96-101 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/code/CommentsDBAdapter.java:123\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/code/CommentsDBAdapter.java"},"region":{"startLine":123}}}],"partialFingerprints":{"codehealthFindingId/v1":"8f3a9e7b12c7ce609c738c5672ea49c86b370dd8c2c5b013c8361f90be703647"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 3): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/CountedDynamicDataType.java:97-102 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/RepeatCountDataType.java:65-70 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/StructuredDynamicDataType.java:107-113 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/CountedDynamicDataType.java:97\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. Note that the copies do not run to the end of the range shown: their LAST lines are different code, not the same code under different names \u2014 the matched region ends inside that line. Extract the lines above it, and read the last line of each site separately."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/CountedDynamicDataType.java"},"region":{"startLine":97}}}],"partialFingerprints":{"codehealthFindingId/v1":"dffcf48b5d2b76cb210a295540c7b2da4b77ff7e57acda46a818d0354f378a4e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 3): Ghidra/Framework/Project/src/main/java/ghidra/framework/data/DomainObjectDBTransaction.java:169-174 | Ghidra/Framework/Project/src/main/java/ghidra/framework/data/DomainObjectDBTransaction.java:183-188 | Ghidra/Framework/Project/src/main/java/ghidra/framework/data/DomainObjectDBTransaction.java:234-239 \u2014 all 3 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/Project/src/main/java/ghidra/framework/data/DomainObjectDBTransaction.java:169\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Project/src/main/java/ghidra/framework/data/DomainObjectDBTransaction.java"},"region":{"startLine":169}}}],"partialFingerprints":{"codehealthFindingId/v1":"1991c6872c1ef23100a6f1ea847a93eb0238cc4da3c99bcb4b19a0bb0363a22b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): GhidraBuild/EclipsePlugins/GhidraDev/GhidraDevPlugin/src/main/java/ghidradev/ghidraprojectcreator/utils/GhidraModuleUtils.java:106-111 | GhidraBuild/EclipsePlugins/GhidraDev/GhidraDevPlugin/src/main/java/ghidradev/ghidraprojectcreator/utils/GhidraModuleUtils.java:259-264 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060GhidraBuild/EclipsePlugins/GhidraDev/GhidraDevPlugin/src/main/java/ghidradev/ghidraprojectcreator/utils/GhidraModuleUtils.java:106\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"GhidraBuild/EclipsePlugins/GhidraDev/GhidraDevPlugin/src/main/java/ghidradev/ghidraprojectcreator/utils/GhidraModuleUtils.java"},"region":{"startLine":106}}}],"partialFingerprints":{"codehealthFindingId/v1":"24afb04539bd5836f9d72ffc712ebc90ded0c24502d14ff3d82afca463ecc0e7"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): GhidraBuild/EclipsePlugins/GhidraDev/GhidraDevPlugin/src/main/java/ghidradev/ghidraprojectcreator/wizards/pages/ChooseGhidraModuleProjectWizardPage.java:51-56 | GhidraBuild/EclipsePlugins/GhidraDev/GhidraDevPlugin/src/main/java/ghidradev/ghidraprojectcreator/wizards/pages/ChooseJavaProjectWizardPage.java:51-56 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"GhidraBuild/EclipsePlugins/GhidraDev/GhidraDevPlugin/src/main/java/ghidradev/ghidraprojectcreator/wizards/pages/ChooseGhidraModuleProjectWizardPage.java"},"region":{"startLine":51}}}],"partialFingerprints":{"codehealthFindingId/v1":"4f895b4568702309b673c4317b7d5621af408265d85cdd0324a6a60c40b50d05"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): GhidraBuild/EclipsePlugins/GhidraDev/GhidraDevPlugin/src/main/java/ghidradev/ghidraprojectcreator/wizards/pages/CreateGhidraProjectWizardPage.java:230-236 | GhidraBuild/EclipsePlugins/GhidraDev/GhidraDevPlugin/src/main/java/ghidradev/ghidraprojectcreator/wizards/pages/CreateGhidraScriptWizardPage.java:228-233 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060GhidraBuild/EclipsePlugins/GhidraDev/GhidraDevPlugin/src/main/java/ghidradev/ghidraprojectcreator/wizards/pages/CreateGhidraProjectWizardPage.java:230\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"GhidraBuild/EclipsePlugins/GhidraDev/GhidraDevPlugin/src/main/java/ghidradev/ghidraprojectcreator/wizards/pages/CreateGhidraProjectWizardPage.java"},"region":{"startLine":230}}}],"partialFingerprints":{"codehealthFindingId/v1":"bb24cff6c870699c39a77d4e888af1dd61e918bfe954e3fdcbb40623be233625"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): GhidraBuild/BuildFiles/Doclets/src/main/java/ghidra/doclets/typestubs/DocConverter.java:91-96 | GhidraBuild/BuildFiles/Doclets/src/main/java/ghidra/doclets/typestubs/DocConverter.java:115-120 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060GhidraBuild/BuildFiles/Doclets/src/main/java/ghidra/doclets/typestubs/DocConverter.java:91\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"GhidraBuild/BuildFiles/Doclets/src/main/java/ghidra/doclets/typestubs/DocConverter.java"},"region":{"startLine":91}}}],"partialFingerprints":{"codehealthFindingId/v1":"7ac2792632032dbee494f5b440b924369de58ac649a3b6c3447261efd6fa1e67"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): Ghidra/Processors/x86/src/main/java/ghidra/app/plugin/core/analysis/X86Analyzer.java:58-63 | Ghidra/Processors/PowerPC/src/main/java/ghidra/app/plugin/core/analysis/PowerPCAddressAnalyzer.java:204-210 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Processors/x86/src/main/java/ghidra/app/plugin/core/analysis/X86Analyzer.java:58\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. Note that the copies do not run to the end of the range shown: their LAST lines are different code, not the same code under different names \u2014 the matched region ends inside that line. Extract the lines above it, and read the last line of each site separately."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Processors/x86/src/main/java/ghidra/app/plugin/core/analysis/X86Analyzer.java"},"region":{"startLine":58}}}],"partialFingerprints":{"codehealthFindingId/v1":"43302e5ff78fb5c31b61a4083b65982da734fb7c428d14d7f74d974442e7dd94"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): Ghidra/Processors/PIC/src/main/java/ghidra/app/plugin/core/analysis/Pic12Analyzer.java:529-534 | Ghidra/Processors/PIC/src/main/java/ghidra/app/plugin/core/analysis/Pic17c7xxAnalyzer.java:818-823 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Processors/PIC/src/main/java/ghidra/app/plugin/core/analysis/Pic12Analyzer.java:529\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Processors/PIC/src/main/java/ghidra/app/plugin/core/analysis/Pic12Analyzer.java"},"region":{"startLine":529}}}],"partialFingerprints":{"codehealthFindingId/v1":"4525453569039b05ff20b7aa508651cebd80816c966bef426b9ce3c520dd9f46"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): Ghidra/Processors/PIC/src/main/java/ghidra/app/plugin/core/analysis/Pic17c7xxAnalyzer.java:819-824 | Ghidra/Processors/PIC/src/main/java/ghidra/app/plugin/core/analysis/Pic17c7xxAnalyzer.java:838-843 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Processors/PIC/src/main/java/ghidra/app/plugin/core/analysis/Pic17c7xxAnalyzer.java:819\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Processors/PIC/src/main/java/ghidra/app/plugin/core/analysis/Pic17c7xxAnalyzer.java"},"region":{"startLine":819}}}],"partialFingerprints":{"codehealthFindingId/v1":"26fd9634b87ef13974c196c5b4230cc725eae74a734328ece79a8c3c05c5a5f7"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): Ghidra/Processors/Dalvik/src/main/java/ghidra/dalvik/dex/inject/InjectPayloadDexParameters.java:142-147 | Ghidra/Processors/Dalvik/src/main/java/ghidra/dalvik/dex/inject/InjectPayloadDexRange.java:53-58 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Processors/Dalvik/src/main/java/ghidra/dalvik/dex/inject/InjectPayloadDexParameters.java"},"region":{"startLine":142}}}],"partialFingerprints":{"codehealthFindingId/v1":"ef0b9b59db6f342df37e0f1d89e4a1293dc5936bc5766992fba19fc7456e828c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/assembler/sleigh/sem/AssemblyPatternBlock.java:184-189 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/assembler/sleigh/sem/AssemblyPatternBlock.java:193-198 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/assembler/sleigh/sem/AssemblyPatternBlock.java:184\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/assembler/sleigh/sem/AssemblyPatternBlock.java"},"region":{"startLine":184}}}],"partialFingerprints":{"codehealthFindingId/v1":"65ae64c8c852344ebc36a9ded22d637110407e06b6e8d060f0a71cf34c99364a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/processors/sleigh/Constructor.java:325-330 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/processors/sleigh/DecisionNode.java:230-236 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/processors/sleigh/Constructor.java:325\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/processors/sleigh/Constructor.java"},"region":{"startLine":325}}}],"partialFingerprints":{"codehealthFindingId/v1":"6fafecd9ff7f50e5bcec0498cd1a1a0cb146e2a6ad8291f27dc4767c651317d7"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/processors/sleigh/SleighInstructionPrototype.java:618-623 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/processors/sleigh/SleighInstructionPrototype.java:675-680 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/processors/sleigh/SleighInstructionPrototype.java"},"region":{"startLine":618}}}],"partialFingerprints":{"codehealthFindingId/v1":"0403f994e40aa97b9120736940d9c010f11fb5f0eef8c80facc1f754334bcfd2"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/processors/sleigh/SleighLanguage.java:658-663 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/processors/sleigh/SleighLanguage.java:716-721 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/processors/sleigh/SleighLanguage.java:658\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/processors/sleigh/SleighLanguage.java"},"region":{"startLine":658}}}],"partialFingerprints":{"codehealthFindingId/v1":"a273407e43065f98f8f9b8152a922b59e5db6292e82db40eea6a7e692c1d4c95"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slgh_compile/ConsistencyChecker.java:1347-1352 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slgh_compile/ConsistencyChecker.java:1373-1378 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slgh_compile/ConsistencyChecker.java:1347\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slgh_compile/ConsistencyChecker.java"},"region":{"startLine":1347}}}],"partialFingerprints":{"codehealthFindingId/v1":"2db4ac8d4a876cc97f510179082b3071b29077f5c6e68cbcfa0af230f2fbb595"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slgh_compile/PcodeCompile.java:153-158 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slgh_compile/PcodeCompile.java:166-171 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slgh_compile/PcodeCompile.java:153\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slgh_compile/PcodeCompile.java"},"region":{"startLine":153}}}],"partialFingerprints":{"codehealthFindingId/v1":"7e644a5d8cd85fd0cf92172e61c5d66e5c55cbed22e9b2d9efca1fff22462e4c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghpatexpress/TokenPattern.java:93-98 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghpatexpress/TokenPattern.java:100-105 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghpatexpress/TokenPattern.java:93\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghpatexpress/TokenPattern.java"},"region":{"startLine":93}}}],"partialFingerprints":{"codehealthFindingId/v1":"607d82384f67d251105b6306e87cf9cbb187b76ccbc85d0e64af4ce83a635ae1"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghpattern/PatternBlock.java:307-312 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghpattern/PatternBlock.java:337-342 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghpattern/PatternBlock.java:307\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghpattern/PatternBlock.java"},"region":{"startLine":307}}}],"partialFingerprints":{"codehealthFindingId/v1":"f48a64533e43814761c3b1b367ae061096e428a7464602cd9583b1c7fb911bb7"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/EnumDB.java:698-703 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/EnumDataType.java:551-556 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/EnumDB.java:698\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/EnumDB.java"},"region":{"startLine":698}}}],"partialFingerprints":{"codehealthFindingId/v1":"ae5159f0b3898632650e47fcf65e7e6c8dead48976626b638ed66e7013682910"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/UnionDB.java:802-807 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/UnionDataType.java:539-544 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/UnionDB.java:802\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. Note that the copies do not run to the end of the range shown: their LAST lines are different code, not the same code under different names \u2014 the matched region ends inside that line. Extract the lines above it, and read the last line of each site separately."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/UnionDB.java"},"region":{"startLine":802}}}],"partialFingerprints":{"codehealthFindingId/v1":"0007eb159e7b61ddee48dbd3de4e07adf7a82666ba98440df161465959d97f8e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/module/ModuleManager.java:540-545 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/module/ModuleManager.java:561-566 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/module/ModuleManager.java:540\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. Note that the copies do not run to the end of the range shown: their LAST lines are different code, not the same code under different names \u2014 the matched region ends inside that line. Extract the lines above it, and read the last line of each site separately."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/module/ModuleManager.java"},"region":{"startLine":540}}}],"partialFingerprints":{"codehealthFindingId/v1":"b5895a3dde9a02cb45d23a1c15edbd131cbb176f243d91bd3098b02c816860f5"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/references/RefListV0.java:413-418 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/references/RefListV0.java:469-474 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/references/RefListV0.java:413\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/references/RefListV0.java"},"region":{"startLine":413}}}],"partialFingerprints":{"codehealthFindingId/v1":"3bb77e27c7b4220f7885fced1b0edb8ca560403d087be085ed160f8b14c3cf31"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/ProgramUserDataDB.java:349-354 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/ProgramUserDataDB.java:462-467 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/ProgramUserDataDB.java"},"region":{"startLine":349}}}],"partialFingerprints":{"codehealthFindingId/v1":"fd3b35e9f6a2ad7869a0276ff1f3b286efe78b38955f1be44b4edec731478de4"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/correlate/HashedFunctionAddressCorrelation.java:330-335 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/correlate/HashedFunctionAddressCorrelation.java:341-346 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/correlate/HashedFunctionAddressCorrelation.java:330\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/correlate/HashedFunctionAddressCorrelation.java"},"region":{"startLine":330}}}],"partialFingerprints":{"codehealthFindingId/v1":"b68f95102fb6dd744c760487257a67baf0dc5b725d45e0b581b7e7add81c4362"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/AbstractIntegerDataType.java:546-551 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/AbstractIntegerDataType.java:618-623 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/AbstractIntegerDataType.java:546\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/AbstractIntegerDataType.java"},"region":{"startLine":546}}}],"partialFingerprints":{"codehealthFindingId/v1":"1c37a1d355d4e45cf06726746f616ab2acf1fd9d6b166414c66319eebee78871"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/DialogResourceDataType.java:300-305 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/DialogResourceDataType.java:313-318 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/DialogResourceDataType.java:300\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/DialogResourceDataType.java"},"region":{"startLine":300}}}],"partialFingerprints":{"codehealthFindingId/v1":"df5315ec22968bcef26c7a271e956cfbad67e2405409f0b537e81f664ab35be8"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/DialogResourceDataType.java:327-332 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/DialogResourceDataType.java:340-345 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/DialogResourceDataType.java:327\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/DialogResourceDataType.java"},"region":{"startLine":327}}}],"partialFingerprints":{"codehealthFindingId/v1":"174f7a85649d14bf99f78d2079fd4fd9c0505f354073f523c53273d3cf795434"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/DialogResourceDataType.java:355-360 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/MenuResourceDataType.java:186-191 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/DialogResourceDataType.java:355\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/DialogResourceDataType.java"},"region":{"startLine":355}}}],"partialFingerprints":{"codehealthFindingId/v1":"694300ab40cd7f1d9cd330c4bae33315fbe39bd64998a0b709cefb6df386f6cb"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/StructureDataType.java:1408-1413 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/UnionDataType.java:536-541 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/StructureDataType.java:1408\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/StructureDataType.java"},"region":{"startLine":1408}}}],"partialFingerprints":{"codehealthFindingId/v1":"7c69ed896e206c6d410ca8d5d22c1c79fece2312cb2c25f1ecc9468ca15506b9"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/listing/VariableImpl.java:567-572 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/listing/VariableUtilities.java:408-413 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/listing/VariableImpl.java:567\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. Note that the copies do not run to the end of the range shown: their LAST lines are different code, not the same code under different names \u2014 the matched region ends inside that line. Extract the lines above it, and read the last line of each site separately."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/listing/VariableImpl.java"},"region":{"startLine":567}}}],"partialFingerprints":{"codehealthFindingId/v1":"99884b5a45e9b72b9c1ed87f84e68aaccadca795f785c250b2667d7d47050955"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/listing/VariableImpl.java:599-604 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/listing/VariableUtilities.java:442-447 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/listing/VariableImpl.java"},"region":{"startLine":599}}}],"partialFingerprints":{"codehealthFindingId/v1":"a50226997762aad475fb245830ba5dcb0334e60b6e905a03bbfdea7b693c2caf"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/pcode/BlockGoto.java:67-72 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/pcode/BlockIfGoto.java:70-75 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/pcode/BlockGoto.java"},"region":{"startLine":67}}}],"partialFingerprints":{"codehealthFindingId/v1":"f3d8b0ee549f83c1f20c1466ccc4ffa8db5df6f57ce6e6cf6a90c1d1f664e53b"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/util/OldLanguage.java:242-247 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/util/SimpleLanguageTranslator.java:297-302 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/util/OldLanguage.java:242\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. Note that the copies do not run to the end of the range shown: their LAST lines are different code, not the same code under different names \u2014 the matched region ends inside that line. Extract the lines above it, and read the last line of each site separately."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/util/OldLanguage.java"},"region":{"startLine":242}}}],"partialFingerprints":{"codehealthFindingId/v1":"f2ad44923491f45e7fb972e7aae163d41aba056ac8b6206ba49d361e730db012"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): Ghidra/Framework/Pty/src/main/java/ghidra/pty/ShellUtils.java:188-193 | Ghidra/Framework/Pty/src/main/java/ghidra/pty/ShellUtils.java:291-301 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/Pty/src/main/java/ghidra/pty/ShellUtils.java:188\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. Note that the copies do not run to the end of the range shown: their LAST lines are different code, not the same code under different names \u2014 the matched region ends inside that line. Extract the lines above it, and read the last line of each site separately."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Pty/src/main/java/ghidra/pty/ShellUtils.java"},"region":{"startLine":188}}}],"partialFingerprints":{"codehealthFindingId/v1":"467b229b526fe390edb0fce3921effc922c2db7e8ae8a3a86fc6dd7520f202de"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 3): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/address/AddressSet.java:1049-1053 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/address/AddressSet.java:1062-1066 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/address/AddressSet.java:1069-1073 \u2014 all 3 copies are in the same file, so extract the block into one function there and call it from every one of those sites \u2014 resolving only two of them leaves the rest to drift apart the first time one is edited. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/address/AddressSet.java"},"region":{"startLine":1049}}}],"partialFingerprints":{"codehealthFindingId/v1":"68a55fe2f753568ed55b3b717d307d278b0c351a6cc08005c24dafb02e3da6db"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 3): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/RGB16ColorDataType.java:150-154 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/RGB32ColorDataType.java:148-152 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/RGB32ColorDataType.java:155-159 \u2014 there are 3 copies across 2 file(s) \u2014 more copies than files, so at least one file holds the block twice. Extract it once into a single shared function every call site can reach and call it from all 3 sites; resolving a subset leaves the remainder to drift apart. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/RGB16ColorDataType.java:150\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/RGB16ColorDataType.java"},"region":{"startLine":150}}}],"partialFingerprints":{"codehealthFindingId/v1":"7c42d32ae6359d5e9b01c1161230b19de58aa13eb1dcefee0d67b161032f4fcf"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): GhidraBuild/LaunchSupport/src/main/java/ghidra/launch/JavaFinder.java:99-105 | GhidraBuild/LaunchSupport/src/main/java/ghidra/launch/JavaFinder.java:149-153 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060GhidraBuild/LaunchSupport/src/main/java/ghidra/launch/JavaFinder.java:99\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"GhidraBuild/LaunchSupport/src/main/java/ghidra/launch/JavaFinder.java"},"region":{"startLine":99}}}],"partialFingerprints":{"codehealthFindingId/v1":"00d920d320e44e0faf7aaf1c7cbca53c30dbcacbd8cce73c0b75c0e13d547391"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): Ghidra/Processors/tricore/src/main/java/ghidra/program/emulation/TRICOREEmulateInstructionStateModifier.java:57-61 | Ghidra/Processors/tricore/src/main/java/ghidra/program/emulation/TRICOREEmulateInstructionStateModifier.java:116-120 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Processors/tricore/src/main/java/ghidra/program/emulation/TRICOREEmulateInstructionStateModifier.java"},"region":{"startLine":57}}}],"partialFingerprints":{"codehealthFindingId/v1":"fb7b0b4ec3804f2d81f85d226cc88502dcaaa47360dbe842773e5f7ac27c0338"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): Ghidra/Processors/PowerPC/src/main/java/ghidra/app/plugin/core/analysis/PowerPCAddressAnalyzer.java:225-230 | Ghidra/Processors/ARM/src/main/java/ghidra/app/plugin/core/analysis/ArmAnalyzer.java:179-183 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Processors/PowerPC/src/main/java/ghidra/app/plugin/core/analysis/PowerPCAddressAnalyzer.java:225\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Processors/PowerPC/src/main/java/ghidra/app/plugin/core/analysis/PowerPCAddressAnalyzer.java"},"region":{"startLine":225}}}],"partialFingerprints":{"codehealthFindingId/v1":"f0723449e3a9dc9274d454aeed7a9b62e2f9dfd7ef7b3f31657030561ce4903d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): Ghidra/Processors/PIC/src/main/java/ghidra/app/plugin/core/analysis/Pic17c7xxAnalyzer.java:750-754 | Ghidra/Processors/PIC/src/main/java/ghidra/app/plugin/core/analysis/Pic17c7xxAnalyzer.java:764-768 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Processors/PIC/src/main/java/ghidra/app/plugin/core/analysis/Pic17c7xxAnalyzer.java:750\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Processors/PIC/src/main/java/ghidra/app/plugin/core/analysis/Pic17c7xxAnalyzer.java"},"region":{"startLine":750}}}],"partialFingerprints":{"codehealthFindingId/v1":"9859b1c6d90e01d0ff12692a968b63b49d52b2550f6fc1a55229a5ebe9438657"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): Ghidra/Processors/JVM/src/main/java/ghidra/javaclass/format/attributes/AnnotationElementValue.java:77-81 | Ghidra/Processors/JVM/src/main/java/ghidra/javaclass/format/attributes/AnnotationElementValue.java:215-219 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Processors/JVM/src/main/java/ghidra/javaclass/format/attributes/AnnotationElementValue.java:77\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Processors/JVM/src/main/java/ghidra/javaclass/format/attributes/AnnotationElementValue.java"},"region":{"startLine":77}}}],"partialFingerprints":{"codehealthFindingId/v1":"902001f9a17c0f2feab3c214fb6d0bde13e6bab8fe256111fde974058743cc60"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/map/AddressMapDB.java:216-220 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/address/AddressMapImpl.java:72-76 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/map/AddressMapDB.java:216\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/map/AddressMapDB.java"},"region":{"startLine":216}}}],"partialFingerprints":{"codehealthFindingId/v1":"be011f19ff0d3bf5d78a9730bd1d20068c24ed7addab29e93377e3234e0ebca8"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/references/BigRefListV0.java:386-390 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/references/BigRefListV0.java:408-412 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/references/BigRefListV0.java:386\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/references/BigRefListV0.java"},"region":{"startLine":386}}}],"partialFingerprints":{"codehealthFindingId/v1":"701f6b1641f74edd6b6e4c95dfa554a13d9c775055c6aea4b9723b476330f59d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/correlate/HashStore.java:223-227 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/correlate/HashStore.java:302-306 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/correlate/HashStore.java:223\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/correlate/HashStore.java"},"region":{"startLine":223}}}],"partialFingerprints":{"codehealthFindingId/v1":"e085901e2ac55adbfed3fde03fdce9df6c72a27c0ae349f3f0a2bc664a4823bd"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/RGB16ColorDataType.java:106-110 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/RGB16ColorDataType.java:113-117 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/RGB16ColorDataType.java:106\u0060 it begins part-way through the construct above it, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/RGB16ColorDataType.java"},"region":{"startLine":106}}}],"partialFingerprints":{"codehealthFindingId/v1":"7a0493532289b815960aee23a32d7d75abaf2d32a887faa85058d769380bc31c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/lang/protorules/ExtraStack.java:149-153 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/lang/protorules/SizeRestrictedFilter.java:170-174 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/lang/protorules/ExtraStack.java:149\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/lang/protorules/ExtraStack.java"},"region":{"startLine":149}}}],"partialFingerprints":{"codehealthFindingId/v1":"29ec6780505e9ebb933883dd677b2b489699026b84306f59a643bc65e6026c9d"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/lang/protorules/HomogeneousAggregate.java:118-122 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/lang/ParamEntry.java:553-557 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/lang/protorules/HomogeneousAggregate.java:118\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/lang/protorules/HomogeneousAggregate.java"},"region":{"startLine":118}}}],"partialFingerprints":{"codehealthFindingId/v1":"5e807fecf811fc0fc557ba387d23721a101cb24e872e35a5ee2409fc5ee80fed"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/util/SimpleDiffUtility.java:80-84 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/util/SimpleDiffUtility.java:245-249 \u2014 both copies are in the same file, so extract the block into one function there and call it from each site \u2014 the copies drift apart the first time only one of them is edited. Read the line range as the matched WINDOW rather than a finished unit: at \u0060Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/util/SimpleDiffUtility.java:80\u0060 it does not close everything it opens, so those exact lines cannot be lifted as they stand \u2014 widen the region to the smallest complete statement or declaration that contains it, and extract that."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/util/SimpleDiffUtility.java"},"region":{"startLine":80}}}],"partialFingerprints":{"codehealthFindingId/v1":"21e1b2136d9841b0f2e1f39db5f6cfc605a774d759d08b599329e160070b8c21"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (5 lines \u00D7 2): Ghidra/Framework/Project/src/main/java/ghidra/framework/main/logviewer/ui/FVSlider.java:327-331 | Ghidra/Framework/Project/src/main/java/ghidra/framework/main/logviewer/ui/FVTable.java:596-600 \u2014 the copies sit in sibling files of one directory: extract the block into a single shared function in that directory and call it from each site, so a change lands once."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Project/src/main/java/ghidra/framework/main/logviewer/ui/FVSlider.java"},"region":{"startLine":327}}}],"partialFingerprints":{"codehealthFindingId/v1":"85cb0e8aa89f33d9c9cd545393be0c7dcc69510155438de5656de6283280d158"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (18 lines \u00D7 2): Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/references/EntryPointReferenceDB.java:35-52 | Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/symbol/MemReferenceImpl.java:141-162 \u2014 the copies span different directories, so extracting a shared function means choosing where it lives: put it somewhere both call sites can already reach \u2014 a location they all depend on today, or a new shared one if there is none \u2014 and call it from each site; until then, every change has to be made twice. The matched lines also transfer control out of the body holding them, which cannot survive a move into a called unit unchanged: have the extracted unit return that decision and let each site act on it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/references/EntryPointReferenceDB.java"},"region":{"startLine":35}}}],"partialFingerprints":{"codehealthFindingId/v1":"8baf232950f15f8beca91e1e4f1ac04c1b03a86bd24a2cd0eea6fb87e662026e"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: Ghidra/Features/GhidraServer/src/main/java/ghidra/server/remote/GhidraServer.java: Ghidra/Features/GhidraServer/src/main/java/ghidra/server/remote/GhidraServer.java changed 5 times in last 90 days, max complexity 78. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, behind tests written first."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/GhidraServer/src/main/java/ghidra/server/remote/GhidraServer.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"21f5750a49830a0a44e205df6dde0e8cd398f31c8dbf82cd79bf75ca29eef630"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: Ghidra/Framework/Generic/src/main/java/ghidra/framework/options/GProperties.java: Ghidra/Framework/Generic/src/main/java/ghidra/framework/options/GProperties.java changed 2 times in last 90 days, max complexity 47. 1 of those changes was a fix/bug commit, so the churn is repair rather than feature work. Before the next change lands here, cover the area it touches with tests, then split that area out of the file so the following change is smaller than this one \u2014 a file this often edited pays the complexity back every time."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Generic/src/main/java/ghidra/framework/options/GProperties.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"170a872bae3e29256488319c62d4ed2d1e5e5bef436cf36453b7b3ccabd1fe7e"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: Ghidra/Features/GhidraServer/src/main/java/ghidra/server/ServerAdmin.java: Ghidra/Features/GhidraServer/src/main/java/ghidra/server/ServerAdmin.java changed 2 times in last 90 days, max complexity 39. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, behind tests written first."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/GhidraServer/src/main/java/ghidra/server/ServerAdmin.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"54b8c87cb5e660d221160ee4be55953a1234b6bab6f764c11c6fdbb3c1fe3c79"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: GhidraBuild/BuildFiles/Doclets/src/main/java/ghidra/doclets/typestubs/JavadocConverter.java: GhidraBuild/BuildFiles/Doclets/src/main/java/ghidra/doclets/typestubs/JavadocConverter.java changed 2 times in last 90 days, max complexity 39. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, behind tests written first."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"GhidraBuild/BuildFiles/Doclets/src/main/java/ghidra/doclets/typestubs/JavadocConverter.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"ff3128ba1a48b8c8daa279605925522852ec58ff769f43fafc89d4f1dec1ff86"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/PointerDataType.java: Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/PointerDataType.java changed 2 times in last 90 days, max complexity 35. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, behind tests written first."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/PointerDataType.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"2ac35cd6fb4257441644c63245e118a64b27ecaa8c83ae41f42cbf999ceae630"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: Ghidra/Framework/FileSystem/src/main/java/ghidra/framework/remote/GhidraObjectInputFilter.java: Ghidra/Framework/FileSystem/src/main/java/ghidra/framework/remote/GhidraObjectInputFilter.java changed 3 times in last 90 days, max complexity 17. 2 of those changes were fix/bug commits, so the churn is repair rather than feature work. Before the next change lands here, cover the area it touches with tests, then split that area out of the file so the following change is smaller than this one \u2014 a file this often edited pays the complexity back every time."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/FileSystem/src/main/java/ghidra/framework/remote/GhidraObjectInputFilter.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"648b4753f9efa617818250dc02c57bc895e354a6775350d32320038bd53cc957"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: Ghidra/Features/Decompiler/src/main/java/ghidra/app/plugin/core/decompile/actions/ForceUnionAction.java: Ghidra/Features/Decompiler/src/main/java/ghidra/app/plugin/core/decompile/actions/ForceUnionAction.java changed 3 times in last 90 days, max complexity 17. 2 of those changes were fix/bug commits, so the churn is repair rather than feature work. Before the next change lands here, cover the area it touches with tests, then split that area out of the file so the following change is smaller than this one \u2014 a file this often edited pays the complexity back every time."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/Decompiler/src/main/java/ghidra/app/plugin/core/decompile/actions/ForceUnionAction.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"72e099c5634e5ceb1e7a4f7061efdf0e66d81ffe5999b5322a46fa16abf8caac"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: Ghidra/Framework/Pty/src/main/java/ghidra/pty/ShellUtils.java: Ghidra/Framework/Pty/src/main/java/ghidra/pty/ShellUtils.java changed 2 times in last 90 days, max complexity 23. 1 of those changes was a fix/bug commit, so the churn is repair rather than feature work. Before the next change lands here, cover the area it touches with tests, then split that area out of the file so the following change is smaller than this one \u2014 a file this often edited pays the complexity back every time."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Pty/src/main/java/ghidra/pty/ShellUtils.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"aeb6cd0bca94b23bd9d97d1e6f32dbc2c34c03cc1cc501f6649060a4525206aa"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/DataTypeWriter.java: Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/DataTypeWriter.java changed 2 times in last 90 days, max complexity 23. 2 of those changes were fix/bug commits, so the churn is repair rather than feature work. Before the next change lands here, cover the area it touches with tests, then split that area out of the file so the following change is smaller than this one \u2014 a file this often edited pays the complexity back every time."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/DataTypeWriter.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"b12eaf809b63873c559003fd984a6a04098c69096e913ce57a0479506ab8491e"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/symbol/SymbolDB.java: Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/symbol/SymbolDB.java changed 2 times in last 90 days, max complexity 22. 1 of those changes was a fix/bug commit, so the churn is repair rather than feature work. Before the next change lands here, cover the area it touches with tests, then split that area out of the file so the following change is smaller than this one \u2014 a file this often edited pays the complexity back every time."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/symbol/SymbolDB.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"f544aa56f4a5e330ba3a8ff7264ba4f17ff8b7f5865cd5a37ec152bc633f8589"}},{"ruleId":"D16","level":"note","message":{"text":"Off-boarding risk: anonymized user #1: If anonymized user #1 becomes unavailable, 104 significant file(s) lose their only recent owner: Ghidra/Framework/Docking/src/main/java/docking/DockingWindowManager.java, Ghidra/Features/GnuDemangler/src/main/java/ghidra/app/util/demangler/gnu/GnuDemanglerParser.java, Ghidra/Framework/Docking/src/main/java/docking/widgets/tree/GTree.java, Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/references/ReferenceDBManager.java, Ghidra/Framework/Docking/src/main/java/docking/widgets/table/GTable.java, Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/navigation/locationreferences/ReferenceUtils.java, Ghidra/Features/FunctionGraph/src/main/java/ghidra/app/plugin/core/functiongraph/FGProvider.java, Ghidra/Framework/Docking/src/main/java/docking/widgets/DropDownTextField.java (\u002B96 more). Pair on, review, or document these before any departure."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"eddc2401ba92994a91cf3ebe9c8a3b05c89ccf554b57f7dc07de01cce0ab6814"}},{"ruleId":"D16","level":"note","message":{"text":"Off-boarding risk: anonymized user #2: If anonymized user #2 becomes unavailable, 75 significant file(s) lose their only recent owner: Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/gui/DebuggerResources.java, Ghidra/Debug/Debugger-rmi-trace/src/main/py/src/ghidratrace/client.py, Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/gen/util/Methods.java, Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/gui/breakpoint/DebuggerBreakpointsProvider.java, Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/service/breakpoint/DebuggerLogicalBreakpointServicePlugin.java, Ghidra/Debug/Debugger-rmi-trace/src/main/java/ghidra/app/plugin/core/debug/service/tracermi/TraceRmiHandler.java, Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/gui/register/DebuggerRegistersProvider.java, Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/service/tracemgr/DebuggerTraceManagerServicePlugin.java (\u002B67 more). Pair on, review, or document these before any departure."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"3125918263dae11bc3c159cfcbaef49ea956c02fe3c2f99f70cb86051828a130"}},{"ruleId":"D16","level":"note","message":{"text":"Off-boarding risk: anonymized user #3: If anonymized user #3 becomes unavailable, 43 significant file(s) lose their only recent owner: Ghidra/Framework/Project/src/main/java/ghidra/framework/data/GhidraFileData.java, Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/StructureDB.java, Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/StructureDataType.java, Ghidra/Framework/FileSystem/src/main/java/ghidra/framework/store/local/IndexedLocalFileSystem.java, Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/stackeditor/StackFrameDataType.java, Ghidra/Framework/DB/src/main/java/db/buffers/LocalBufferFile.java, Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/compositeeditor/StructureEditorModel.java, Ghidra/Framework/Project/src/main/java/ghidra/framework/protocol/ghidra/GhidraURL.java (\u002B35 more). Pair on, review, or document these before any departure."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"762f26d763d963afc819451ebf13978fb48dfd450dcf17c7d826a3e192ce4387"}},{"ruleId":"D16","level":"note","message":{"text":"Off-boarding risk: anonymized user #4: If anonymized user #4 becomes unavailable, 38 significant file(s) lose their only recent owner: Ghidra/Features/Base/src/main/java/ghidra/app/util/opinion/MachoProgramBuilder.java, Ghidra/Framework/Utility/src/main/java/utilities/util/FileUtilities.java, Ghidra/Features/PyGhidra/src/main/py/src/pyghidra/launcher.py, Ghidra/Features/Base/src/main/java/ghidra/base/project/GhidraProject.java, Ghidra/Features/Base/src/main/java/ghidra/app/util/opinion/MachoLoader.java, GhidraBuild/BuildFiles/Doclets/src/main/java/ghidra/doclets/typestubs/JavadocConverter.java, Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/vscode/VSCodeIntegrationPlugin.java, Ghidra/Features/Base/src/main/java/ghidra/app/util/opinion/DyldCacheProgramBuilder.java (\u002B30 more). Pair on, review, or document these before any departure."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"2e7f441b8c319e115a5ca75d7ca6d44fc8a791b1e9a668ae4e6c5d734f7b37b2"}},{"ruleId":"D16","level":"note","message":{"text":"Off-boarding risk: anonymized user #5: If anonymized user #5 becomes unavailable, 21 significant file(s) lose their only recent owner: Ghidra/Features/PDB/src/main/java/ghidra/app/util/pdb/pdbapplicator/CppCompositeType.java, Ghidra/Features/PDB/src/main/java/ghidra/app/util/pdb/pdbapplicator/DefaultPdbApplicator.java, Ghidra/Features/MicrosoftDemangler/src/main/java/ghidra/app/util/demangler/microsoft/MicrosoftDemanglerUtil.java, Ghidra/Features/PDB/src/main/java/ghidra/app/util/pdb/classtype/MsVxtManager.java, Ghidra/Features/PDB/src/main/java/ghidra/app/util/pdb/pdbapplicator/CompositeTypeApplier.java, Ghidra/Features/MicrosoftDmang/src/main/java/mdemangler/naming/MDSpecialName.java, Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/gclass/ClassUtils.java, Ghidra/Features/PDB/src/main/java/ghidra/app/util/pdb/pdbapplicator/PdbSourceLinesApplicator.java (\u002B13 more). Pair on, review, or document these before any departure."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"195c0f1ceb1ba19e4167739f2c419c0edde860282b29f4e45d85d302b6903133"}},{"ruleId":"D16","level":"note","message":{"text":"Off-boarding risk: anonymized user #6: If anonymized user #6 becomes unavailable, 14 significant file(s) lose their only recent owner: Ghidra/Features/Base/src/main/java/ghidra/formats/gfilesystem/FileSystemService.java, Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/ext4/Ext4SuperBlock.java, Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/sevenzip/SevenZipFileSystem.java, Ghidra/Features/Base/src/main/java/ghidra/plugins/fsbrowser/FSBComponentProvider.java, Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/processors/sleigh/SleighLanguageFile.java, Ghidra/Features/Base/src/main/java/ghidra/app/plugin/exceptionhandlers/gcc/GccExceptionAnalyzer.java, Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/analysis/GolangStringAnalyzer.java, Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/strings/EncodedStringsTableModel.java (\u002B6 more). Pair on, review, or document these before any departure."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"767f9a0f368e2945d4531a20564013068830dd006ec55dd4a47d30e98d54eb4e"}},{"ruleId":"D16","level":"note","message":{"text":"Off-boarding risk: anonymized user #7: If anonymized user #7 becomes unavailable, 11 significant file(s) lose their only recent owner: Ghidra/Debug/Debugger-agent-dbgeng/src/main/py/src/ghidradbg/util.py, Ghidra/Debug/Debugger-agent-lldb/src/main/py/src/ghidralldb/hooks.py, Ghidra/Debug/Debugger-agent-x64dbg/src/main/py/src/ghidraxdbg/methods.py, Ghidra/Debug/Debugger-agent-dbgeng/src/main/py/src/ghidradbg/hooks.py, Ghidra/Extensions/Lisa/src/main/java/ghidra/lisa/pcode/analyses/PcodeInterval.java, Ghidra/Features/Sarif/src/main/java/sarif/SarifUtils.java, Ghidra/Debug/Debugger-agent-x64dbg/src/main/py/src/ghidraxdbg/hooks.py, Ghidra/Features/DecompilerDependent/src/main/java/ghidra/app/plugin/core/decompiler/taint/sarif/SarifTaintResultHandler.java (\u002B3 more). Pair on, review, or document these before any departure."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"4bab19781d7db56126196fd7050d59c509657cbd854f1275af11247248c163bd"}},{"ruleId":"D16","level":"note","message":{"text":"Off-boarding risk: anonymized user #8: If anonymized user #8 becomes unavailable, 10 significant file(s) lose their only recent owner: Ghidra/Features/Base/src/main/java/ghidra/app/util/viewer/listingpanel/ProgramBigListingModel.java, Ghidra/Framework/Docking/src/main/java/docking/widgets/fieldpanel/AccessibleFieldPanelDelegate.java, Ghidra/Framework/Docking/src/main/java/docking/widgets/textfield/integer/AbstractIntegerTextField.java, Ghidra/Framework/Docking/src/main/java/docking/actions/dialog/ActionChooserDialog.java, Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/searchtext/databasesearcher/ProgramDatabaseSearcher.java, Ghidra/Framework/Docking/src/main/java/docking/widgets/searchlist/SearchList.java, Ghidra/Framework/Docking/src/main/java/docking/menu/MenuManager.java, Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/bookmark/BookmarkTableModel.java (\u002B2 more). Pair on, review, or document these before any departure."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"e462b221db15b32af9ec29dc298abe5ce0a11027d62f6bc25a407dcddfcf08bd"}},{"ruleId":"D16","level":"note","message":{"text":"Off-boarding risk: anonymized user #9: If anonymized user #9 becomes unavailable, 7 significant file(s) lose their only recent owner: Ghidra/Features/Decompiler/ghidra_scripts/classrecovery/RTTIGccClassRecoverer.java, Ghidra/Features/Decompiler/ghidra_scripts/classrecovery/RTTIWindowsClassRecoverer.java, Ghidra/Features/Decompiler/ghidra_scripts/classrecovery/ExtendedFlatProgramAPI.java, Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/analysis/MingwRelocationAnalyzer.java, Ghidra/Features/Decompiler/ghidra_scripts/classrecovery/RecoveredClass.java, Ghidra/Features/Decompiler/ghidra_scripts/classrecovery/Vtable.java, Ghidra/Features/Decompiler/ghidra_scripts/AddVfunctionCallRefScript.java. Pair on, review, or document these before any departure."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"ce1918b07ebdea7e89bc8cfd96589c55588adf37a351b765d827bea242d3de59"}},{"ruleId":"D16","level":"note","message":{"text":"Off-boarding risk: anonymized user #10: If anonymized user #10 becomes unavailable, 6 significant file(s) lose their only recent owner: Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/gui/tracecalltree/TraceCallTreeProvider.java, Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/gui/breakpoint/timeline/BreakpointTimelineActions.java, Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/gui/breakpoint/timeline/BreakpointTimelineProvider.java, Ghidra/Framework/Docking/src/main/java/docking/widgets/gtreetable/GTreeTableNode.java, Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/gui/timeoverview/breakpoint/BreakpointTimeOverviewColorService.java, Ghidra/Debug/Debugger/src/screen/java/ghidra/app/plugin/core/debug/gui/breakpoint/timeline/BreakpointTimelinePluginScreenShots.java. Pair on, review, or document these before any departure."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"17b842b4cbff75f8fddd7dfd55747d01df800e4a7bd27139018b3dd0f3af161c"}},{"ruleId":"D16","level":"note","message":{"text":"Off-boarding risk: anonymized user #11: If anonymized user #11 becomes unavailable, 5 significant file(s) lose their only recent owner: Ghidra/Features/BSim/src/main/java/ghidra/features/bsim/query/description/DescriptionManager.java, Ghidra/Features/Decompiler/ghidra_scripts/StringParameterPropagator.java, Ghidra/Features/BSim/src/main/java/ghidra/features/bsim/query/FunctionDatabase.java, Ghidra/Features/BSim/src/main/java/ghidra/features/bsim/gui/BSimServerManager.java, Ghidra/Features/BSim/ghidra_scripts/AddProgramToH2BSimDatabaseScript.java. Pair on, review, or document these before any departure."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"c2ac2764fab6e871e6cc62080721bec1ba894bd3e7fd6ca9136a0b6ddb881995"}},{"ruleId":"D16","level":"note","message":{"text":"Off-boarding risk: anonymized user #12: If anonymized user #12 becomes unavailable, 4 significant file(s) lose their only recent owner: Ghidra/Processors/ARM/src/main/java/ghidra/app/plugin/core/analysis/ArmAnalyzer.java, Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/disassembler/CallFixupAnalyzer.java, Ghidra/Features/Decompiler/src/main/java/ghidra/app/plugin/core/analysis/DecompilerSwitchAnalyzer.java, Ghidra/Features/Decompiler/src/main/java/ghidra/app/cmd/function/DecompilerSwitchAnalysisCmd.java. Pair on, review, or document these before any departure."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"d5a552ed155e8009bbabfbb4697f19887c2edabc952ec1e16a3e0b01a6cf19d6"}},{"ruleId":"D16","level":"note","message":{"text":"Off-boarding risk: anonymized user #13: If anonymized user #13 becomes unavailable, 3 significant file(s) lose their only recent owner: Ghidra/Features/Decompiler/src/main/java/ghidra/app/decompiler/DecompileCallback.java, Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/pcode/ElementId.java, Ghidra/Processors/JVM/src/main/java/ghidra/javaclass/format/DescriptorDecoder.java. Pair on, review, or document these before any departure."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"75ed83aecfaf2a91f4392da93bbc112ad80746ff4ecea4cb531f5d64535fc953"}},{"ruleId":"D16","level":"note","message":{"text":"Further sole-owners (lower concentration): 5 other contributor(s) are each the sole owner of a small amount of code below the off-boarding threshold \u2014 folded into the bus-factor score and metrics (346 single-owned of 2853 analysed files in total, counted over production source files of roughly 100 lines or more, excluding tests, vendored, generated and example/demo trees, largest first). They are anonymized user #14 (1 file(s)), anonymized user #15 (1 file(s)), anonymized user #16 (1 file(s)), anonymized user #17 (1 file(s)), anonymized user #18 (1 file(s)) \u2014 spread or document their files in the same way, at lower priority than the named off-boarding risks above."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"6eac528f2429e724e1a97ed868f79eefbcf1888dab4af9a9e673429369bb5b2f"}},{"ruleId":"D28","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"3f6bee0e32e624eb6da119ee7c9ad03eef951f28374cfb8e776b4e44314b6aa1"}},{"ruleId":"D28","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"71947199731a7518100bb170770e93056b7670339f2b03291217a5c434c02776"}},{"ruleId":"D28","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"28f8806d333c754b4006498f06f950c9e9f3ed0f2a9e66c50fdd7782c4e7c0e6"}},{"ruleId":"D28","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"1bd4f857a271eebf5e49f726aeecb71b9c91f873cc0c1ed7f0333fe4c9e64f0f"}},{"ruleId":"D28","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"4bf7a44bda5ba3c7e7bf294e131b0de2c3dea7e05413e07f862e078a89c42cd0"}},{"ruleId":"D28","level":"note","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"3cdfd7beb31b791ae18dcb425e21eb157c842e7bbcd522cc330573c1a6538db1"}},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"33fe693c04d071b3ddbbbf63c29af7a18dddb88e40daae18d9955ff4e420ac19"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"0f1783f29330053875817254d556b329970b16e95436f9dad37200d64331d723"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"4464ee720aa30c4f01cd08a3de726a7a51bdf69aec3433cce5a82685aab8aeed"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"e1e9b3aea9bebda7722d5c00ab9db8eae711cf7b930d729d316b596e970b97c3"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"639e9bc5578cd5c18fcb724fdbef669eddc03269538678ae1fe5052293347cd2"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"2c44896050071c4fa513f8290a060a4e4d6792d5ff0130e70eff7cc272681040"},"taxa":[{"id":"CWE-676","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"9d2774ba3ebb5deee5be74f4da301348a69c59d4a3c92994390f55d6373fef28"},"taxa":[{"id":"CWE-676","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"27ea360efe0a1967abf11d0c5c7031d5a0ea106ed82f27bfe82f0c1933404b1a"},"taxa":[{"id":"CWE-676","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"13c77735ef21665b422bbf7907de9cf174153243bea3ede46285a52bf908c23c"},"taxa":[{"id":"CWE-676","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"c420108a90704a23c92b0549fa2f34ef7100b6ad1b7e60f768da20a1b8c1f8ab"},"taxa":[{"id":"CWE-676","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"c395b776a2ccee6965ef731676b169de527316d633c58b13adafcbfd9129d4d6"},"taxa":[{"id":"CWE-676","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"37965165bcd417a578406a462844053f78551f5dc8daa618cd2368badba7d262"},"taxa":[{"id":"CWE-676","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"1a13e21e64fd14ebf721a00447b827a57efde8e56baa2c23079f790f2f3832ed"},"taxa":[{"id":"CWE-676","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"a448efdd5b2e6791208266df1d7583add5fe4c5a74a4940e7c8b47c6d6b0821f"},"taxa":[{"id":"CWE-676","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"a35ab10d07d26cf93f69194d3055fea10dd576e537a516dbac29b6c6430a574d"},"taxa":[{"id":"CWE-676","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"0826f8b17254c63133df4cbd75546b6ee342fb5f1f01d16f3427be0c6f1ce324"},"taxa":[{"id":"CWE-676","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"000abbcd07a8b3190f55e9085bea8416ef56755f68d2a16cf0a575286326cc83"},"taxa":[{"id":"CWE-676","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"9d2c87ca8d6683d1c9844c4ef86ccafb6926388629e4975773bb94293eb0e5cb"},"taxa":[{"id":"CWE-676","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"30942663ea068ccec5cff746d7799485692074a11fbce4e97783dd7a3d7e6100"},"taxa":[{"id":"CWE-676","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"aa9f055b61471aea5bab718014e727fef060e2c3bed99cf0613fdee6b6eb60bd"},"taxa":[{"id":"CWE-676","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"d4a497fb7b9823ee98900ade72cb18f521a1bb0875e4cc84050b64a7361ebcbc"},"taxa":[{"id":"CWE-676","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"e497e41aca0c76e8f836cfc83ef29034dcdc684dbd8966bedfd96b2726dda395"},"taxa":[{"id":"CWE-676","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"bbd5858e9561ba08351b75f76c6770a9369f691dd8a187fd2b529e1361d1b13e"},"taxa":[{"id":"CWE-676","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"d5478937846795adb40ae09ea875681cb0186f683c60216368cf7e6f83a9f9c0"},"taxa":[{"id":"CWE-676","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"35b032411470be63ac2f3975c64f9697dd0f78ec0ee38b99033a6b5e108b31f8"},"taxa":[{"id":"CWE-676","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"6fe5e11fe56df188f14af2af63a663459e5eab304483bb95ab5ae9241b18406d"},"taxa":[{"id":"CWE-676","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"0667f70d3349e934c37cbef598f755d99e570fcb50458a6414707d48b66a491c"},"taxa":[{"id":"CWE-676","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"f9762566429faa68a3117cfe99965597fe8b66f40cb5c4e18bbbde75ce2a20d8"},"taxa":[{"id":"CWE-676","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"b239a6f74133f3b40e77ba3723717bd16def691a28ac478023a4d9ff93d121c2"},"taxa":[{"id":"CWE-676","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"8baff8146ce7051cdd020cd59e463a573deefbd4bc87f4aa4cbce450bb7709d0"},"taxa":[{"id":"CWE-676","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"22747ef5b0404a4a5d009604508ca6d8772891c7253c907566abcd29062220b1"},"taxa":[{"id":"CWE-676","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"10c847af9ac115d7a364173b34fd9187e9d35405aaafcbf63d06b0dd5635ae20"},"taxa":[{"id":"CWE-676","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"6881514c73c267bea3496ffaf657f00f77967e2f496b0eaeeaf1b2dc95fd8987"},"taxa":[{"id":"CWE-676","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"242599d250cd60c177f3a981ca2f0309f944bb82548f5a99fa246cc7139aabcf"},"taxa":[{"id":"CWE-676","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"03fd81de81090375c215321b71f537ee89cc0e08e03d50317e7048443e708f87"},"taxa":[{"id":"CWE-676","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"d2c34c838d6c17ba3c9fa865c5cbf84e2f1a137c1a4e22e9b2d542e057dc0b26"},"taxa":[{"id":"CWE-676","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"c05fd0bce9fdf22325b9192513461488dae9d5b7cbe311d4359e2ca7d595b699"},"taxa":[{"id":"CWE-676","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"ce370f77c806fb0453281b6f66ed52355929dcc0bd9ed62fbae3adbd73a2cf90"},"taxa":[{"id":"CWE-676","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"17facb5092419ffe4475bc19a1c209aa406c30a06ea21cbd47ed10e466231a47"},"taxa":[{"id":"CWE-676","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"433376be02a9adf772faffef0aac2ce61efa50a26825398c3cb6db5e2f026d8c"},"taxa":[{"id":"CWE-676","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"47671991fdd15a59b2ae3c990d33ca71096a2cb9b86acfb2d2ed6802f6ec77f7"},"taxa":[{"id":"CWE-676","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"4cf57bf2d46e62b9fa39b5b1b558362f5c3f3acb7e2b7db0b57caede78981b2c"},"taxa":[{"id":"CWE-676","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"c2bff0632c9e465ee4dca17406db9f4d1decd7dd450e15deeebe2d4a28111d8d"},"taxa":[{"id":"CWE-676","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"482689065c60999d2beb5fa4cf61ea182a5de117f8cb5b345adefdf06de91eff"},"taxa":[{"id":"CWE-676","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"99703d7ef9ea4485fc9859b2b563e64ab7ba0e8918de94b5e32fd423bb2c4c1c"},"taxa":[{"id":"CWE-676","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"c5cb1e9bac0e274ce7be9d7d88cf44953da43f28834a290177e6f48b9ecd20fe"},"taxa":[{"id":"CWE-134","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"0b56e96817ea0ef30c036a8e66f790773a6f19bb0546815da6b9df95dce6385f"},"taxa":[{"id":"CWE-676","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"11138f4202716591818f99220bc072e7cf155e0fceb76f996a295451abaf3e06"},"taxa":[{"id":"CWE-676","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"4babe76182e4b512c2ca03c847843d85a726e84bab2b2bc8c95ccd2e5c320c56"},"taxa":[{"id":"CWE-676","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"5f9f57c507ab910e8844fd11b63de375c0eb91a5e7b535ce5e17ea53972c2741"},"taxa":[{"id":"CWE-676","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D31","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"31fb7ada11de80469ba762f889c4120ca4c46f0a9bde2666fb797f583ecdf041"}},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"2225a1f84a81182be61561e295fd7d976d156fa3d8223076be7924ab2f8827e8"}},{"ruleId":"D32","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"20b0f2abe37b3b8330358652ed04fa9070942bd5f77f801dc6acd1865129dc86"}},{"ruleId":"D32","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"66303a0fce92e4dfba5449702ad6f6a0b0b72a9b5e017e6e1db0cac4d4fed646"}},{"ruleId":"D32","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"14513a588245972f5de56262b7b4c1cc2b0ccd47cb587d63a50483a88936d492"}},{"ruleId":"D32","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"32c7e7ac7b185667c56cc341e422c0966a153efa74defe316f9428eb58653b78"}},{"ruleId":"D32","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"da00e87166a635f21f4a5ee3238c85c1c6e54208d73ded740574296c2d8c553d"}},{"ruleId":"D32","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"67e6defc2c4016b6fa717ef4014f89c5e907c4a1043718d8d626c1d84beef49f"}},{"ruleId":"D32","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"71f438f774082dfdee8f097ac8ba36375f7b044381ef7fb262bdc1fe6a70c71c"}},{"ruleId":"D32","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"a59b3076b3c12318f83c7ecc685fa3c97f7e3c9213004b5f09474b9866fe0243"}},{"ruleId":"D32","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"3362734f3de6e0ea017ec02b14f07fa123fbd3ca9404034e1c86555c4d767a31"}},{"ruleId":"D32","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"f203d9a9bfa2e33126488dc4b55d76324f6a00a53e7f5f4625d49395053ada79"}},{"ruleId":"D32","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"20241f056aae034ffc642c01fa990e0a7d2a86c5614fb537344b343ff13fdc16"}},{"ruleId":"D32","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"e5d132a586c0a3682ee1502b9d213f1f48e640f516e81329816f32b4bcc6eeb5"}},{"ruleId":"D32","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"67d67244f404b610ac95dbfdfea2cce02ff8b2b32d3559d1b5a65cbd87a1f11f"}},{"ruleId":"D32","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"a57d20002cf1f152a2f1fb60873dd949423cf895ca5600852081e3283dcc6d07"}},{"ruleId":"D32","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"3e9b0f7a6aaf2f8012c3eb7676587985e783723b5deeb0912febaae536fa68aa"}},{"ruleId":"D32","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"3474e39c2b2155cd26dfe92605bb1468e04d0293e420c69da5adb36aec39f7c1"}},{"ruleId":"D32","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"8c22970dd299dff14234791d2c09d910a837d5caa95124b179fa666de8abdd1a"}},{"ruleId":"D32","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"ec1f3127080a9c480b32a2d75209ba73a9722d62de3e8fa460e5b132a4f3506f"}},{"ruleId":"D32","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"6d29e2f46efd57259d36c313ea83cbfd427179faa817247cb8bef5113269affd"}},{"ruleId":"D32","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"045b49f3d681a691a0d979c9351c609463e5642b837d0f88c022924ca1afe6e3"}},{"ruleId":"D32","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"9ce68bbfdefbd553c0d1dc1a812b913e946a20e74604d2d96fd5588802f11dff"}},{"ruleId":"D32","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"a2c7cf634e521c3742428d0eb53ed0fbe700ab567ff02fa4c78d0d5945ba068c"}},{"ruleId":"D32","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"c414e783f8ec234d704d84e82daa8153bf9717241011d91faef083f4fd7befbe"}},{"ruleId":"D32","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"79e2899368833e65d65ec93dbee9bfbff6e1dba9053296cda8991472c0ce401a"}},{"ruleId":"D32","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"5551994052186db1482acdbab8569a23ce58c3d192ce0d7d5a3ee99f3fe239de"}},{"ruleId":"D32","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"dada62456668344c7866995590c196b9ee3e045380ba99d2264f5bd6324d7780"}},{"ruleId":"D32","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"3f19850ee51160ebe7d4fd61f908c624acc3f958e41c2e978499aa86ac044183"}},{"ruleId":"D32","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"89a261da64b38ae8aa972be1f659ea65e0075c8605752f981357564be5bbb07d"}},{"ruleId":"D34","level":"error","message":{"text":"Orphaned knowledge: No living knowledge remains for this large file \u2014 its last meaningful change has decayed away; if it breaks, no one currently understands it. Schedule a read-through / add characterisation tests before it bites."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Processors/RISCV/scripts/binutil.py"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"4f0dbc3dd442e5fcc3820a342822f1c3f944bd7be7bcd006c05458c26ccdea5b"}},{"ruleId":"D34","level":"error","message":{"text":"Orphaned knowledge: No living knowledge remains for this large file \u2014 its last meaningful change has decayed away; if it breaks, no one currently understands it. Schedule a read-through / add characterisation tests before it bites."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/android/dex/analyzer/DexHeaderFormatMarkup.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"3806afa9a3dadefa3252f3d29b8ebdad4447f10f146d7294e72206210a11649b"}},{"ruleId":"D34","level":"error","message":{"text":"Orphaned knowledge: No living knowledge remains for this large file \u2014 its last meaningful change has decayed away; if it breaks, no one currently understands it. Schedule a read-through / add characterisation tests before it bites."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/Graph/src/main/java/ghidra/service/graph/GraphDisplayOptions.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"1012d5edc8620317f20950cdc3157a73911882512f4f48db94155a025918ca01"}},{"ruleId":"D34","level":"error","message":{"text":"Orphaned knowledge: No living knowledge remains for this large file \u2014 its last meaningful change has decayed away; if it breaks, no one currently understands it. Schedule a read-through / add characterisation tests before it bites."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/osgi/BundleHost.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"5e60cc46f31c9764084611858840af468076df81e30b674321f7833ffcfa02fb"}},{"ruleId":"D34","level":"error","message":{"text":"Orphaned knowledge: No living knowledge remains for this large file \u2014 its last meaningful change has decayed away; if it breaks, no one currently understands it. Schedule a read-through / add characterisation tests before it bites."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/DecompilerDependent/src/main/java/ghidra/app/plugin/core/string/variadic/FormatStringParser.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"1811c488ee3ae9b10f826dcf307c030b5233f2eca164047354dc587da39af075"}},{"ruleId":"D34","level":"error","message":{"text":"Orphaned knowledge: No living knowledge remains for this large file \u2014 its last meaningful change has decayed away; if it breaks, no one currently understands it. Schedule a read-through / add characterisation tests before it bites."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcode/floatformat/BigFloat.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"2b7a52907ab663370c1e57f455ff182e636b90b8e513777159ec05843cd6579a"}},{"ruleId":"D34","level":"error","message":{"text":"Orphaned knowledge: No living knowledge remains for this large file \u2014 its last meaningful change has decayed away; if it breaks, no one currently understands it. Schedule a read-through / add characterisation tests before it bites."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/Base/src/main/java/ghidra/app/util/opinion/DecompileDebugFormatManager.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"db69571c262e9a28b2c7117350960bd2136a8fb85c3675f1d94a2c1d83d58883"}},{"ruleId":"D34","level":"error","message":{"text":"Orphaned knowledge: No living knowledge remains for this large file \u2014 its last meaningful change has decayed away; if it breaks, no one currently understands it. Schedule a read-through / add characterisation tests before it bites."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/cart/CartV1File.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"fac60911862c1fc00331eb899c7f3455e89e87a6117170d80e430b9e72c38c85"}},{"ruleId":"D34","level":"error","message":{"text":"Orphaned knowledge: No living knowledge remains for this large file \u2014 its last meaningful change has decayed away; if it breaks, no one currently understands it. Schedule a read-through / add characterisation tests before it bites."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"GhidraBuild/BuildFiles/Doclets/src/main/java/ghidra/doclets/typestubs/PythonTypeStubType.java"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"e67120eb1b903a9dc21fd124ef1dde7ff4e70bd8b9af5fda8671bc73a9943810"}},{"ruleId":"D34","level":"note","message":{"text":"Further orphaned files (smaller): 65 smaller file(s) also have no living knowledge \u2014 folded into the freshness score and metrics rather than listed individually (74 orphaned of 3000 analysed files in total, counted over production source files of roughly 100 lines or more, excluding tests, vendored, generated and example/demo trees, largest first)."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"ce861fd78f6935114d3a342cb90ad25870f984e1042954fcbbe27c0e23be3658"}}],"taxonomies":[{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d","organization":"MITRE","informationUri":"https://cwe.mitre.org/","isComprehensive":false,"shortDescription":{"text":"The MITRE Common Weakness Enumeration (CWE)."},"taxa":[{"id":"CWE-1032","guid":"5f21e517-68aa-a650-9a25-5771ef024637","name":"OWASP Top Ten \u2014 Security Misconfiguration category","shortDescription":{"text":"OWASP Top Ten \u2014 Security Misconfiguration category"},"helpUri":"https://cwe.mitre.org/data/definitions/1032.html"},{"id":"CWE-1059","guid":"a2381a08-60f6-9554-a8b8-f3018cfaaca5","name":"Insufficient Technical Documentation","shortDescription":{"text":"Insufficient Technical Documentation"},"helpUri":"https://cwe.mitre.org/data/definitions/1059.html"},{"id":"CWE-134","guid":"f92eb270-a113-5050-a4e8-7173e51af580","name":"CWE-134","shortDescription":{"text":"CWE-134"},"helpUri":"https://cwe.mitre.org/data/definitions/134.html"},{"id":"CWE-1357","guid":"e4d2e772-757e-0a5c-bd7d-77052949d866","name":"Reliance on Insufficiently Trustworthy Component","shortDescription":{"text":"Reliance on Insufficiently Trustworthy Component"},"helpUri":"https://cwe.mitre.org/data/definitions/1357.html"},{"id":"CWE-16","guid":"659db3ea-affc-8453-8add-c1218fbfcb92","name":"Configuration","shortDescription":{"text":"Configuration"},"helpUri":"https://cwe.mitre.org/data/definitions/16.html"},{"id":"CWE-200","guid":"b0ce3b1d-7a29-fe50-8aab-9aba899d2988","name":"Exposure of Sensitive Information to an Unauthorized Actor","shortDescription":{"text":"Exposure of Sensitive Information to an Unauthorized Actor"},"helpUri":"https://cwe.mitre.org/data/definitions/200.html"},{"id":"CWE-259","guid":"ae9ad959-fbb6-9d5e-892d-3dca66da0b69","name":"Use of Hard-coded Password","shortDescription":{"text":"Use of Hard-coded Password"},"helpUri":"https://cwe.mitre.org/data/definitions/259.html"},{"id":"CWE-312","guid":"96724ece-b0b2-a45c-83f9-0869fa3f6bea","name":"Cleartext Storage of Sensitive Information","shortDescription":{"text":"Cleartext Storage of Sensitive Information"},"helpUri":"https://cwe.mitre.org/data/definitions/312.html"},{"id":"CWE-353","guid":"09d7e902-d4ee-f05d-ae6c-0a1554d0c18f","name":"CWE-353","shortDescription":{"text":"CWE-353"},"helpUri":"https://cwe.mitre.org/data/definitions/353.html"},{"id":"CWE-359","guid":"b7dfe5b0-0351-645b-a311-b936102c2929","name":"Exposure of Private Personal Information to an Unauthorized Actor","shortDescription":{"text":"Exposure of Private Personal Information to an Unauthorized Actor"},"helpUri":"https://cwe.mitre.org/data/definitions/359.html"},{"id":"CWE-676","guid":"550e6fab-2881-3252-8a05-c688a6b19c14","name":"CWE-676","shortDescription":{"text":"CWE-676"},"helpUri":"https://cwe.mitre.org/data/definitions/676.html"},{"id":"CWE-732","guid":"1da27e8f-b330-7650-ab63-bd61953eae5d","name":"Incorrect Permission Assignment for Critical Resource","shortDescription":{"text":"Incorrect Permission Assignment for Critical Resource"},"helpUri":"https://cwe.mitre.org/data/definitions/732.html"},{"id":"CWE-77","guid":"332c8ade-6612-9f56-a06b-d8d90b1a8750","name":"Command Injection","shortDescription":{"text":"Command Injection"},"helpUri":"https://cwe.mitre.org/data/definitions/77.html"},{"id":"CWE-78","guid":"2e31ceaf-c7ae-2e5e-9661-cfb1362789cf","name":"OS Command Injection","shortDescription":{"text":"OS Command Injection"},"helpUri":"https://cwe.mitre.org/data/definitions/78.html"},{"id":"CWE-79","guid":"fd45580b-e8c4-fc5e-8c2f-aa8fab0b4dbf","name":"Cross-site Scripting (XSS)","shortDescription":{"text":"Cross-site Scripting (XSS)"},"helpUri":"https://cwe.mitre.org/data/definitions/79.html"},{"id":"CWE-798","guid":"5e8f057d-fee3-995a-a0cb-9fc5b0d174d1","name":"Use of Hard-coded Credentials","shortDescription":{"text":"Use of Hard-coded Credentials"},"helpUri":"https://cwe.mitre.org/data/definitions/798.html"},{"id":"CWE-89","guid":"6d08fdad-37eb-c150-bbf0-d7d946863407","name":"SQL Injection","shortDescription":{"text":"SQL Injection"},"helpUri":"https://cwe.mitre.org/data/definitions/89.html"},{"id":"CWE-94","guid":"75e7f50c-6c2f-dd52-bf40-bf6c52b861fd","name":"Code Injection","shortDescription":{"text":"Code Injection"},"helpUri":"https://cwe.mitre.org/data/definitions/94.html"}]}],"properties":{"codehealthPublication":{"public":true,"notice":"This is the PUBLIC form of this artifact. Findings are listed in full, but the details of SECURITY findings \u2014 which rule fired, in which file, on which line, and how to fix it \u2014 are deliberately withheld, and any secret-scanner results are excluded entirely. Where detail is absent here it was REMOVED FOR PUBLICATION; it is not missing from the analysis. The complete artifact is available from the repository owner.","securityFindingsRedacted":86,"secretScannerRunsExcluded":0}},"redactionTokens":["A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."]}]}